Verilog 半减器和全减器

这篇具有很好参考价值的文章主要介绍了Verilog 半减器和全减器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列目录

Verilog 半加器和全加器

Verilog 半减器和全减器

串行加法器

11位全加器verilog设计


目录

系列目录

文章目录

前言

一、什么是半减器和全减器

半减器

全减器

二、半减器的verilog代码和testbench代码如下:

三、全减器的verilog代码和testbench代码如下:

 四、全减器仿真结果:

RTL:

 波形图:


前言

大二的数字逻辑课程和考试已经结束了,栽在了没细致研究的状态机上,但是对于一名计科学生来说,FPGA的领域仍然是广阔的,所以我将会把我之前学习所写的资料进行一个整理。

一、什么是半减器和全减器

半减器

半减器原理:两个二进制数相减叫做半减,实现半减器操作的电路称为半减器,半减器用于计算两bit x和y 的减法,输出结果diff和减法借位标志输出cin

半减器只考虑当前两位二进制数相减,输出为差以及是否向高位借位,而全减器还要考虑当前位的低位是否曾有借位。它们的真值表如下:

被减数 减数 表示本位最终运算结果 表示本位是否向高位借位
x y diff cin
0 0 0 0
0 1 1 1
1 0 1 0
1 1 0 0
diff = x ^ y;  cin = (~x) & y;

全减器

要理解真值表,可以用举列子的方法得到:

被减数 减数 表示低位是否向本位借位 表示本位最终运算结果 表示本位是否向高位借位
x y cout diff cin
0 0 0 0

0

0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
1 1 1 1 1

比如4'b1000 - 4b'0001,

则第一位对应0 1 0 1 1第二位对应的是0 0 1 1 1

 从真值表中,可以得到

diff = x ^ y ^ cout, cin = (~x & (y ^ cout))|(y & cout)

注意: +和|都表示或。 

推导过程:

Verilog 半减器和全减器

Verilog 半减器和全减器

二、半减器的verilog代码和testbench代码如下:

代码如下(示例):

module halfsub(x,y,d,cin);

  input x;
  input y;

  output d;
  output cin;

  assign d = x ^ y;
  assign cin = (~x) & y;

endmodule

testbench:

`timescale 1ns/1ns
`define clock_period 20

module halfsub_tb;
  reg  x,y;

  wire cin; //carryover
  wire d;
  reg clk;

  halfsub halfsub_0(
            .x(x),
            .y(y),
            .d(d),
            .cin(cin)
                  );

  initial clk = 0;
  always #(`clock_period/2) clk = ~clk;

  initial begin
     x = 0;
     repeat(20)
      #(`clock_period) x = $random;

  end

  initial begin
     y = 0;
     repeat(20)
      #(`clock_period) y = $random;

  end


  initial begin
     #(`clock_period*20)
    $stop;
  end
  
endmodule

三、全减器的verilog代码和testbench代码如下:

module fullsub(cout,x,y,d,cin);

  input cout; // carry out bit, borrowed by its next low bit
  input x;
  input y;

  output d;
  output cin;

  assign d = x ^ y ^ cout;
  assign cin = (~x & (y ^ cout)) | (y & cout);


endmodule

`timescale 1ns/1ns
`define clock_period 20

module fullsub_tb;
  reg  x,y,cout;

  wire cin; //carryover
  wire d;
  reg clk;

  fullsub fullsub_0(
                  .cout(cout),
            .x(x),
            .y(y),
            .d(d),
            .cin(cin)
                  );

  initial clk = 0;
  always #(`clock_period/2) clk = ~clk;

  initial begin
     x = 0;
     repeat(20)
      #(`clock_period) x = $random;

  end

  initial begin
     y = 0;
     repeat(20)
      #(`clock_period) y = $random;

  end

   initial begin
     cout = 0;
     repeat(20)
      #(`clock_period) cout = $random;

  end

  initial begin
     #(`clock_period*20)
    $stop;
  end


endmodule


 四、全减器仿真结果:

RTL:

Verilog 半减器和全减器

 波形图:

Verilog 半减器和全减器文章来源地址https://www.toymoban.com/news/detail-481017.html

到了这里,关于Verilog 半减器和全减器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Verilog教程系列文章导航

            学习FPGA,最重要的是要先掌握开发语言Verilog。         这10篇文章来自网站 FPGA Tutorial ,都是一些综合、总结型的文章。         ⚡第1篇:Verilog Tutorial(1)如何编写一个基本的 Verilog Module(模块)         ⚡第2篇:Verilog Tutorial(2)数据类型和数组简介

    2024年02月06日
    浏览(40)
  • 【基础知识】~ 半加器 & 全加器

    半加器,就是不考虑进位的加法器,只有两个输入和两个输出:输入A和B,输出和数sum和进位cout,半加器真值表如下: 全加器就是在半加器的基础上引入一个进位输入,总共三个输入两个输出。全加器真值表如下: 这里的输出一共有两个,一个sum,一个进位cout。sum的值是

    2024年02月11日
    浏览(32)
  • 条件概率和全概率公式

    条件概率公式 1.条件概率公式:设A,B为两个事件,且P(B)0,则称为事件B已经发生的条件下事件A发生的条件概率,记为P(A|B),即:                                              =    2.乘法定理:由条件概率定义   ,两边同乘以P(A)可得P(AB)=P(A)P(B|A),由此可得定理:      

    2024年01月21日
    浏览(27)
  • 离线数据仓库-关于增量和全量

    应用系统所产生的业务数据是数据仓库的重要数据来源,我们需要每日定时从业务数据库中抽取数据,传输到数据仓库中,之后再对数据进行分析统计。 为了方便上层指标的统计,数据的同步策略有 全量同步 和 增量同步 。 同步方式是针对对应的表而言的! 为什么要做数据

    2024年01月17日
    浏览(35)
  • 【FPGA实验一】半加器全加器实现

    半加器 什么是半加器? 半加器是能够对两个一位的二进制数进行相加得到半加和以及半加进位的组合电路。 半加器的真值表 半加器表达式: 半加器电路图: 建立原理图 启动 Quartus II 软件,选择File-New Project Wizard,在出现的界面下先Next,填写工程的路径和名称,然后接着

    2024年02月12日
    浏览(34)
  • 小驰私房菜系列-目录

    01_Android Camera该如何入门 02_Qcom 高通平台 新增加driver,需要准备哪些东西? 03_了解Remosaic 04_Camera2 - Image中YUV格式理解 05_camx 添加水印信息 06_camx Camera facing、orientation信息 07_camx EIS使能 08_camx 帧率相关问题如何debug 09_应用集成Raw域算法流程 10_camx Otp Dump 11_mm-camera 添加客制化分

    2023年04月11日
    浏览(20)
  • VHDL学习笔记——半加器 多路选择器 分频器

    VHDL程序结构: 条件语句 if_then_else_end if 数据类型 BIT类型(取逻辑位’1’或’0’)、整数类型INTEGER、布尔类型BOOLEAN(取TRUE或FALSE)、标准逻辑类型STD_LOGIC等 进程语句与顺序语句 process(敏感信号表)_endprocess VHDL中所有的顺序语句都必须放在进程语句中 端口语句 port(端口模式

    2024年02月02日
    浏览(22)
  • Linux系列 目录和文件管理

    作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录   前言 简介 本章重点 一.检查文本内容 ​编辑 1.cat命令——显示并连接(Concatenate)文件的内容 2.more和le

    2024年02月03日
    浏览(29)
  • 【Quartus | verilog 系列】实现 3-8译码器

    实验一: 3-8译码器(原理图输⼊设计)  2.1设计输⼊     1. 将3-8译码器A、B、C端作为输⼊,Y作为输出。     2. 其余引脚按照3-8译码器功能要求连接。     1. 激励⽂件的输⼊包含A、B、C的8种状态     2. 功能仿真 1. 给出3-8译码器的真值表: 2. 实验步骤、实验内容

    2024年02月11日
    浏览(29)
  • 加法器、半加器、全加器、超前进位加法器

    简单来讲,半加器不考虑低位进位来的 进位值 ,只有两个输入,两个输出。由一个与门和异或门构成. 真值表: 输入 输出 A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 半加器不考虑低位向本位的[进位],因此它不属于[时序逻辑电路],有两个输入端和两个输出。 设加数(输入端)为A、B

    2024年02月02日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包