嗨,大家好,我有以下的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期間提出警告。 –