• 方案介绍
  • 相关推荐
申请入驻 产业图谱

16位二进制加法器 Verilog Quartus

07/23 10:03
60
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称: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,输入进位CIN,16位和输出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

相关推荐