【读书笔记】RISC存储程序机的电路设计(6)

简介: 【读书笔记】RISC存储程序机的电路设计(6)

前言

继续来~~~~~~~~~~~~~~~~~~~~~~

【读书笔记】RISC存储程序机的电路设计(1)

【读书笔记】RISC存储程序机的电路设计(2)

【读书笔记】RISC存储程序机的电路设计(3)

【读书笔记】RISC存储程序机的电路设计(4)

【读书笔记】RISC存储程序机的电路设计(5)

【读书笔记】RISC存储程序机的电路设计(6)

图放好~~~~~~~~~~~~~~~~~~~~~~

这一节已经完成了代码,因此我们来构造测试用例

测试指令

我在用例中写的简单的几条指令时这样的:

1.  initial begin
2.    wait(rst_n == 1'b1);
3.    U_RISC_SPM.U_PROCESSING.U_R0.data_out = 8'h3;
4.    U_RISC_SPM.U_PROCESSING.U_R1.data_out = 8'h4;
5.    U_RISC_SPM.U_PROCESSING.U_R2.data_out = 8'h5;
6.    U_RISC_SPM.U_PROCESSING.U_R3.data_out = 8'h6;
7.    U_RISC_SPM.U_MEM.mem[0] = {RD, SEL_R1, SEL_R1};
8.    U_RISC_SPM.U_MEM.mem[1] = 129;
9.    U_RISC_SPM.U_MEM.mem[2] = {RD, SEL_R2, SEL_R2};
10.     U_RISC_SPM.U_MEM.mem[3] = 130;
11.     U_RISC_SPM.U_MEM.mem[4] = {BR, SEL_R2, SEL_R2};
12.     U_RISC_SPM.U_MEM.mem[5] = 10;
13.     U_RISC_SPM.U_MEM.mem[129] = 100;
14.     U_RISC_SPM.U_MEM.mem[130] = 150;
15.     U_RISC_SPM.U_MEM.mem[10] = 28;
16.     U_RISC_SPM.U_MEM.mem[28]  = {SUB, SEL_R1, SEL_R2};
17.   end

复位时候先把R0/1/2/3给好初值,之后给mem内预置好指令:

mem[0] + mem[1]的指令是一条长指令,把mem[129]的值读出传递给dst = R1寄存器,这条指令执行完R1内的值应该是100;

mem[2] + mem[3]的指令是一条长指令,把mem[130]的值读出传递给dst = R2寄存器,这条指令执行完R2内的值应该是150;

mem[4] + mem[5]的指令同样是是一条长指令,跳转执行mem[10]为索引指向的地址内存储的指令,mem[10]内存储的是28,因此PC下一步应该跳转到28;

mem[28]内存储的是一条短指令,R2 = R2 - R1,执行之后R2内的值应该为50;

所有指令结束。

test完整代码

1. `timescale 1ns/1ps
2. module test();
3. 
4.  parameter NOP = 4'b0000;
5.  parameter ADD = 4'b0001;
6.  parameter SUB = 4'b0010;
7.  parameter AND = 4'b0011;
8.  parameter NOT = 4'b0100;
9.  parameter RD  = 4'b0101;
10.   parameter WR  = 4'b0110;
11.   parameter BR  = 4'b0111;
12.   parameter BRZ = 4'b0111;
13.   
14.   parameter SEL_R0 = 2'd0;
15.   parameter SEL_R1 = 2'd1;
16.   parameter SEL_R2 = 2'd2;
17.   parameter SEL_R3 = 2'd3;
18. 
19.   
20.   
21.   logic clk, rst_n;
22.   
23.   initial begin
24.       clk = 1'b0;
25.     forever #5ns clk = ~clk;
26.   end
27. 
28.   initial begin
29.     $timeformat(-9, 3," ns ", 5);
30.       rst_n = 1'bx;
31.     #18ns rst_n = 1'b0;
32.     #18ns rst_n = 1'b1;
33.   end
34.   
35.   initial begin
36.     foreach(U_RISC_SPM.U_MEM.mem[i])begin
37.       U_RISC_SPM.U_MEM.mem[i] = '0;
38.     end
39.   end
40. 
41.   initial begin
42.     wait(rst_n == 1'b1);
43.     U_RISC_SPM.U_PROCESSING.U_R0.data_out = 8'h3;
44.     U_RISC_SPM.U_PROCESSING.U_R1.data_out = 8'h4;
45.     U_RISC_SPM.U_PROCESSING.U_R2.data_out = 8'h5;
46.     U_RISC_SPM.U_PROCESSING.U_R3.data_out = 8'h6;
47.     U_RISC_SPM.U_MEM.mem[0] = {RD, SEL_R1, SEL_R1};
48.     U_RISC_SPM.U_MEM.mem[1] = 129;
49.     U_RISC_SPM.U_MEM.mem[2] = {RD, SEL_R2, SEL_R2};
50.     U_RISC_SPM.U_MEM.mem[3] = 130;
51.     U_RISC_SPM.U_MEM.mem[4] = {BR, SEL_R2, SEL_R2};
52.     U_RISC_SPM.U_MEM.mem[5] = 10;
53.     U_RISC_SPM.U_MEM.mem[129] = 100;
54.     U_RISC_SPM.U_MEM.mem[130] = 150;
55.     U_RISC_SPM.U_MEM.mem[10] = 28;
56.     U_RISC_SPM.U_MEM.mem[28]  = {SUB, SEL_R1, SEL_R2};
57.   end
58.   
59.   RISC_SPM U_RISC_SPM(clk, rst_n);
60.   
61. endmodule

测试结果

可以观察到R1和R2的跳转是符合我们的预期的!!!!


相关文章
|
缓存
【软考学习4】计算机构成——CPU 结构、Flynn 分类法、CISC和RISC
【软考学习4】计算机构成——CPU 结构、Flynn 分类法、CISC和RISC
200 0
|
存储
【读书笔记】RISC存储程序机的电路设计(1)
【读书笔记】RISC存储程序机的电路设计(1)
176 1
【读书笔记】RISC存储程序机的电路设计(1)
|
开发者
同济大学系统结构 实验一:MIPS指令系统和MIPS体系结构-4
同济大学系统结构 实验一:MIPS指令系统和MIPS体系结构-4
454 0
同济大学系统结构 实验一:MIPS指令系统和MIPS体系结构-4
|
存储 数据格式
同济大学系统结构 实验一:MIPS指令系统和MIPS体系结构-3
同济大学系统结构 实验一:MIPS指令系统和MIPS体系结构-3
1166 0
同济大学系统结构 实验一:MIPS指令系统和MIPS体系结构-3
|
异构计算
FPGA硬件工程师Verilog面试题(五)
FPGA硬件工程师Verilog面试题(五)
171 0
FPGA硬件工程师Verilog面试题(五)
|
异构计算
FPGA硬件工程师Verilog面试题(基础篇一)
FPGA硬件工程师Verilog面试题(基础篇一)
296 0
FPGA硬件工程师Verilog面试题(基础篇一)
|
芯片 异构计算
FPGA硬件工程师Verilog面试题(基础篇二)
FPGA硬件工程师Verilog面试题(基础篇二)
443 1
FPGA硬件工程师Verilog面试题(基础篇二)
|
存储
【读书笔记】RISC存储程序机的电路设计(3)
【读书笔记】RISC存储程序机的电路设计(3)
120 0
【读书笔记】RISC存储程序机的电路设计(3)
|
存储 索引
【读书笔记】RISC存储程序机的电路设计(4)
【读书笔记】RISC存储程序机的电路设计(4)
201 0
【读书笔记】RISC存储程序机的电路设计(4)
|
存储
【读书笔记】RISC存储程序机的电路设计(2)
【读书笔记】RISC存储程序机的电路设计(2)
186 0
【读书笔记】RISC存储程序机的电路设计(2)