📄 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 + -