名称:8位CPU设计(代码在文末付费下载)
软件:QuartusII
语言:Verilog
代码功能:
设计一个简单的处理器,可以实现加减法以及简单的逻辑运算。
设计包括程序计数器电路,指令存储器电路,指令译码器电路(控制器),运算电路,数据存储器(寄存器)电路。
演示视频:
FPGA代码Verilog/VHDL代码资源下载网:www.hdlcode.com
部分代码展示
`timescale?1ns?/?1ps ///////////////////////////////////////////////////////////////////////////////// //顶层模块:设计包括程序计数器电路,指令存储器电路,指令译码器电路(控制器),运算电路,数据存储器(寄存器)电路 //指令格式: //----------------------- //opcode?|?rs?|?rt?|?rd?| //----------------------- //15-12???11-8??7-4??3-0 // //操作方式如下: //ADD?R1,R2,R3?? //??=>?R3?=?R1?+?R2; //SUB与ADD一致 // //INC: //INC?R1,0,R1 //?=>?R1?=?R1?+1; // //DEC,R1,0,R1 //?=>?R1?=?R1?-1; module?cpu( ????input?wire?clk, ????input?wire?rst_n,? ?output?[15:0]?alu_Res? ????); wire?[15:0]?inst; wire?[15:0]?PC; wire?[3:0]?Opcode; wire?[3:0]?aluOp; wire?[15:0]?imm; wire?[3:0]?Addr1,Addr2,Addr3; wire?[15:0]?Write_data; wire?[15:0]?Read_data1,Read_data2; wire?[15:0]?aluRes; wire?[15:0]?input1,input2; wire?writereg; assign?Opcode?=?inst[15:12];??//操作码为指令的高四位 assign?Addr1?=?inst[11:8];//操作数1地址 assign?Addr2?=?inst[?7:4];//操作数2地址 assign?Addr3?=?inst[?3:0];//目的寄存器地址 assign?Write_data?=?aluRes;?? assign?input1?=?Read_data1; assign?input2?=?Read_data2; assign?alu_Res=aluRes; //指令存储器例化???? 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
设计文档:
1. 工程文件

2. 程序文件


3. 程序编译

4. RTL图

5. Testbench

6. 仿真图
顶层仿真图



//微程序内容如下:
//2101 ?# INC R1 ? 结果:R1 =1
//2101 ?# INC R1 ? 结果:R1 =2
//2101 ?# INC R1 ? 结果:R1 =3
//2202 ?# INC R2 ? 结果:R2 =1
//2202 ?# INC R2 ? 结果:R1 =2
//0123 ?# ADD R1,R2,R3 ? 结果:R3 =2 + 3 = 5
//1124 ?# SUB R1,R2,R4 ? 结果:R4 =3 -2 =1
//3303 ?# DEC R3 ?结果:R3 =5 -1 = 4
//5345 ?# OR R3,R4,R5 ? 结果:R5 =4 | 1 = 5
运算器仿真


控制器仿真

指令存储器仿真

程序计数器仿真

寄存器组仿真

2092