问题遇到的现象和发生背景
在用VHDL实现CRC校验过程中,选用的检验多项式为CRC4:X^4 + X +1。
原始数据信号:A_1(仿真图中为TEST2_t);CRC验证码:CK2_t (仿真图中为CK2_o);与检验多项式进行“模2”除法运算信号:crc;
原始数据与最终CRC验证码合并结果:check (仿真图中为TEST2_o)。
前仿的时候,CK2_o 和 TEST2_o 能在 TEST2_t变化的时候瞬间完成计算,并且结果正确。
但是在后仿的时候,CRC验证码计算结果最终正确,但是中途在很短的时间内出现了不稳定的情况。因为第一次接触变量,看代码没有发现问题。按照敏感信号和进程定义,在敏感信号 TEST2_t 变化一次后,进程应当进行一次,所以 CK2_o 和 TEST2_o 应当仅变化一次。但是后仿结果显示,二者出现两次或者三次变化。不明白是什么原因造成的,求解惑,万分感谢。
问题相关代码,请勿粘贴截图
process(A_1) ---input data ,8bit
variable data : std_logic_vector(11 downto 0);
variable crc : std_logic_vector(4 downto 0);
variable crc_code : std_logic_vector(3 downto 0);
begin
crc_code := "0000";
data := A_1 & "0000";
crc := data(11 downto 7);
for i IN 6 downto 0 LOOP
if(crc(4) = '1') then
crc_code := crc(3 downto 0) XOR "0011";
else
crc_code := crc(3 downto 0);
end if;
crc := crc_code & data(i);
end loop;
if(crc(4) = '1') then
crc_code := crc(3 downto 0) XOR "0110";
else
crc_code := crc(3 downto 0);
end if;
CK2_t<= crc_code;
check<= A_1 & crc_code;
end process;
运行结果及报错内容
前仿:
后仿:
我的解答思路和尝试过的方法
我想要达到的结果