0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

请用Verilog分别实现1位半加器和1位全加器

冬至子 来源:FPGA探索者 作者:FPGA探索者 2023-06-26 16:32 次阅读

1.原理

半加器

图片

图片

全加器

当多位数相加时,半加器可用于最低位求和,并给出进位数。第二位的相加有两个待加数和,还有一个来自前面低位送来的进位数。这三个数相加,得出本位和数(全加和数)和进位数。这种就是“全加"真值表:

图片

图片

2.编程思路

(1)根据真值表编写

按照半加器和全加器的真值表写出输出端的逻辑表达式,对半加器,输出的进位端是量输入的“与”,输出的计算结果是量输入的异或;对全加器,也按照逻辑表达式做。

//半加器模块
module adder_half(  
inputa,
inputb,
output regsum,
output regcout
);

//这里的always @(*)搭配里面的“=”阻塞赋值符号
//实现的效果和 assign sum = a ^ b; assign cout = a & b;是一样的
always @(*)
begin
sum = a ^ b;
cout = a & b;
end
endmodule

全加器:

module all_adder(cout,sum,a,b,cin);

input a,b,cin;
output sum,cout;

wire sum,cout;

assign sum=a^b^cin;
assign cout=(a&b)|(a&cin)|(b&cin);
endmodule

3.问题汇总

(1)`timescale 1 ns/1 ps

timescale是verilog中的一种时间尺度预编译指令,用来定义仿真时的时间单位和时间精度,左边是时间单位,右边是时间精度,时间单位是用于编写激励文件,时间精度是显示时的刻度,比如#100也就是100ns。时间精度不能大于时间单位,比如timescale 1 ns/1 ps是正确的,而timescale 1 ps/1 ns是错误的。

(2)#({$random}%100)

首先,#代表延时,这个语句表示延时随机的一个时间,结合`timescale 1 ns/1 ns是延时随机的ns。

$random 是 verilog 中产生随机数的系统函数,在调用时返回一个 32 位的随机数,是带符号的整形数。有几种用法:

random 和random()意义一样,都是产生随机数;

$random%100 在-99 到 99 之间产生随机数;

{$random}%100 采用位拼接符,在 0 到 100 之间产生随机数;

如 seed =10, $random(seed) 根据 seed 值产生随机数,而后 seed 值也会更新。

(3)add t0(.cin(cin), .a(a), .b(b), .sum(sum), .count(count));

例化的格式,先建立一个叫add的模块(module),有5个引脚,分别是cin/a/b/sum/count,例化的模块叫做t0,比较简单的例化方式就是如上所示的,括号外的引脚与括号内的引脚名称完全一致,无需区分。

实际上,括号外的引脚名称代表的是模块定义时的引脚,括号内的引脚是目前实际使用的引脚名称,如可以将@大神袁的测试文件改为:

`timescale 1 ns/1 ns

module top_tb();

reg a1;

reg b1;

wire sum1;

wire count1;

initial

begin

a1 = 0;

b1 = 0;

forever

begin

#({$random}%100)

a1 = ~a1;

#({$random}%100)

b1 = ~b1;

end

end

top t0(.a(a1), .b(b1), .sum(sum1), .count(count1));

endmodule

(4)对于延时,可以采用直接赋值的延时,如#5,使用随机延时目前暂时不常用。

当仿真到想结束时,可以在initial块的最后加$finish(此处可参考@大神李),即调用系统函数结束仿真,否则,仿真在ModelSim中会一直进行下去,不方便观察(在Vivado中设置的第一次仿真结束时间停止,默认1ns)。

此外,这里建议使用stop来代替finish,即停止仿真,在ModelSim中是暂停了仿真,而$finishi则可能会退出,看不到仿真波形。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 全加器
    +关注

    关注

    10

    文章

    62

    浏览量

    28576
  • 半加器
    +关注

    关注

    1

    文章

    29

    浏览量

    8829
  • Vivado
    +关注

    关注

    19

    文章

    815

    浏览量

    66960
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8311
收藏 人收藏

    评论

    相关推荐

    请问Quartus2中的用一全加器实现全加器

    全加器是我自己封装的,在四全加器中调用,在编译过程总是出错
    发表于 03-06 15:48

    FPGA入门——1全加器设计 精选资料分享

    FPGA入门——1全加器设计一、原理图输入1.1 创建工程1.2 原理图输入1.3 将设计项目设置成可调用的元件1.4
    发表于 07-26 07:01

    怎样去设计一种基于FPGA的1全加器

    怎样去设计一种基于FPGA的1全加器?如何对基于FPGA的1全加器进行仿真?
    发表于 09-17 07:38

    基于Quartus II软件完成一个1全加器的设计

    FPGA 设计入门(嵌入式系统应用开发)一、实验要求二、实验步骤1. 新建工程2. 原理图设计3. 将设计项目设置成可调用的元件4. 仿真5. 设计
    发表于 12-17 06:19

    什么是8全加器和8为带超前进位的全加器

    Verilog数字系统设计四复杂组合逻辑实验2文章目录Verilog数字系统设计四前言一、什么是8全加器和8为带超前进位的全加器?二、编程
    发表于 02-09 07:49

    全加器是算术运算电路中的基本单元,它们
    发表于 04-07 10:34 1.6w次阅读
    <b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>

    什么是一全加器,其原理是什么?

    什么是一全加器,其原理是什么  是能够计算低位进位的二进制加法电路 一全加器由2个
    发表于 03-08 17:13 7.6w次阅读

    加法器仿真波形图设计解析

    8全加器可由2个4全加器串联组成,因此,先由一个
    发表于 11-24 10:01 3.2w次阅读
    八<b class='flag-5'>位</b>加法器仿真波形图设计解析

    全加器是什么?全加器的区别?

    是能够计算低位进位的二进制加法电路。与相比,全加器不只考虑本位计算结果是否有进位,也考
    发表于 07-25 11:15 7.4w次阅读
    <b class='flag-5'>全加器</b>是什么?<b class='flag-5'>全加器</b>和<b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>的区别?

    全加器的原理及区别(结构和功能)

    +加法和全加法是算术运算电路中的基本单元,它们是完成1二进制相加的一种组合逻辑电路。
    的头像 发表于 07-25 11:37 33.8w次阅读
    <b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>和<b class='flag-5'>全加器</b>的原理及区别(结构和功能)

    全加器真值表和真值表详细分析

    全加器是组合电路中的基本元器件,也是CPU中处理加法运算的核心,理解、掌握并熟练应用是硬件课程的最基本要求。
    的头像 发表于 07-25 14:39 14w次阅读
    <b class='flag-5'>全加器</b>真值表和<b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>真值表详细分析

    Verilog数字系统设计——复杂组合逻辑实验2(8全加器和8为带超前进位的全加器

    Verilog数字系统设计四复杂组合逻辑实验2文章目录Verilog数字系统设计四前言一、什么是8全加器和8为带超前进位的全加器?二、编程
    发表于 12-05 19:06 4次下载
    <b class='flag-5'>Verilog</b>数字系统设计——复杂组合逻辑实验2(8<b class='flag-5'>位</b><b class='flag-5'>全加器</b>和8为带超前进位的<b class='flag-5'>全加器</b>)

    基于FPGA的设计

    加法器用于两个数或者多个数的和,加法器又分为(half adder)和全加器(full adder)。
    的头像 发表于 05-12 14:50 1150次阅读
    基于FPGA的<b class='flag-5'>半</b><b class='flag-5'>加</b><b class='flag-5'>器</b>设计

    全加器的功能特点

    全加器是数字电路中的基本组件,用于执行二进制数的加法运算。它们在计算机、微处理和其他数字系统中扮演着重要角色。
    的头像 发表于 10-18 11:10 1941次阅读

    全加器的区别是什么

    (Half Adder)和全加器(Full Adder)是数字电路中的基本组件,用于执行二进制加法运算。它们的主要区别在于功能和输入输出的数量。
    的头像 发表于 10-18 11:12 4687次阅读