vivado设计4bit先行进位加法器 并使用 4bit CLA 组合设计一个 16bit 加法器

  • 前言
  • 配置环境和文件
  • 添加文件
  • 实验代码测试
    • 运行测试
  • 4bit先行进位加法器
    • 原理
    • 代码实现
    • 运行结果
  • 4bit CLA 组合设计 16bit 加法器
    • 代码
    • 运行结果

前言

此次实验使用软件为Vivado,相关实验说明文档参考链接:
github:https://github.com/BilboJunzhou/input-adder
CSDN:https://download.csdn.net/download/weixin_51717597/85559470
因为考虑到大多是第一次使用,所以整体写的较为繁琐,有基础可自行跳转至相关位置查看代码即可

配置环境和文件

1、打开vivado

选择“File”->“New Project”

选择next

输入工程名称和文件路径

在工程类型“Project Type”选择界面,选择“RTL Project”,勾选“Do not specify sources at this time”

在“Default Part”FPGA 器件选择界面,指定所用的 FPGA 器件或开发板。“Parts”指 FPGA 芯片,包含了 Vivado2019.2 所支持的芯片型号;“Boards ”指的是Vivado2019.2 所支持的开发板。这里选“Parts”,然后在筛选器的“Family”中选择“Artix- 7”,在“Package”中选择“fbg676”,在筛选得到的型号里面选择“xc7a200tfbg676-2”,点击“Next”,根据向导,单击“Finish”按钮即完成整个工程的创建

选择finish

创建完成!

添加文件

添加已有 Verilog 文件的方法如下:在“PROJECT MANAGER”下点击“Add Sources”,选择“Add or create design sources”。

可以添加已有文件,也可以自己创建文件

之后选择finish即可

实验代码测试

添加文件add.v和display.v文件,代码分别如下
add.v:

`timescale 1ns / 1ps
//*************************************************************************
// > 文件名:adder.v
// > 描述:加法器
// > 作者:早安不安
// > time:2022-06-04
//*************************************************************************
module adder(input [31:0] operand1,input [31:0] operand2,input cin,output [31:0] result,output cout);assign {cout,result} = operand1 + operand2 + cin;
endmodule

display.v

`timescale 1ns / 1ps //仿真单位时间为 1ns,精度为 1ps
module testbench;// Inputsreg [31:0] operand1;reg [31:0] operand2;reg cin;// Outputswire [31:0] result;wire cout;// Instantiate the Unit Under Test (UUT)adder uut (.operand1(operand1), .operand2(operand2), .cin(cin), .result(result), .cout(cout));initial begin// Initialize Inputsoperand1 = 0;operand2 = 0;cin = 0;// Wait 100 ns for global reset to finish#100;// Add stimulus hereendalways #10 operand1 = $random; //$random 为系统任务,产生一个随机的 32 位数always #10 operand2 = $random; //#10 表示等待10 个单位时间(10ns),即每过10ns,赋值一个随机的 32 位数always #10 cin = {$random} % 2; //加了拼接符,{$random}产生一个非负数,除 2 取余得到 0 或 1;进位
endmodule

运行测试

在左侧的导航栏中点击“Run Simulation”,选择“Run Behavioral Simulation”可进行仿真验证。

如果没有语法错误,弹出界面如图所示

4bit先行进位加法器

原理

参考博客:https://www.jianshu.com/p/6ce9cad8b467
串行加法器:

并行进位加法器

进位算法

本位数值

公式整理如下:
生成(Generate)信号:Gn=An⋅BnG_n=A_n \cdot B_nGn​=An​⋅Bn​
传播(Propagate)信号:Pn=An+BnP_n=A_n+B_nPn​=An​+Bn​
Cn+1=Gn+Pn⋅CnC_{n+1} = G_n+P_n\cdot C_nCn+1​=Gn​+Pn​⋅Cn​
Sn=An⨁Bn⨁CnS_n = A_n\bigoplus B_n \bigoplus C_{n}Sn​=An​⨁Bn​⨁Cn​

代码实现

其中注释很详细,大家参考注释来即可
其中add4.v文件是4bit超前进位加法器实现代码,display_test.v代码是测试代码
add4.v

`timescale 1ns / 1ps
//
// Company: HoHai University
// Engineer: 早安不安
// Create Date: 2022/06/05
// Design Name: 4bit先行进位加法器方法
// Module Name: add4
// Project Name: 4bit先行进位加法器
// Description: 超前进位加法器优化改进行波进位器的关键路径,通过采用并行计算进位的
//              方法,解决了行波进位加法器的进位依赖问题。
// Revision 0.01 - File Created
//module add4(// 定义成员变量input[3:0] A,   // 输入Ainput[3:0] B,   // 输入Binput C_in,     // 进位输入output[3:0]S,   // S输出output C_out    // 进位输出);wire[3:0] G ,P ,C ;  assign G = A & B; // 生成信号(Generate)assign P = A ^ B; // 传播信号(Propagate)// 进位信号assign C[0] = C_in; assign C[1] = G[0] | (P[0] & C[0]);assign C[2] = G[1] | (P[1] & (G[0] | (P[0] & C[0])));assign C[3] = G[2] | (P[2] & (G[1] | (P[1] & (G[0] | (P[0] & C[0])))));assign C_out = G[3] | (P[3] & (G[2] | (P[2] & (G[1] | (P[1] & (G[0] | (P[0] & C[0])))))));assign S = A ^ B ^ C;
endmodule

display_test.v

`timescale 1ns / 1ps //仿真单位时间为 1ns,精度为 1ps
module display_test;// Inputsreg [3:0] A;reg [3:0] B;reg cin;// Outputswire [3:0] S;wire cout;// Instantiate the Unit Under Test (UUT)add4 test (.A(A), .B(B), .C_in(cin), .S(S), .C_out(cout));initial begin// Initialize InputsA = 0;B = 0;cin = 0;// Wait 100 ns for global reset to finish#100;// Add stimulus hereendalways #10 A = $random; //$random 为系统任务,产生一个随机的 32 位数always #10 B = $random; //#10 表示等待10 个单位时间(10ns),即每过10ns,赋值一个随机的 32 位数always #10 cin = {$random} % 2; //加了拼接符,{$random}产生一个非负数,除 2 取余得到 0 或 1
endmodule

运行结果

4bit CLA 组合设计 16bit 加法器

其实基本原理和之前的4bit超前进位加法器相似,但这里方便起见,使用串行加法器方式,即将16位划分为4个4位,从最低4位,不断向上运算
文件结果上,16位加法器依赖之前的4位超前进位加法器,所以需要引用该文件,文件结构如下:

代码

其中add16.v文件是4bit CLA 组合设计 16bit 加法器代码,test2.v代码是测试代码,同时依赖之前设计好的4
bit超前进位加法器
add16.v

`timescale 1ns / 1ps
//
// Company: HoHai University
// Engineer: 早安不安
// Create Date: 2022/06/05
// Design Name: 4bit CLA 组合设计 16bit 加法器方法
// Module Name: add16
// Project Name: 4bit CLA 组合设计 16bit 加法器
// Description: 使用之前设计好的4bit超前进位加法器实现16 bit加法器
//              实现原理,通过串行加法器实现,相对简单
// Revision 0.01 - File Created
//module add16(input[15:0] A,input[15:0] B,input C_in,output[15:0] S,output C_out);wire[0:2] C;add4 part_1(.A(A[3:0]), .B(B[3:0]), .C_in(C_in),.S(S[3:0]),.C_out(C[0]));add4 part_2(.A(A[7:4]), .B(B[7:4]),.C_in(C[0]),.S(S[7:4]),.C_out(C[1]));add4 part_3(.A(A[11:8]), .B(B[11:8]),.C_in(C[1]),.S(S[11:8]),.C_out(C[2]));add4 part_4(.A(A[15:12]), .B(B[15:12]),.C_in(C[2]),.S(S[15:12]),.C_out(C_out));
endmodule

test2.v

`timescale 1ns / 1ps //仿真单位时间为 1ns,精度为 1ps
module test2;// Inputsreg [15:0] A;reg [15:0] B;reg cin;// Outputswire [15:0] S;wire cout;// Instantiate the Unit Under Test (UUT)add16 test (.A(A), .B(B), .C_in(cin), .S(S), .C_out(cout));initial begin// Initialize InputsA = 0;B = 0;cin = 0;// Wait 100 ns for global reset to finish#100;// Add stimulus hereendalways #10 A = $random; //$random 为系统任务,产生一个随机的 32 位数always #10 B = $random; //#10 表示等待10 个单位时间(10ns),即每过10ns,赋值一个随机的 32 位数always #10 cin = {$random} % 2; //加了拼接符,{$random}产生一个非负数,除 2 取余得到 0 或 1
endmodule

运行结果

vivado设计4bit先行进位加法器 并使用 4bit CLA 组合设计一个 16bit 加法器相关推荐

  1. 用Tcl定制Vivado设计实现流程

    http://xilinx.eetop.cn/viewnews-2359 介绍了Tcl的基本语法以及如何利用Tcl在Vivado中定位目标.其实Tcl在Vivado中还有很多延展应用,接下来我们就来讨 ...

  2. Vivado设计DDR3接口生成bit报错解决

    1.1 Vivado设计DDR3接口生成bit报错解决 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado设计DDR3接口生成bit报错解决: 5)结束语. 1 ...

  3. vivado 如何创建工程模式_用Tcl定制Vivado设计实现流程

    原标题:[Vivado使用误区与进阶]用Tcl定制Vivado设计实现流程 上一篇<Tcl在Vivado中的应用>介绍了Tcl的基本语法以及如何利用Tcl在Vivado中定位目标.其实Tc ...

  4. FPGA Vivado设计流程

    今天给大侠带来Vivado设计流程,话不多说,上货. 本篇通过创建一个简单的HDL工程,学会使用Vivado集成开发环境.学会如何使用Vivado进行设计.仿真.综合以及实现一个项目,生成比特流文件并 ...

  5. 四位行波进位加法器_【HDL系列】超前进位加法器原理与设计

    上期介绍了半加器.全加器以及行波进位加法器(RCA),本文介绍超前进位加法器(Lookahead Carry Adder,简称LCA).在介绍超前进位加法器前,我们先来分析下行波进位加法器的关键路径. ...

  6. 四位行波进位加法器_【HDL系列】进位选择加法器原理与设计

    前期已介绍了行波进位加法器(Ripple Carry Adder, RCA)依赖于低位进位,所以具有超长的进位链和关键路径.对于RCA的改进中,进位选择加法器(Carry Select Adder)是 ...

  7. 四位行波进位加法器_【HDL系列】进位旁边加法器原理与设计

    一.进位旁边加法器 进位旁路加法器(Carry Skip Adder,CSA),也称Carry Bypass Adder.需要注意的是,CSA也是另外一种加法器--进位保存加法器(Carry Save ...

  8. 【Vivado那些事儿】Vivado 设计套件版本的支持性第三方工具

    Vivado 设计套件版本的支持性第三方工具 本文列出了能够与 Vivado 设计套件联用的支持性第三方仿真器. 这些也在随该软件一起发布的"Vivado 设计套件用户指南:版本说明.安装与 ...

  9. Vivado设计锁定与增量编译

    本文针对Vivado中实现的逻辑锁定和增量编译进行的工程实例介绍,文中有对应工程的下载地址.友情提示:(1)增量编译只允许修改当前工程不超过5%的时候才有效,一般应用于较大工程添加修改chipscop ...

最新文章

  1. 绩效管理误区和乱象,你的企业存在吗?
  2. AppCode下的cs类 取得相关路径
  3. bsgs(Baby Steps Giant Steps)算法
  4. LINUX系统中动态链接库的创建和使用
  5. CSS基础——浮动(float)【学习笔记】
  6. 计算机主机有gpib接口吗,PC104模块与通用并行接口(GPIB)通讯的实现
  7. 用计算机算加班,加班工资计算器
  8. 计算机组装维修设置还原点,电脑组装、维护与故障排除
  9. PM3环境搭建和M1卡复制
  10. 自动回复html模板邮件,outlook休假自动回复
  11. dvi线支持多少分辨率_DVI接口最大支持的分辨率是多少?VGA呢?
  12. Javascript 8421
  13. 量子研究再获突破能否成功解决核潜艇通信难题?
  14. 第一章 R语言编程基础(超详细)
  15. 英特尔凌动处理器_AEWIN SCB6913 基于Intel Atom(Elkhart Lake)x6425E处理器
  16. 大话商学院(3)--有一种网络效应叫赢者通吃
  17. java exls_java excel类
  18. 网站服务器如何防护攻击?网站服务器被挂马如何检测
  19. 办公计算机应用常用软件,办公自动化及常用工具软件
  20. HI-LINK KT210 Al人脸识别串口通信协议

热门文章

  1. 向勒索病毒说不,是时候重塑数据保护策略
  2. 大学物理实验试卷1到8_一大学物理实验考试卷
  3. Xbox One 升级后黑屏修复
  4. VR工厂:助力工厂数字化升级
  5. 借助机器学习,他们发现了阴谋论是如何传播的
  6. 2020年黄山旅游路线
  7. 计算机打开好多页面,如何设置打开电脑浏览器时同时打开多个网页
  8. 一种日志采集装置及方法
  9. 教你在文件夹名称插入文字重命名
  10. python添加趋势线