问题标签 [nand2tetris]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2258 浏览

hdl - 用 HDL 实现 AND 芯片

我正在阅读这本书http://nand2tetris.org/book.php,它教授 CS 的基本概念,但在要求我编写 AND 芯片并在提供的测试软件中对其进行测试的地方,我陷入了困境。

这是我到目前为止所得到的:

问题是我收到此错误:

而且我不知道我收到此错误是因为测试程序出现故障还是因为我的代码错误并且软件无法加载它。

0 投票
1 回答
4166 浏览

memory - nand2俄罗斯方块。内存实现

我在 nand2tetris 课程中实现了数据内存实现。但我真的不明白我的实现的某些部分:

  1. 负责这里的负载。我知道如果负载为 0 - Dmux4Way 在任何情况下都是 0 0 0 0。但我不明白在那之后它是如何工作的。即它如何允许不要在内存中加载数据。
  2. 至少无法理解为什么在 Screen 中我们提供 address[0..12] 而不是 address[0..14] - 完整地址。在我看来,我们应该使用第二个,因为屏幕内存映射位于 RAM 内存映射之后,如果我们想要请求屏幕内存映射 - 我们应该使用范围 (16 384 - 24 575) - 十进制或 (100000000000000 - 101111111111111) - 二进制。但是我们如何才能表示该范围仅使用 13 宽度总线(地址 [0..12])?不可能。

    因此,如果我们想表示屏幕内存映射,我们应该使用上面介绍的范围。该范围有 15 个宽度或地址 [0..14] 但不是地址 [0..12](宽度 13)。但是为什么只工作地址[0..12] 而不能工作地址[0..14](完整地址)

DMux4Way(in=load, sel=address[13..14], a=RAM1, b=RAM2, c=scr, d=kbr);

0 投票
1 回答
414 浏览

hdl - 使用 .hdl 和硬件模拟器 (nand2tetris) 实现计算机处理器的组件

我无法将 .hdl 文件加载到 HardwareSimulator 中。到目前为止,我已经实现了 FullAdder.hdl 和 Add16.hdl。

我收到的错误消息是

这是 Add16 的相关代码:

我正在努力寻找错误,因为我很确定我在过去以完全相同的方式实现了这个芯片并且它工作正常。

至于全加器,它是相同的错误消息,但对于第 16 行。

我还将为此部分提供相关代码:

关于第 16 行的错误,我无法理解。那是在 FullAdder 中的终止括号之后。

我浏览了互联网,据我所知,我的实现是完全正确的。任何精通计算机处理器领域的人有什么建议吗?这对于遇到相同/类似问题的任何其他人肯定有用。

谢谢

编辑:根据这个链接逻辑门,我的实现看起来或多或少完全相同。会不会是我的 HardwareSim 有问题?尽管我对此表示怀疑,因为我过去曾使用过它,并且是我的大学向我推荐的。

0 投票
1 回答
490 浏览

java - Hack 汇编语言中的 Java 函数

如何在 Hack Assembly 中实现 Java 函数?我知道更改变量的指令很容易制作,但是 HACK 是如何调用函数的呢?例如:

我的(我认为错误的)结果是:

所以问题是我不知道在哪里存储结果(返回)..我应该像在这个例子中为函数创建一个变量并将它存储在那里吗?

0 投票
1 回答
477 浏览

nand2tetris - Nand2tetris.内置门芯片表现奇怪

我正在做 nand2tetris 的项目,我们可以通过基本的逻辑门使用他们网页提供的模拟器构建虚拟计算机。但是我遇到了一个问题,如下所示:

在此处输入图像描述

“NOT”和“AND”门的输出与图中红色圆圈中预期的相反。对于“NOT”门,如果它的输入是1,它的输出应该是0,但是是1。对于“AND”,如果它的输入都是1,它的输出应该是1,但是是0。在以前的项目中我'已经完成了,没有这样的错误。太奇怪了。两个都是自己造的芯片,但是输出异常,让我很困惑。如果我不解决它,我认为我无法完成 nands2tetris 的其余项目。有人帮我找到原因真是太好了。

0 投票
1 回答
633 浏览

verilog - 16 位 CPU 设计:实现获取执行周期的问题

我正在 Coursera 上学习名为 NandtoTetr​​is 的计算机体系结构课程,并且一直在为我的 16 位 CPU 设计而苦苦挣扎。该课程使用一种称为 HDL 的语言,这是一种非常简单的类似 Verilog 的语言。

我花了很多时间尝试根据下图迭代我的​​ CPU 设计,但我不明白我做错了什么。我尽力代表获取和执行机制。有人对如何解决这个问题有任何建议吗?

以下是设计和控制语法图链接:

CPU IO高层图: 在此处输入图像描述

门级CPU图: 在此处输入图像描述

控制指令语法: 在此处输入图像描述

下面是我的代码:

0 投票
2 回答
1473 浏览

assembly - 为什么我的代码在第 2 行总是出现比较失败,我该如何解决这个问题?

在 CPU 模拟器 Add4.asm 中的 hack 汇编语言中,测试在第 2 行一直失败。我尝试了各种形式来修复它,但无法弄清楚。如何将其设置为 0 或者如果这不是问题,我还能如何修复我的代码?ADD4 Hack 汇编语言帮助

每当我运行我的 .asm 文件时,我都会在第 2 行得到比较失败。请帮我解决这个问题。这是我的 .asm 代码,后面是 ADD4.tst。Add4.asm 的行号有清晰的注释。

Add4 将四个数字相加(在 RAM[0]、...、RAM[3] 或 R0、...、R3 中等效)并将结果存储在 RAM[0](又名 R0)中。您的程序必须在 30 个或更少的周期内完成

添加4.asm:

添加4.tst:

0 投票
1 回答
971 浏览

assembly - Mult.asm 比较失败

我需要回答的问题是,为什么第 9 行比较失败,而第 8 行没有比较失败?我是 Hack 汇编语言的新手,仍在学习基础知识,但对 CPU 模拟器为什么会通过第 8 行而不是第 9 行感到困惑。

第二个问题:

我怎样才能解决这个问题以支持负值的乘法?

程序将 R0 和 R1 相乘并将结果存储在 R2 中。(R0、R1、R2 分别指 RAM[0]、RAM[1] 和 RAM[2]。)

多重组合:

多.cmp:

0 投票
0 回答
118 浏览

assembly - 负数比较失败

我需要回答的问题是,为什么第 9 行比较失败,而第 8 行没有比较失败?

第二个问题:

我该如何解决这个问题以支持负值的乘法?

程序将 R0 和 R1 相乘并将结果存储在 R2 中。(R0、R1、R2 分别指 RAM[0]、RAM[1] 和 RAM[2]。)

多重组合:

多.cmp:

0 投票
1 回答
399 浏览

assembly - Nand2Tetris C 指令组合中的“a”是什么意思?

当我学习 Nand2Tetris 汇编程序部分时,我并没有真正了解“a”。它是如何工作的?

在单元中,它无论如何都不会使用它存在的原因。

在此处输入图像描述