16位二进制加法器 Verilog Quartus

发布时间:2026/7/24 14:01:04

16位二进制加法器 Verilog Quartus 名称16位二进制加法器 Verilog Quartus软件Quartus语言Verilog功能介绍该工程实现一个16位二进制加法器支持两个16位输入数据adder_A和adder_B以及1位输入进位CIN。运算结果通过16位输出S给出同时由COUT输出最高位进位能够覆盖带进位输入的常规无符号多位加法场景。 设计没有直接以单一表达式完成全部运算而是由4个4位加法器级联构成。每一级负责连续的4位数据计算并将本级产生的进位传递至下一级因此可以直观观察从低位到高位的进位传播过程。顶层模块接口简洁既可作为组合逻辑设计练习也可作为更大算术运算单元中的基础模块。 工程包含Quartus工程配置、Verilog源文件以及ModelSim RTL仿真相关文件。对于需要理解层次化组合逻辑、子模块例化和位选切片连接的学习者本设计具有直接的参考价值。运行环境开发语言Verilog。 工程适用于Quartus工程文件包含adder_16.qpf与adder_16.qsf可用于查看、编译和管理设计。仿真部分提供ModelSim RTL工作库、仿真执行脚本和波形配置文件可作为RTL功能仿真的工程参考。设计思路本设计采用层次化的串行进位结构实现16位二进制加法。顶层将16位操作数按位段划分为4组每组交由一个4位加法器完成局部加法低位加法器产生的进位依次传递到更高位加法器最终得到16位和S及最高位进位COUT。 这种实现方式把16位运算拆分为可复用的4位基本单元信号路径和模块职责清晰。输入端adder_A、adder_B分别提供两个16位操作数CIN作为初始进位参与最低4位计算CIN_1、CIN_2、CIN_3用于连接四级4位加法器S_signal汇总各段和结果后输出到S。该工程适合学习多位加法器的模块化设计、端口连接方式以及进位级联关系。模块结构顶层模块为adder_16端口包括16位输入adder_A、adder_B输入进位CIN16位和输出S以及输出进位COUT。 内部模块adder_4bit被例化4次i1_adder_4bit处理adder_A[3:0]与adder_B[3:0]i2_adder_4bit处理[7:4]位i3_adder_4bit处理[11:8]位i4_adder_4bit处理[15:12]位。CIN、CIN_1、CIN_2、CIN_3依次构成级联进位链各级结果分别写入S_signal对应的4位区间最后统一输出S和COUT。仿真图/仿真说明/设计文档图片工程提供adder_16_vlg_tst测试平台及ModelSim RTL仿真配置包括仿真执行脚本、wave.do波形配置和仿真工作库文件。可在ModelSim环境中加载顶层设计与测试平台观察两个16位输入、输入进位、16位和及输出进位之间的时序变化并核对四级4位加法器的进位级联关系。部分代码以下展示顶层模块adder_16的部分代码完整代码可关注下方公众号卡片获取。module adder_16(adder_A, adder_B, CIN, COUT, S); input [15:0] adder_A;//输入A input [15:0] adder_B;//输入B input CIN;//输入进位 output COUT;//输出进位 output [15:0] S;//输出和 //定义中间进位 wire CIN_1; wire CIN_2; wire CIN_3; wire COUT_signal; wire [15:0] S_signal; assign COUT COUT_signal;//输出进位 assign S S_signal;//输出和 //调用4位加法器 adder_4bit i1_adder_4bit ( .A(adder_A[3:0]), .B(adder_B[3:0]), .CIN(CIN), .COUT(CIN_1), .S(S_signal[3:0]) ); //调用4位加法器 adder_4bit i2_adder_4bit ( .A(adder_A[7:4]), .B(adder_B[7:4]), .CIN(CIN_1), .COUT(CIN_2), .S(S_signal[7:4]) ); //调用4位加法器 adder_4bit i3_adder_4bit ( .A(adder_A[11:8]), .B(adder_B[11:8]), .CIN(CIN_2), .COUT(CIN_3), .S(S_signal[11:8]) ); //调用4位加法器 adder_4bit i4_adder_4bit ( .A(adder_A[15:12]), .B(adder_B[15:12]), .CIN(CIN_3), .COUT(COUT_signal), .S(S_signal[15:12]) ); endmodule代码获取下方公众号“FPGA代码设计学习资料”

相关新闻