RAM机


第一部分
第二部分
第三部分
第四部分
第五部分


有关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. 我们将序列号填充数据存储器

1401Acc中加载数字1
1100Acc中的数字添加到零单元格中的数字
2000将结果保存到零单元格中
2080在零单元格引用的地址上从Acc加载数字
0010跳到程序的开头




我们将编写一个总结程序 n自然数。
我们将在第一个单元格中写入自然数,在第0个单元格中写入自然数。
首先,编写一个在第一个单元格中加载自然数的程序
1401Acc中加载数字1
1101Acc中的数字添加到第一个单元格中的数字
2001将结果保存在第一个单元格中

在第0个单元格中,我们将执行求和。 在第一个单元格中增加数字后,您需要将此数字添加到第0个单元格中。
1300加载Acc从单元格0开始数字
1101Acc中的数字添加到第一个单元格中的数字
2000将结果保存在第0个单元格中
0010跳到程序的开头

程序全文
1401
1101
2001
1300
1101
2000
0010

为了计算 n就算术级数而言,有必要将第一个项加载到第0个单元格中 a0,在第一个像元加载中算术级数的差 d
接下来,您需要总结:
1300Acc加载来自单元格0 数字
1101Acc中的数字添加到第一个单元格中的数字
2000将结果保存在第0个单元格中
接下来,您需要向后跳3个团队并重复此操作 n次。


可以从此处下载经典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中模拟这种方案。

Source: https://habr.com/ru/post/zh-CN432726/


All Articles