-1

我在 AHDL 中实现了一个控制单元 (UC),我应该对其进行仿真,看看它是否按照相应的 ASM 图中的定义工作。我用MAX+plus II模拟它,它并没有像我预期的那样工作,但我真的不能说是哪里出了问题,因为我不熟悉 AHDL,更不用说TABLE部分了。

这是我的控制单元:

子设计 EXP1_UC
(
CLKUC:输入;
回复:输入;
N1,N2,M1,M2:输入;
CLR1、CLR2、CLR3、EN1、EN2、EN3、SEL:输出; ) 多变的 UC:位机(CLR1、CLR2、CLR3、EN1、EN2、EN3、SEL) 与状态 ( s0 = B“1110000”, s1 = B“0001000”, s2 = B“0000100”, s3 = B“0000000”, s4 = B“0000010”, s5 = B“0000001”, s6 = B“0000011” ); 开始 UC.CLK = CLKUC; UC.RESET = RES; 桌子 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; 茶几; 结尾;

模拟中有两种我不明白的情况:

1) 当前状态为 S3 且输入为 M1 = 1 且 M2 = 1 时,下一个状态为 S6。我不明白,因为在我看来,如果不先通过 S5,就无法进入 S6。

2) 当前状态为 S0 且输入为 N1 = 1 且 N2 = 1 时,下一个状态在仿真中定义为“12”。好吧,没有这样的状态......

谁能帮我?谢谢。

更新:

1)我必须使用 ADHL 和 MAX+plus II,即使它不是最好的工具组合,因为这是大学的文书工作,我没有编写代码(就像我说的,我只是应该模拟它,我不能改变它)。

4

1 回答 1

1

第一:你真的必须使用AHDL吗?- 多年来,它一直没有得到 Altera-land 的适当支持。MAX Plus II 是一款非常古老的软件——我的建议是掌握 Quartus 并学习 VHDL(或 Verilog,如果必须的话;)。对不起,如果这听起来很苛刻!

但是你的问题听起来像是一个传统的逻辑问题......你的状态机的输入是否正确同步?如果没有,您会得到各种奇怪的效果,因为它们在接近时钟边沿时发生变化,然后信号到达时钟一侧的状态机的一部分和时钟“另一侧”的其他部分(即直到下一个周期才看到)。这会让事情变得非常混乱!此外,请确保您的复位信号也与 clk 信号同步。

快速破解 - 将两个触发器串联在每个输入上。然后阅读同步异步输入...

于 2009-10-28T16:08:38.640 回答