【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块

这篇具有很好参考价值的文章主要介绍了【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载

示例:加法器

 【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

  • 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 
  • 配置方式:USB-JTAG/SPI Flash
  • 高达100MHz 的内部时钟速度 
  • 存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A)
  • 通用IO:Switch :x8LED:x16Button:x5DIP:x8   通用扩展IO:32pin
  • 音视频/显示: 7段数码管:x8 VGA视频输出接口 Audio音频接口 
  • 通信接口:UART:USB转UART   Bluetooth:蓝牙模块 
  • 模拟接口: DAC:8-bit分辨率   XADC:2路12bit 1Msps ADC

目录

Ⅰ.前置知识

 0x00 半加器

 0x01 全加器

Ⅱ. Verilog实现 

 0x00 注意事项

 0x01 一位全加器

 0x02 串行加法器


Ⅰ.前置知识

 0x00 半加器

能对两个1位二进制数进行相加求和及进位的逻辑电路称为半加器。或:只考虑两个一位二进制数的相加,而不考虑来自低位进位数运算电路,称为半加器。

下图为半加器的方框图:     

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

其中:In1、In2分别为被加数与加数,作为电路的输入端;S为两数相加产生的本位和,它和两数相加产生的向高位的进位C一起作为电路的输出。

根据二进制数相加的原则,得到半加器的真值表如下表:

信号输入

信号输出

In1 In2

S

C

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

 0x01 全加器

全加器其实就是考虑到进位的加法器。

全加器输入 

全加器输出 

A

B

Cin

BCDout

Cout

0

0

0

0

0

0

0

1

0

1

0

1

0

0

1

0

1

1

1

0

1

0

0

0

1

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

真值表:

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

逻辑表达式:

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

 由于两个半加器可以构成一个全加器,所以在这里进位Ci还可以表示为: 

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

Ⅱ. Verilog实现 

 0x00 注意事项

本次实验中,涉及到了子模块主模块的编写。

在主模块中(顶层文件),对子模块进行调用,从而满足设计

下面以加法器为示例,介绍子模块和主模块的编写和调用:

1、设计子模块

参考程序:

程序文件一: 

module FA1(input A,input B,input Cin,output reg Cout,output reg S);
always @(A or B or Cin)begin
 {Cout,S}=A+B+Cin;
end
endmodule

程序文件二:(选用,自定义)

module UserAND(a,b,z); 
input a,b; 
output z; 
assign z=a&b; 
endmodule 

以上程序也可自行进行设计修改;

2、设计主模块: (顶层文件)

module EX5_Top(input [1:0] IA,input [1:0] IB,output [1:0] sum,output C );
wire ct; 
//子模块的调用,例如其中FA1为子模块名称,FD0和FD1为在顶层文件中引用的名称。 
FA1 FD0 (.A(IA[0]),.B(IB[0]),.Cin(0),.Cout(ct),.S(sum[0])); 
FA1 FD1 (.A(IA[1]),.B(IB[1]),.Cin(ct),.Cout(C),.S(sum[1]));
Endmodule

3、编译文件并查看RTL视图(如图参考)

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

 0x01 一位全加器

 设计代码:

module  ADD_Top(input [1:0] IA,input [1:0] IB,output [1:0] sum,output C );
wire ct; 

ADD FD0 (.A(IA[0]),.B(IB[0]),.Cin(0),.Cout(ct),.S(sum[0])); 
ADD FD1 (.A(IA[1]),.B(IB[1]),.Cin(ct),.Cout(C),.S(sum[1]));

endmodule

module ADD(input A,input B,input Cin,output reg Cout,output reg S);
always @(A or B or Cin)begin
 {Cout,S}=A+B+Cin;
end
endmodule

仿真设计代码:

module sim_ADD_Top( );
reg [1:0] IA;
reg [1:0] IB;
wire [1:0] sum;
wire ct;
 ADD_Top uu1(IA,IB,sum,ct);
initial {IA,IB}=4'b0000;
always 
 #100{IA,IB}={IA,IB}+1;
 
endmodule

点击Vivado的“Run Simulation”菜单,进入仿真调试模式,可以在仿真输出窗口看到仿真时序波形

波形图:

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

 0x02 串行加法器

在理解了半加器与全加器的基础上,采用模块化的设计方法,我们可以通过四个全加器来实现四位串行加法器的设计

设计代码:

`timescale 1ns / 1ps
module M_4bit_adder(S,C3,A,B,C_1);
input [3:0]  A,B;
input C_1;
output [3:0] S;
output C3;
wire C0,C1,C2;
fulladder u0(S[0],C0,A[0],B[0],C_1);
fulladder u1(S[1],C1,A[1],B[1],C0);
fulladder u2(S[2],C2,A[2],B[2],C1);
fulladder u3(S[3],C3,A[3],B[3],C2);
endmodule


module halfadder(S,C,A,B);
input A,B;
output S,C;
xor(S,A,B);
and(C,A,B);
endmodule

module fulladder(S,C,A,B,Cin);
input A,B,Cin;
output S,C;
wire S1,D1,D2;
halfadder HA1(.S(S1),.C(D1),.A(A),.B(B));
halfadder HA2(.S(S),.C(D2),.A(S1),.B(Cin));
or g1(C,D2,D1);
endmodule

仿真设计代码:

module sim_ADD();
reg [3:0] A,B;
wire [3:0] S;
wire C3;

M_4bit_adder uu1(S,C3,A,B,0);
initial {A,B}=8'b0000_0000;
always
#100 {A,B}={A,B}+1;
endmodule

波形图:

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog

添加硬件约束并连接实验电路板,

参考管脚分配如下:

程序中管脚名 

实际管脚 

说明 

A(0

N4

拨动开关 SW1

A(1

M4

拨动开关 SW2

B(0

R2

拨动开关 SW3

B(1

P2

拨动开关 SW4

SUM(0) 

K2

LED 0

SUM(1) 

J2

LED 1

C

J3

LED 2

实验电路板实现:

【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块,FPGA玩板子,fpga开发,Verilog文章来源地址https://www.toymoban.com/news/detail-606782.html

到了这里,关于【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载的示例:表决器(三人表决器)。 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用

    2023年04月08日
    浏览(39)
  • FPGA-DE2-115-实验二-模块化多功能数字钟

    前言: 本文主要介绍了集成电路EDA这门课程的相关实验及代码。使用的软件是Quartus Ⅱ,该实验使用fpga芯片为cyclone IV EP4CE115F29C7。 本次实验我们需要实现生活中常见的电子手表的所有功能。 我们知道: 电子手表有五个功能,包括:时间显示功能,夜光模式功能,计时功能,闹钟功能

    2024年02月04日
    浏览(73)
  • 【FPGA】组合逻辑电路三种建模方式(Verilog HDL 门级建模、Verilog HDL 数据流建模、组合电路行为级建模)

    目录   Verilog HDL 门级建模 各种逻辑门的表示和使用 门级建模书写实例 Verilog HDL 数据流建模 数据流建模 数据流建模书写实例 组合电路行为级建模 always语句 条件语句 多路分支语句 循环语句 for while repeat forever 行为级建模示例   可以理解为对逻辑电路中各个门依次进行描述

    2024年04月13日
    浏览(49)
  • 什么是模块化?为什么要进行模块化开发?

    模块化是一种软件开发的设计模式,它将一个大型的软件系统划分成多个独立的模块,每个模块都有自己的功能和接口,并且能够与其他模块独立地工作。  先来一段八股文 模块化开发可以带来以下好处: 提高代码的复用性:模块化可以将代码划分成可重用的部分,降低代

    2023年04月12日
    浏览(59)
  • 基于Quartus Prime平台FPGA关于VGA显示的模块化设计:VGA八种单色屏1s切换显示、横条纹、竖条纹、棋盘格显示、显示模式按键可调、数码管显示单色屏序号

    VGA(Video Graphics Array)是一种显示接口标准,它最初由IBM于1987年推出。VGA协议定义了计算机视频输出信号的格式和特性。它主要用于连接计算机和显示器之间的传输,实现图像和视频的显示。 VGA协议支持最高分辨率为640x480像素,色彩深度为16位色(即65,536种颜色)。它使用模

    2024年02月03日
    浏览(51)
  • 23年,我又学习了一次amd模块化,模块化思想

    src/view1/index.html src/view1/main.js plugins/module.js 源码链接: https://gitee.com/littleboyck/front/tree/master/front-module 联系方式:QQ: 1187253007

    2024年02月07日
    浏览(57)
  • 【前端模块化】JS模块化思想以及相关规范(CommonJS、ES module)

    1.模块化概念 随着前端应用日趋复杂,项目代码也大量膨胀,模块化就是一种最主流的代码组织方式, 一个模块就是一个实现特定功能的文件 ,它通过把我们的复杂代码按照功能的不同,划分为不同的模块单独维护的这种方式,去提高我们的开发效率,降低维护成本。要用

    2024年02月01日
    浏览(62)
  • 【FPGA】Verilog:组合逻辑电路应用 | 数码管 | 8421BCD编码 | 转换七段数码管段码

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:数码管的使用 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Switch :

    2024年02月03日
    浏览(49)
  • OpenHarmony模块化编译

    OpenHarmony版本:OpenHarmony 4.0 Release 编译环境:WSL2 Ubuntu 18.04 平台设备:RK3568 OpenHarmony 代码构建有build.sh和hb两种方式: 下拉的4.0代码无法直接使用hb命令 可参考搭建开发环境-安装编译工具 进行hb安装和环境配置。 在源码目录执行\\\"hb help\\\",界面打印以下信息即表示安装成功。 注

    2024年02月03日
    浏览(42)
  • 模块化

    能够说出模块化的好处 能够知道CommonJS规定了哪些内容 能够说出Node.js中模块的三大分类各自是什么 能够使用npm管理包 能够了解什么是规范的包结构 能够了解模块的加载机制 模块化的基本概念 Node.js中模块的分类 npm与包 模块的加载机制 1.1什么是模块化 模块化 是指解决一个

    2024年02月06日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包