第一部分第二部分第三部分第四部分第五部分有关
RAM机器的
文章已在Habré上发表。
通常,有关
RAM机器 的文章在Wikipedia上。
RAM机器在“计算算法的编译和分析”一书中提到:Aho,Hopcroft,Ulman-具有一组有限的算术指令(加,减,乘,除),一个无条件跳转命令,两个条件跳转命令。 在我们的例子中,算术团队只有
加法和
减法 ,分支(转换)命令将与本书中给出的命令相同。
RAM计算机上的
LIttle Man计算机 (我在本系列的前面部分中介绍过)之间的区别是提供间接寻址的机制(使用存储在内存中的数字作为地址的能力)。
为了将存储在存储器中的数字用作地址,将
MUX多路复用器连接到
数据存储器的地址输入
,该 MUX多路复用器在地址本身(来自
命令存储器 )和代表该地址并存储在
数据存储器中的数字之间进行选择 。

每次从
命令存储器中提取新命令时,我们都会将一个数字从存储器加载到寄存器中。 当您切换
MUX多路复用器时,它会转到地址寄存器中记录的地址。

我们还将以数字形式将命令地址加载到
Acc电池中,为此,我们将增加多路复用器地址输入的位深度,多路复用器选择要加载到电池
Ass中的数据 。 该地址加载到多路复用器的第4个输入上。

命令的处理将以两种方式执行。 为此,将两个D触发器连接到时钟,当时钟信号到达时,它们将相互切换。

第一个周期将地址加载到地址寄存器中,第二个周期将数字加载到累加器或
数据存储器中 。
将2个标志连接到电池:
1.标志
Acc = 0 。 如果
Ass的内容为零,则引发该标志。
2.标记
Acc> 0 。 如果
Ass的内容大于零,则标记升高。

结果就是这样的方案,可以
从此处下载。
需要连接到电池允许输入的线路,这样电路才不会出现故障。
我们关闭一些命令,并编写一个程序,将
数据存储器的零单元加载到零单元
中存储的地址。 在循环中,我们将零单元格的值增加一。 T.O. 我们将
用序列号填充
数据存储器 。
1401在
Acc中加载数字
11100将
Acc中的数字添加到零单元格中的数字
2000将结果保存到零单元格中
2080在零单元格引用的地址上从
Acc加载数字
0010跳到程序的开头

我们将编写一个总结程序
自然数。
我们将在第一个单元格中写入自然数,在第0个单元格中写入自然数。
首先,编写一个在第一个单元格中加载自然数的程序
1401在
Acc中加载数字
11101将
Acc中的数字添加到第一个单元格中的数字
2001将结果保存在第一个单元格中
在第0个单元格中,我们将执行求和。 在第一个单元格中增加数字后,您需要将此数字添加到第0个单元格中。
1300加载
Acc从单元格0开始
的数字
1101将
Acc中的数字添加到第一个单元格中的数字
2000将结果保存在第0个单元格中
0010跳到程序的开头
程序全文
1401110120011300110120000010为了计算
就算术级数而言,有必要将第一个项加载到第0个单元格中
,在第一个像元加载中算术级数的差
。
接下来,您需要总结:
1300的
Acc加载来自单元格0
的数字
1101将
Acc中的数字添加到第一个单元格中的数字
2000将结果保存在第0个单元格中
接下来,您需要向后跳3个团队并重复此操作
次。
可以
从此处下载经典RAM机器(带有单独的读/写磁带)的仿真器。
让我们检查一下由两个D触发器组成的电路如何工作。 该电路提供两个时钟模式。
让我们编写一个常规d触发器的方案(不带复位和启用)。 它将具有两个输入端口-数据端口和时钟端口。
module dff ( input [1:0] key, output led ); wire clk; assign clk = key [0]; // wire d = key [1]; // reg q; always @(posedge clk) q <= d; assign led = q; endmodule
LED指示灯显示d触发器的状态。
我们将两个
DFF连接到公共电路。
第一个D触发器的状态将由
q1_led LED指示。
第二个D触发器的状态将由
q2_led LED指示。
我们将时钟信号输出到单独的
q3_led LED。
module dff_dff ( input clk, output q1_led, q2_led,q3_led ); assign q3_led = clk; wire d1_in; assign d1_in=~q2_led; dff dff1( .clk(clk), .d(d1_in), .q(q1_led) ); wire d2; assign d2=q1_led; dff dff2( .clk(clk), .d(d2), .q(q2_led) ); endmodule
dff_dff模块的RTL模型如下所示

该电路并非在所有板上都适用;在某些板上,必须初始化d触发器。 由于相同的原因,不会在ModelSim中模拟这种方案。