我正在设计一个换档键检测器。我写了一个测试台。测试表明我的实现不正确。
这是ModelSim中的模拟。
红线表示未定义。这种行为只发生了两次。
令我不解的是:为什么这两个价值观之间会有如此大的差距?如果您查看测试台,第 3 和第 4 程序使用第 1 和第 2 程序使用的格式。
测试台在这里: http: //pastebin.com/BJVFFgGr
检测器代码在这里: http: //pastebin.com/di42FLqT
如你看到的。我的设计中有两种状态。当按下(或释放)键时,PS2 接收器将过滤并生成干净的 8 位生成代码。中断代码只是 F0 后跟刚刚释放的密钥的 make 代码。我的状态机使用两个额外的位来跟踪按下了哪个 shift 键。
我进行了调试,当我们输入第三个测试值时,SHIFT = U 而不是前一个值的 1。
-- release left shift
hex <= "11110000";
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
hex <= "00010010"; <----- when I am here shift is already U
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
if (shift /= '0')then
error <= '1';
end if;
left_pressed 和 right_pressed 是信号,而不是变量。因此,它们在任何情况下都应该具有 a 值。如果其中之一发生变化,与换档信号的连接将自动更新。
有人可以帮帮我吗?谢谢。
谢谢。