简易 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
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 简易 CPU 处理器 FPGA 设计 Verilog Quartus