基础电路:加法器结构、底层结构

目录

前言

一、1bit 半加法器

二、结构、代码

三 、测试文件 Testbench设计

四、测试结果

 


前言

加法器在很多的系统中充当着重要的基本单元。在数字电路中有着广泛的用途。

 

一、1bit 半加法器

数字系统设计中,逻辑上通过0和1来实现复杂的系统功能,最简单的逻辑运算就是两个1bit进行加操作。假设A、B分别代表着两个1bit输入,C、D分别代表着相加结果以及进位输出,真值表如下:

二、结构、代码

此实例设计半加法器模块,adder位顶层的外部接口,输入定义位a、b,进位输出和结果定义为cout、sum,声明为wire数据类型,数据流语句采用的是assign赋值语句。

//**********************************************************
//Project name:
//Author:
//Email:
//Create Time:
//File Name:
//Description:
//**********************************************************
//Modification History:
//Date       By         Version        Change Description 
//**********************************************************
//
//
//
//**********************************************************
`timescale 1ns/1ps 

module adder (
  input a,
  input b,
  output sum,
  output cout);

  wire cout,sum;
  
  assign {cout,sum}= a + b;

endmodule 

其中{cout,sum}为verilog中的拼接操作符,可以将两个或者两个以上的操作数拼接在一起,组成一个操作数,拼接操作符的每个操作数须有确定的位宽。

 

三 、测试文件 Testbench设计


 

//**********************************************************
//Project name:
//Author:
//Email:
//Create Time:
//File Name:
//Description:
//**********************************************************
//Modification History:
//Date       By         Version        Change Description 
//**********************************************************
//
//
//
//**********************************************************

`timescale 1ns/1ps

module adder_tb ();

// input 
reg a,b ;

// output 
wire sum,cout;

integer i,j;  //define line 


//dut 
adder adder_tb (
  .sum(sum),
  .cout(cout),
  .a(a),
  .b(b)
);

// excitation signal 
initial 
  begin 
    a = 0;
    b = 0;
    for (i = 1; i< 16;i= i +1)
    #20 a = i;
  end 

initial 
  begin 
    for (j = 1; j < 16; j = j +1)
    #10 b = j;
  end 

//monitor 
initial 
  begin 
    $monitor($time,,,,,,"%d + %d = {%b,%d}",a,b,cout,sum);
    #500 $finish;
  end 
 
//print the waveform 
initial 
  begin 
    $fsdbDumpfile("adder.fsdb");
    $fsdbDumpvars(0,adder_tb);
  end 

endmodule

 在Verilog中所有的时延都用单位时间表示;`timescale 编译器指令将时间单位和实际时间相关联;该指令用于定义时延单位和时延精度;

在测试模块中通过输入加入激励,输入定义为reg类型;而输出是连续性赋值,输出定义wire类型; initial语句产生激励信号;initial语句中包含了一个顺序语句;在0开始执行,执行完所有语句后,永久挂起;

monitor是监视器;系统任务$monitor调用的功能是只要参数表中指定的变量值发生变化,就打印指定的字符串;

 

四、测试结果


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值