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

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




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

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

程序全文
1401
1101
2001
1300
1101
2000
0010

为了计算 n就算术级数而言,有必要将第一个项加载到第0个单元格中 a0,在第一个像元加载中算术级数的差 d。
接下来,您需要总结:
1300的Acc加载来自单元格0 的数字
1101将Acc中的数字添加到第一个单元格中的数字
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