用Nand2Tetris(HDL代码)实现一个16位寄存器



我认为我已经完成了大部分工作,我的硬件模拟器接受了芯片,但当运行测试脚本时,比较在一半时失败,我猜将DFF的输出反馈到Mux中存在问题。任何建议都将不胜感激!

16位寄存器:如果负载[t]==1,则out[t+1]=in[t]否则不会更改

CHIP Register {
IN in[16], load;
OUT out[16];
PARTS:
Mux (a=dffout, b=in[15], sel=load, out= dff);
DFF (in = dff, out = dffout, out = out[15]);

如果没有看到整个Register脚本并了解有关错误的更多详细信息,就无法确定错误所在。

您发布的代码段似乎实现了寄存器的单个位,因此您似乎正在使用单个Mux和DFF组件复制这16次。这是一种糟糕的做法,因为它会让错误的东西更容易连接起来(你可能在某个地方有一个拼写错误导致了错误(,而且它会让代码很难阅读。

与高级编程一样,建议的做法是尽可能简洁地编写代码,并尽可能使用现有的hdl组件。在课程的这一点上,您应该已经创建了一个Bit((组件;你会发现用它们构建Register((要容易得多。

这来得很晚,但对于任何看到这一点的人来说,提供的HDL代码只获取MSB(索引15处的最高有效位(并将其放入寄存器。我假设你的意图是制作一个16位寄存器,并一次加载所有位,对吧?如果是这样的话,制作一个1位内存芯片,然后将其中的16个用于16位寄存器

之所以必须这样,是因为nand2tetris没有内置16位DFF(除非你想自己制作(在此处输入图像描述

最新更新