2011-11-03 89 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

相關問題