名稱:8位CPU設(shè)計(jì)(代碼在文末付費(fèi)下載)
軟件:QuartusII
語言:Verilog
代碼功能:
設(shè)計(jì)一個(gè)簡(jiǎn)單的處理器,可以實(shí)現(xiàn)加減法以及簡(jiǎn)單的邏輯運(yùn)算。
設(shè)計(jì)包括程序計(jì)數(shù)器電路,指令存儲(chǔ)器電路,指令譯碼器電路(控制器),運(yùn)算電路,數(shù)據(jù)存儲(chǔ)器(寄存器)電路。
演示視頻:
FPGA代碼Verilog/VHDL代碼資源下載網(wǎng):www.hdlcode.com
部分代碼展示
`timescale?1ns?/?1ps ///////////////////////////////////////////////////////////////////////////////// //頂層模塊:設(shè)計(jì)包括程序計(jì)數(shù)器電路,指令存儲(chǔ)器電路,指令譯碼器電路(控制器),運(yùn)算電路,數(shù)據(jù)存儲(chǔ)器(寄存器)電路 //指令格式: //----------------------- //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];//操作數(shù)1地址 assign?Addr2?=?inst[?7:4];//操作數(shù)2地址 assign?Addr3?=?inst[?3:0];//目的寄存器地址 assign?Write_data?=?aluRes;?? assign?input1?=?Read_data1; assign?input2?=?Read_data2; assign?alu_Res=aluRes; //指令存儲(chǔ)器例化???? im?u_im( ????.Addr(PC), ????.inst(inst) );?? //指令譯碼器例化 ctr?u_ctr( ????.Opcode(Opcode), ????.aluOp(aluOp), ????.writereg(writereg) ); //數(shù)據(jù)存儲(chǔ)器例化 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) ); //程序計(jì)數(shù)器電路例化?? pc?u_pc( ????.clk(clk), ????.rst_n(rst_n), ????.current_pc(PC) );?? //運(yùn)算電路例化 alu?u_alu( ????.aluOp(aluOp), ????.input1(input1), ????.input2(input2),? ????.aluRes(aluRes), ????.Zero(Zero) ); ?? endmodule
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. Testbench
6. 仿真圖
頂層仿真圖
//微程序內(nèi)容如下:
//2101 ?# INC R1 ? 結(jié)果:R1 =1
//2101 ?# INC R1 ? 結(jié)果:R1 =2
//2101 ?# INC R1 ? 結(jié)果:R1 =3
//2202 ?# INC R2 ? 結(jié)果:R2 =1
//2202 ?# INC R2 ? 結(jié)果:R1 =2
//0123 ?# ADD R1,R2,R3 ? 結(jié)果:R3 =2 + 3 = 5
//1124 ?# SUB R1,R2,R4 ? 結(jié)果:R4 =3 -2 =1
//3303 ?# DEC R3 ?結(jié)果:R3 =5 -1 = 4
//5345 ?# OR R3,R4,R5 ? 結(jié)果:R5 =4 | 1 = 5
運(yùn)算器仿真
控制器仿真
指令存儲(chǔ)器仿真
程序計(jì)數(shù)器仿真
寄存器組仿真