大家好,我有以下 VHDL,它在硬件中没有做它应该做的事情,但它确实在模拟中工作。基本上我有一个计数器,根据我想要输出某些数据的计数,我实现了多路复用器,如下所示:
write_data <=
('1' & '0' & "1111" ) when (data_cnt_r < 1) else
('0' & '0' & "1111" ) when (data_cnt_r >= 1 and data_cnt_r < 2 ) else
('0' & '0' & "0000" ) when (data_cnt_r >= 2 and data_cnt_r < 3 ) else
('0' & '0' & data_reg ) when (data_cnt_r >= 3 and data_cnt_r < 1027 ) else
('0' & '1' & CRC16_o(63) & CRC16_o(47) & CRC16_o(31) & CRC16_o(15) ) when (data_cnt_r >= 1027 and data_cnt_r < 1043 ) else
('0' & '0' & "1111");
我遇到的问题是,当计数为 1043 时,我看到的是 CRC 输出,而不是在代码的最后一行看到“1111”。在模拟中,它的工作方式与我预期的一样。有没有更好的方法来写这个?任何想法为什么会出现差异?
*根据要求编辑更多详细信息:
我正在使用
use IEEE.STD_LOGIC_UNSIGNED.ALL;
data_cnt 是一个免费的运行计数器,一切都是 std_logic_vector 或 std_logic
signal data_cnt_r : std_logic_vector(11 downto 0); -- 12 bit counter
write_data 去一个BUFIO,它也是一个标准的逻辑向量