简易 CPU 处理器 FPGA 设计 Verilog Quartus

名称:简易 CPU 处理器 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

功能介绍

本设计实现了一个教学型简易 CPU 处理器系统,顶层模块为 top,使用 Verilog HDL 编写,适合用于学习 CPU 基本数据通路、控制信号时序、寄存器传输以及简单指令执行流程。工程围绕 PC、MAR、RAM、DR、IR、ACC、ALU、控制器和节拍发生模块构建,能够展示取指、译码、数据暂存、运算和结果回写等基础处理器工作过程。 系统通过 CLK 和 CLR 输入完成时钟驱动与清零控制,顶层输出包含地址总线 ABUS、节拍信号 T、累加器输出 ACC_OUT、数据总线 OUTDBUS、内部总线 iindbus,以及多路控制信号,如 IMAR、IIR、IA、IDR、IPC、ISUM、ISUB、IAND、IOR、ISHL、ISHR、ESUM、EA、EDR 等。通过这些输出信号,可以观察 CPU 内部各模块在不同时序下的使能关系和数据流变化。 ALU 部分支持加、减、与、或、左移、右移等运算控制,IR 模块负责根据指令产生 LD、ADD、SUB、AND、OR、SHL、SHR、HALT 等指令标志,CTRL 模块则根据指令和节拍产生各部件装载、输出和运算控制信号。整体结构清晰,适合作为组成原理课程设计、Verilog CPU 实验或 Quartus FPGA 课程项目参考。

运行环境

开发语言:Verilog 开发软件:Quartus 顶层模块:top 主要工程文件包含 top.qpf、top.qsf 以及 Verilog 源码文件,工程输出中包含综合、适配、时序分析和配置文件结果,便于在 Quartus 环境中继续查看、编译和分析。

设计思路

设计采用典型的简易 CPU 数据通路思路,将处理器划分为时钟节拍、程序计数、地址寄存、存储器、数据寄存、指令寄存、累加器、运算器和控制器等功能单元。顶层 top 模块负责把各个功能模块连接成完整的数据流和控制流,外部输入时钟先经过 CLK_SIGNAL_SOURCE 产生较慢的工作时钟,再由 Metronome 产生节拍信号 T,用于配合控制器分阶段执行指令。 取指阶段中,PC 输出当前指令地址,MAR 在控制信号作用下锁存地址并驱动 RAM 地址端,RAM 输出的指令或数据进入数据寄存器相关通路。IR 通过内部总线接收指令内容,并译码产生 LD、ADD、SUB、AND、OR、SHL、SHR、HALT 等指令类型信号,为控制器后续生成微操作控制信号提供依据。 执行阶段中,CTRL 根据节拍 T 和指令类型产生 IMAR、IIR、IA、IDR、IPC、ISUM、ISUB、IAND、IOR、ISHL、ISHR、EA、EDR、ESUM 等控制信号,决定 PC 是否计数、寄存器是否装载、ALU 执行哪一种运算、累加器是否输出或写入。ALU 与 ACC、DR、内部总线配合,实现算术逻辑运算以及数据在 CPU 内部的传递。 这种模块化结构便于单独调试每个 CPU 子模块,也方便在课程实验中逐步观察处理器工作流程。多个模块配有独立 testbench,可用于验证 PC、MAR、DR、IR、RAM、ALU、ACC、CTRL、Metronome 和内部总线等单元的局部行为。

模块结构

主要模块包括: 1. top:CPU 顶层模块,连接时钟源、节拍器、PC、MAR、RAM、DR、IR、ACC、ALU、控制器和内部总线。 2. CLK_SIGNAL_SOURCE:时钟信号源模块,用于生成 CPU 工作时钟。 3. Metronome:节拍发生模块,输出 T 节拍信号。 4. PC:程序计数器模块,提供指令地址计数。 5. MAR:存储器地址寄存器,锁存地址并输出到地址总线。 6. RAM:存储器模块,根据地址输出指令或数据。 7. DR:数据寄存器,用于暂存 RAM 输出数据。 8. IR:指令寄存器及指令译码模块,产生 LD、ADD、SUB、AND、OR、SHL、SHR、HALT 等指令信号。 9. ACC:累加器模块,用于保存运算输入或结果。 10. ALU:算术逻辑运算模块,完成加、减、与、或、移位等运算。 11. CTRL:控制器模块,根据节拍和指令产生各类微操作控制信号。 12. indbus:内部总线相关模块,用于 CPU 内部数据传输。 13. LS283、Subtracter、fullsub、DFF74:辅助运算与触发器模块。 测试文件包括 ALU_tb、ACC_tb、CTRL_tb、DR_tb、IR_tb、MAR_tb、PC_tb、RAM_tb、Metronome_tb、indbus_tb、CLK_SIGNAL_SOURCE_tb 等。

演示视频

提供 CPU8 演示视频,可用于配合工程理解 CPU 运行与信号变化过程。

仿真图/仿真说明/设计文档图片

工程包含多个 Verilog 测试激励文件,可分别对 ALU、ACC、CTRL、DR、IR、MAR、PC、RAM、节拍器、内部总线和时钟源等模块进行局部仿真验证。Quartus 输出文件中包含 flow、map、fit、sta、asm 等报告,可用于查看综合、适配、资源使用和时序分析结果。

部分代码

以下展示顶层模块 top 的部分代码,完整源码请下载压缩包查看。

module top(CLK, CLR, CLK_out, T, ABUS,  
 IMAR, IIR, IA, IDR, IPC, ISUM, ISUB, IAND, IOR, ISHL, ISHR, ACC_OUT, OUTDBUS, iindbus,
 ESUM, EA, EDR);//, LD, ADD, SUB, ANDD, ORR, SHL, SHR, HALT);
// O_A, O_B, O_C, O_D, O_E, O_F, O_G, O_H, DIG1, DIG2, DIG3, DIG4);
//ACC_OUT, OUTDBUS, iindbus,
   input         CLK;
   input         CLR;
   output        CLK_out;
   output        [7:0] T;
	
   output        IPC;
	output        IMAR;
	output        IDR;
	output        EDR;
	output        IA;
	output        EA; 
	output        IIR;
   output        ISUM;   
   output        ISUB;   
   output        IAND;   
   output        IOR;   
   output        ISHL;
   output        ISHR;   
	output        ESUM;
   output wire [3:0]  ABUS;

//   wire [15:0] ACC_OUT;
//   wire [15:0] OUTDBUS;
//   wire [15:0] iindbus;
   output wire [15:0] ACC_OUT;
   output wire [15:0] OUTDBUS;
   output wire [15:0] iindbus;
	
   wire        LD;   wire        ADD;
   wire        SUB;   wire        ANDD;
   wire        ORR;   wire        SHL;
   wire        SHR;   wire        HALT;   
   
   
   wire          CLK_1s;
   wire          SEL0;
   wire [3:0]    addr_in;
   wire [3:0]    addr_out;
   wire [15:0]   DRdata_in;
   wire [15:0]   DRdata_out;
   wire [15:0]   indbus_out;
   wire [15:0]   Adata_out;
   wire [15:0]   ALUdata_out;
   
   
   wire [7:0] TT;
	wire [7:0] tt;
	
   assign TT = T;
	assign T = tt;
   
   


   
   wire          IMAR_temp;  wire          IIR_temp;
   wire          IA_temp;    wire          IDR_temp;
   wire          IPC_temp;   wire          ISUM_temp;
   wire          ISUB_temp;  wire          IAND_temp;
   wire          IOR_temp;   wire          ISHL_temp;   
   wire          ISHR_temp;  wire          ESUM_temp;
   wire          EA_temp;    wire          EDR_temp;
   wire          LD_temp;    wire          ADD_temp;
   wire          SUB_temp;   wire          ANDD_temp;
   wire          ORR_temp;   wire          SHL_temp;
   wire          SHR_temp;   wire          HALT_temp;
   
   assign CLK_out = CLK_1s;
   assign ABUS = addr_out;
   

   assign ACC_OUT = Adata_out;
   assign OUTDBUS = DRdata_in;
   assign iindbus = indbus_out;
   
   
   assign IMAR = IMAR_temp;
   assign IIR = IIR_temp;
   assign IA = IA_temp;
   assign IDR = IDR_temp;
   assign IPC = IPC_temp;
   assign ISUM = ISUM_temp;
   assign ISUB = ISUB_temp;
   assign IAND = IAND_temp;
   assign IOR = IOR_temp;
   assign ISHL = ISHL_temp;
   assign ISHR = ISHR_temp;
   assign ESUM = ESUM_temp;
   assign EA = EA_temp;
   assign EDR = EDR_temp;
   assign LD = LD_temp;
   assign ADD = ADD_temp;
   assign SUB = SUB_temp;
   assign ANDD = ANDD_temp;
   assign ORR = ORR_temp;
   assign SHL = SHL_temp;
   assign SHR = SHR_temp;
   assign HALT = HALT_temp;
   
   
   CLK_SIGNAL_SOURCE u0(CLK, CLK_1s);
   
   Metronome u1(.CLR(CLR), .CLK(CLK_1s), .T(TT));
   
   PC u2(.D(4'b0000), .IPC(IPC_temp), .CLK(CLK_1s), .CLR(CLR), .PCOUNT(addr_in));
   
   MAR u3(.ADDR_IN(addr_in), .IMAR(IMAR_temp), .CLK(CLK_1s), .ADDR_OUT(addr_out));
   
   RAM u4(.WR(1'b0), .ADDR(addr_out), .Qout(DRdata_in));
   
   DR u5(.DATA_in(DRdata_in), .IDR(IDR_temp), .EDR(EDR_temp), .CLK(CLK_1s), .DATA_out(DRdata_out));
   
   IR u6(.DATA_in(indbus_out), .IIR(IIR_temp), .CLK(CLK_1s), .LD(LD_temp), .ADD(ADD_temp), .SUB(SUB_temp), .IAND(ANDD_temp), .IOR(ORR_temp), .SHL(SHL_temp), .SHR(SHR_temp), .HALT(HALT_temp));
   
   ACC u7(.DATA_in(indbus_out), .IA(IA_temp), .EA(EA_temp), .CLK(CLK_1s), .DATA_out(Adata_out));
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 简易 CPU 处理器 FPGA 设计 Verilog Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员