verilog 夏闻宇 第3版 day7

1.wire

默认模块中的输入都是wire型,输出为reg

wire[3:0] 代表变量由4位构成,在实际电路模型中,代表有4路输入线

2.testbench

开始有点理解实例化的意思,在仿真文件中会涉及到具体的操作,比如赋值给输出等;

在testbench中,我们通过给时钟初始化等步骤,设定好一个仿真文件中程序所要运行的环境,然后通过实例化,把仿真文件中的参数引进来,进行电路测试。

ps. vscode生成波形vcd语句

$dumpfile("reg0.vcd");

$dumpvars;    

3.reg/wire

【工程源码】【Modelsim常见问题】TestBench中端口reg和wire定义解惑_小梅哥爱漂流的博客-CSDN博客

在仿真文件中,因为verilog是基于模块设计,所以输入变量一般为wire(导线),输出一般为reg;

Testbench中,正相反,先简单的理解为输入为Reg,输出为wire。更重要的是,testbench

作为顶层模块,其没有输入输出端口,所以直接定义变量类型,无需input/output(ps.若强行定义输入为reg,在initial/always块中会报错)

若出现终端报错

Unknown module type: 实例化模块名,需要先声明宏 `include "XXX.v"

5.如果vcd中无波形,考虑未加截止时间;

6.宏定义 

引用.v文件时需要  `include "XXXX.v";ps.语句后不加;

还可以用宏定义参数(区别 parameter PERIOD  = 10;)

7.testbench 为top模块,包括要赋给下面模块的值(即实例化),以及参数是如何运转的

与子模块仿真文件不同,仿真文件中无数据,e.g.对于移存器,仿真文件中不会指出需要转移的数据具体是多少,但是testbench中必须指明

8.加法器

4位加法器:

【从原理到实践】如何制作一个4位加法器 - 知乎

半加器原理:

对于1位二进制加法,真值表

 表明,A+B的结果正在门电路上等效为 异或;

对于进位情况,可得知,只有在11情况下才有进位1,此时在门电路上等效为与门,因此在不考虑前一位二进制加法(半加)的情况下,等效电路模型为

 全加器:

我们所要输入的不是单独的1位二进制数字,对于连续的二进制串,我们就比要考虑前一位的进位对于本位的影响,因此必须要增加一个输入端口Cin,代表前一位的进位;

最终所得到的

本位输出仍为异或,=a^b^Cin,本位进位输出仍为或门,=(a+b)+(Cin·(a^b))//^异或

门电路如下图

 若考虑多位加法器,则(串行)全加器门电路为

由于经过太多门电路会导致主要由门电路延迟(还有线延迟)所带来的延迟以及效率低下(后级门电路需等待前面的门电路输出)问题;

超前进位加法器(并行):

基本思路:每一级门电路只靠 进位输入/出相连,通过分别计算每一级进位输出都和什么信号有关系,可以使得每一级 的进位输出得到并联运行

对于进位输出(这里 · 代表异或)

 

超前进位加法器:

https://www.cnblogs.com/yiquwange/p/14988026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值