2011-11-03 16 views
0

嗨,大家好,我有以下的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它也是一个标准逻辑向量

+0

您可能要考虑使用(n = 0)而不是(n <1)。另外,假设data_cnt_r有两个状态逻辑,所有情况下的第一个条件是多余的。 – 2011-11-04 04:13:13

+0

data_cnt_r的数据类型是什么? – Philippe

+2

我不认为问题就在这一行上。我可能需要看到更多的代码。通常,模拟和硬件之间的差异归结为不正确的灵敏度列表,但这不在过程中。他们也应该在sim/syn期间提出警告。 –

回答

1

什么是happ靠近你的其他过渡? (1027,3,2,1) 这是在一个过程块还是异步? 是data_cnt_r一个无符号的?那data_reg和CRC值呢?我假设两个std_logic_vectors?

我们需要多一点的上下文

你可以尝试明确地添加过渡,看它是否有助于ALA:

('0' & '1' & CRC_stor) when (data_cnt_r >= 1027 and data_cnt_r < 1043) else 
('0' & '0' & "1111" ) when (data_cnt_r = 1043) else 
('0' & '0' & "1111" ); 

这实际上是在一个时钟程序块,你可能会看到的CRC值在写入数据的时钟周期的后期,但那么你也将看到你周围的其他过渡这一问题(它们都会更新背后data_cnt_r一个周期)

你可能会得到意外的逻辑错误,如果它在非定时过程块

此外,这是一个更容易阅读。

CRC_stor <= CRC16_o(63) & CRC16_o(47) & CRC16_o(31) & CRC16_o(15) 

write_data <= 
    ('1' & '0' & "1111" ) when (data_cnt_r = 0) else    
    ('0' & '0' & "1111" ) when (data_cnt_r = 1) else 
    ('0' & '0' & "0000" ) when (data_cnt_r = 2) else 
    ('0' & '0' & data_reg) when (data_cnt_r >= 3 and data_cnt_r < 1027) else 
    ('0' & '1' & CRC_stor) when (data_cnt_r >= 1027 and data_cnt_r < 1043) else 
    ('0' & '0' & "1111" ); 
+0

好点,谢谢大家,我感谢大家的反馈和帮助,我解决了这个问题。我有两个问题。 1)我没有注册输出,2)输出时钟应该与FPGA输出的数据相差90度,因此器件时钟正确。 – user968102

相关问题