处理器CPU设计Verilog代码vivado仿真

名称:处理器CPU设计Verilog代码vivado仿真(文末获取)

软件:vivado

语言:Verilog

代码功能:

处理器CPU设计

设计一个简单的处理器,可以实现加减法以及简单的逻辑运算。

设计包括程序计数器电路,指令存储器电路,指令译码器电路(控制器),运算电路,数据存储器(寄存器)电路。

1. Cpu

工程文件

程序文件

程序编译

RTL图

Testbench

仿真图

指令格式:

-----------------------

opcode | rs | rt | rd |

-----------------------

15-12   11-8  7-4  3-0

支持8个指令:ADD,SUB,INC ,DEC,AND,OR,NOT,XOR

操作方式如下:

ADD R1,R2,R3  

 => R3 = R1 + R2;

SUB与ADD一致

INC:

INC R1,0,R1

=> R1 = R1 +1;

DEC,R1,0,R1

=> R1 = R1 -1;

测试指令如下:

2101  # INC R1   结果:R1 =1                                      

2101  # INC R1   结果:R1 =2                                      

2101  # INC R1   结果:R1 =3                                      

2202  # INC R2   结果:R2 =1                                      

2202  # INC R2   结果:R2 =2                                      

0123  # ADD R1,R2,R3   结果:R3 =3 + 2 = 5                        

1124  # SUB R1,R2,R4   结果:R4 =3 -2 =1                          

3303  # DEC R3         结果:R3 =5 -1 = 4                            

4123  # AND R1,R2,R3   结果:R3 =00000011 & 00000010 = 0010        

5123  # OR  R1,R2,R3   结果:R3 =00000011 | 00000010 = 0011        

6103  # NOT R1,,R3     结果:R3 =~00000011 = 11111100              

7123  # XOR R1,R2,R3   结果:R3 =00000011 ^ 00000010 = 00000001      

部分代码展示:

`timescale 1ns / 1ps
//CPU顶层模块:设计包括程序计数器电路,指令存储器电路,指令译码器电路,运算电路,数据存储器电路
module cpu(
    input wire clk,
    input wire rst_n,
 output [15:0] PC,
 output [15:0] inst,
 output [3:0] Addr1,
 output [3:0] Addr2,
 output [3:0] Addr3,
 output [15:0] Read_data1,
 output [15:0] Read_data2, 
 output [15:0] aluRes 
    );
//wire [15:0] inst;
//wire [15:0] PC;
wire [3:0] Opcode;
wire [2:0] aluOp;
wire [15:0] imm;
wire [15:0] Write_data;
wire [15:0] input1,input2;
wire writereg;
assign Opcode = inst[15:12];  //操作码为指令的高四位
assign Addr1 = inst[11:8];   
assign Addr2 = inst[ 7:4];   
assign Addr3 = inst[ 3:0];   
assign Write_data = aluRes;  
assign input1 = Read_data1;
assign input2 = Read_data2;
//指令存储器例化    
im u_im(
    .Addr(PC),
    .inst(inst)
);  
//指令译码器例化
ctr u_ctr(
    .Opcode(Opcode),
    .aluOp(aluOp),
    .writereg(writereg)
);
//数据存储器例化
rf u_rf(
    .clk(clk),
    .rst_n(rst_n),
    .Addr1(Addr1),
    .Addr2(Addr2),
    .Addr3(Addr3),
    .Write_data(Write_data),
    .writereg(writereg),
    .Read_data1(Read_data1),
    .Read_data2(Read_data2)
);
//程序计数器电路例化  
pc u_pc(
    .clk(clk),
    .rst_n(rst_n),
    .current_pc(PC)
);  
//运算电路例化
alu u_alu(
    .aluOp(aluOp),
    .input1(input1),
    .input2(input2), 
    .aluRes(aluRes),
    .Zero(Zero)
);
  
endmodule
源代码

 扫描文章末尾的公众号二维码

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值