?? hamming.vhd
字號:
--實驗1
--8位Hamming編碼和校驗
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY hamming IS
PORT ( choice : IN STD_LOGIC; --控制位:為0時進行hamming編碼;為1時進行hamming校驗
data_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --輸入8位數據,對其進行hamming編碼
data_ham : OUT STD_LOGIC_VECTOR(12 DOWNTO 0); --輸出8位數據的hamming編碼,13位
data_check : IN STD_LOGIC_VECTOR(12 DOWNTO 0); --輸入待驗證的13位hamming碼
s : OUT STD_LOGIC_VECTOR(4 DOWNTO 0) --輸出校驗的結果值,指出哪位錯誤
);
END hamming;
ARCHITECTURE behav OF hamming IS
BEGIN
--編碼過程
PROCESS(choice,data_in)
VARIABLE p:STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
IF choice = '0' THEN
--套用檢驗位的公式,見實驗原理部分
p(0) := data_in(0) XOR data_in(1) XOR data_in(3) XOR data_in(4) XOR data_in(6);
p(1) := data_in(0) XOR data_in(2) XOR data_in(3) XOR data_in(5) XOR data_in(6);
p(2) := data_in(1) XOR data_in(2) XOR data_in(3) XOR data_in(7);
p(3) := data_in(4) XOR data_in(5) XOR data_in(6) XOR data_in(7);
p(4) := data_in(0) XOR data_in(1) XOR data_in(2) XOR data_in(3) XOR data_in(4) XOR data_in(5) XOR data_in(6) XOR data_in(7) XOR p(0) XOR p(1) XOR p(2) XOR p(3);
--按照位置關系,將編碼后的校驗位和數據位按照正確的位置關系輸出
data_ham(0) <= p(0);
data_ham(1) <= p(1);
data_ham(3) <= p(2);
data_ham(7) <= p(3);
data_ham(12)<= p(4);
data_ham(2) <= data_in(0);
data_ham(4) <= data_in(1);
data_ham(5) <= data_in(2);
data_ham(6) <= data_in(3);
data_ham(8) <= data_in(4);
data_ham(9) <= data_in(5);
data_ham(10)<= data_in(6);
data_ham(11)<= data_in(7);
END IF;
END PROCESS;
--校驗過程
PROCESS(choice,data_check)
VARIABLE p : STD_LOGIC_VECTOR(4 DOWNTO 0); --5位校驗位
VARIABLE d : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位數據位
BEGIN
IF choice= '1' THEN
--從接收到的hamming碼中按照位置關系分離出數據位和校驗位
p(0) := data_check(0);
p(1) := data_check(1);
p(2) := data_check(3);
p(3) := data_check(7);
p(4) := data_check(12);
d(0) := data_check(2);
d(1) := data_check(4);
d(2) := data_check(5);
d(3) := data_check(6);
d(4) := data_check(8);
d(5) := data_check(9);
d(6) := data_check(10);
d(7) := data_check(11);
--根據得到的校驗位和數據位計算s,判斷哪位出錯;具體公式見實驗原理部分
s(0) <= p(0) XOR d(0) XOR d(1) XOR d(3) XOR d(4) XOR d(6);
s(1) <= p(1) XOR d(0) XOR d(2) XOR d(3) XOR d(5) XOR d(6);
s(2) <= p(2) XOR d(1) XOR d(2) XOR d(3) XOR d(7);
s(3) <= p(3) XOR d(4) XOR d(5) XOR d(6) XOR d(7);
s(4) <= p(4) XOR d(0) XOR d(1) XOR d(2) XOR d(3) XOR d(4) XOR d(5) XOR d(6) XOR d(7) XOR p(0) XOR p(1) XOR p(2) XOR p(3);
END IF;
END PROCESS;
END behav;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -