• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

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

06/18 13:33
1282
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24010310564U30.doc

共1个文件

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

软件:vivado

语言:Verilog

代码功能:

处理器CPU设计

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

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

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

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

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=475

  • 2-24010310564U30.doc
    下载

相关推荐