我在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,即使我目前正在學習VHDL,而且我已經從Xilinx移到ISE WebPack而不是MAX Plus II :) 至於你的回答,我所有的輸入都是正確同步的:我不擔心執行時間,所以我在上升時鐘沿之前將輸入設置了半個時鐘週期,並且它們在整個時鐘週期內保持爲 。任何其他想法?再次感謝。 – dsetton 2009-10-30 11:34:12