2009-10-28 13 views
-1

我在AHDL中實現了一個控制單元(UC),我應該模擬它,看看它是否按照對應的ASM圖中的定義工作。 我用MAX + plus II來模擬它,並且它沒有像我期望的那樣工作,但我不能真正地說出了什麼問題,因爲我不熟悉AHDL,更不用說TABLE部分。TABLE如何在AHDL中工作?

這是我的控制單位:

 
SUBDESIGN EXP1_UC 
(
CLKUC: INPUT; 
RES: INPUT; 
N1,N2,M1,M2: INPUT;
CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL: OUTPUT; ) VARIABLE UC: MACHINE OF BITS (CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL) WITH STATES ( s0 = B"1110000", s1= B"0001000", s2= B"0000100", s3= B"0000000", s4= B"0000010", s5= B"0000001", s6= B"0000011" ); BEGIN UC.CLK = CLKUC; UC.RESET = RES; TABLE UC, N1,N2,M1,M2 => UC; s0, 0, 0, X, X => s0; s0, 1, X, X, X => s1; s0, X, 1, X, X => s2; s1, X, X, X, X => s3; s2, X, X, X, X => s3; s3, 0, 0, 0, 0 => s3; s3, 1, X, X, X => s1; s3, X, 1, X, X => s2; s3, X, X, 1, X => s4; s3, X, X, X, 1 => s5; s4, X, X, X, X => s3; s5, X, X, X, X => s6; s6, X, X, X, X => s3; END TABLE; END;

有2種情況下,當模擬我不理解:

1)噹噹前狀態是S3和輸入是M1 = 1和M2 = 1,下一個狀態是S6。我不明白,因爲我看到它的方式,沒有先通過S5就沒有辦法去S6。 2)噹噹前狀態爲S0且輸入爲N1 = 1且N2 = 1時,下一個狀態在模擬中被定義爲「12」。那麼,沒有這樣的狀態...

任何人都可以幫助我嗎? 謝謝。

UPDATE:

1)我必須使用ADHL和MAX + PLUS II即使它幾乎沒有工具的最佳組合,因爲這是學院的文書工作,我沒有寫的代碼(如我說,我只是想模擬它,我不能改變它)。

回答

1

第一:你真的要用AHDL嗎? - 多年來它一直沒有得到Altera土地的適當支持。 MAX Plus II是一款非常古老的軟件 - 獲得Quartus的支持並學習VHDL(或Verilog,如果您必須的話),這是我的建議。對不起,如果這聽起來很苛刻!

但是,你的問題真的聽起來像一個傳統的邏輯問題......是你的狀態機正確同步的輸入?如果不是這樣,你可以在接近時鐘邊緣時獲得各種奇怪的效果,然後信號到達時鐘一側的狀態機的一部分以及時鐘「另一側」的其他部分(即直到下一個週期纔看到)。這會讓事情變得令人生厭!另外,確保您的復位信號也與時鐘信號同步。

快速入侵 - 在每個輸入的鏈上粘貼兩個拖鞋。然後閱讀同步異步輸入...

+0

首先,感謝您的回答。這是我的第一個問題,所以我不確定我是否應該直接回答你或作爲我的問題的更新。那麼,我會做兩個。更新1回答了爲什麼我必須使用AHDL,即使我目前正在學習VHDL,而且我已經從Xilinx移到ISE WebPack而不是MAX Plus II :) 至於你的回答,我所有的輸入都是正確同步的:我不擔心執行時間,所以我在上升時鐘沿之前將輸入設置了半個時鐘週期,並且它們在整個時鐘週期內保持爲 。任何其他想法?再次感謝。 – dsetton 2009-10-30 11:34:12

相關問題