嗨,大家好,我有以下的VHDL,它不是在硬件上做它想要的,但它在模拟工作。基本上我有一个计数器,并根据计数我想一定要输出的数据,我实现了多路如下: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
的写入数据都到了BUFIO它也是一个标准逻辑向量
您可能要考虑使用(n = 0)而不是(n <1)。另外,假设data_cnt_r有两个状态逻辑,所有情况下的第一个条件是多余的。 – 2011-11-04 04:13:13
data_cnt_r的数据类型是什么? – Philippe
我不认为问题就在这一行上。我可能需要看到更多的代码。通常,模拟和硬件之间的差异归结为不正确的灵敏度列表,但这不在过程中。他们也应该在sim/syn期间提出警告。 –