数据流建模

学习目标

讲述连续赋值语句(assign)、对于连续赋值语句的限制以及隐式连续赋值语句

解释赋值延迟、隐式赋值延迟以及用于连续赋值语句的线网声明延迟

定义表达式、操作符合操作数

列表解释所有类型的操作符(算术、逻辑、关系、等价、按位、缩减、移位、拼接和条件等)

使用数据流结构对实际的数字电路建模

1连续赋值语句

是Verilog数据流建模的基本语句,用于对线网进行赋值。等价于门级描述,是从更高的抽象角度对电路进行描述

连续赋值语句必须以关键词assign开始,其语法如下:

countinus_assign : :=assign [drive_strength ] [delay3 ]
                                 list_of_net_assignments ;
list_of_net_assignments : := net_assignment {, net_assignment}
net_assignment : :=net_lvalue = expression

 

 特点:

连续赋值语句的左值必须是一个标量或向量线网,或标量或向量线网的拼接,而不能是向量或向量寄存器

连续赋值语句总是处于激活状态

操作数可以是标量或向量的线网或寄存器,也可以是函数调用

赋值延迟用于控制对线网赋予新值的时间,根据仿真时间单位进行说明

1.1隐式连续赋值

在线网声明的同时对其进行赋值。由于线网只能被声明一次,因此对线网的隐式声明赋值只能有一次

//普通的连续赋值
wire out;
assign out = in1&in2;

//使用隐式连续赋值实现与上面两条语句同样的功能
wire out = in1&in2;

1.2隐式线网声明

如果一个信号名被用在连续赋值语句的左侧,那么Verilog编译器认为该信号是一个隐式声明的线网。如果线网被连接到模块的端口上,则Verilog编译器认为隐式声明

线网的宽度等于模块端口的宽度

1 //连续赋值,out为线网类型
2 wire i1,i2;
3 assign out=i1&i2;//注意,out并未声明为线网,但Verilog仿真器会推断出来
4                           // out是一个隐式声明的线网

 

 

2延迟

连续赋值语句中的延迟用于控制任一操作数发生变化到语句左值被赋予新值之间的时间间隔

普通赋值延迟、隐式赋值延迟、线网声明延迟 

普通赋值延迟

指定延迟的第一种方法是在连续赋值语句中说明延迟值,延迟值位于关键字assign的后面

2.2隐式连续赋值延迟

使用隐式连续赋值语句来说明对线网的赋值以及赋值延迟

2.3线网声明延迟

Verilog允许在声明线网的时候指定一个延迟,这样对该线网的任何赋值都会被推迟指定的时间

//连续赋值语句中的延迟
assign #10 out = in1 & in2;

//隐式连续赋值延迟
wire #10 out = in1&in2;

//线网延迟
wire #10 out;
assign out = in1&in2;

3表达式、操作符和操作数

3.1表达式

有操作符和操作数构成。目的是根据操作符的意义计算出一个结果值

3.2操作数

注意某些语法结构要求使用特定类型的操作数。

3.3操作符

对操作数进行运算并产生一个结果

4操作符类型

操作类型操作符执行的操作操作数的个数
算术*2
/2
+2
-2
%取模2
**求幂2

 

操作类型操作符执行的操作操作数个数
逻辑!逻辑求反1
&&逻辑与2
||逻辑或2
关系>大于2
<小于2
>=大于等于2
<=小于等于2
等价==相等2
!=不等2
===case相等2
!==case不等2

 

操作类型操作符执行的操作操作数的个数
按位~按位求反1
&按位与2
|按位或2
^按位异或2
^~或~^按位同或2
缩减&缩减与1
~&缩减与非1
|缩减或1
~|缩减或非1
^缩减异或1
^~或~^缩减同或1
移位>>右移2
<<左移2
>>>算术右移2
<<<算术左移2
拼接{  }拼接任意个数
复制{{  }}复制任意个数
条件?:条件3

4.1算术操作符

双目和单目

双目

若操作符任意一位为x,那么运算结果的全部位为x

单目

使用整数或实数来表示负数

4.2逻辑操作符

逻辑操作符的计算结果是1位的值:0表示假,1表示真,x表示不确实能够;

如果一个操作数不为0,则等价于逻辑1(真);如果它等于0,则等价于逻辑0(假);如果任意一位为x或z,则它等价于x(不确定),则仿真器

一般将其作为假来处理。

逻辑操作符取变量或表达式作为操作数。

4.3等价操作符

表达式说明可能的逻辑值
a==ba等于b,若在a或b中有x或z,则结果不定   0,1,x
a!=ba不等于b,若在a或b中有x或z,则结果不定   0,1,x
a===b               a等于b,包括x或z     0,1
a!==ba不等于b,包括x或z0,1

逻辑等价操作符和case等价操作符是不同的,对逻辑等价操作符,如果操作数的某位为x或z,则结果为x;而case等价操作符必须包括x和z逐位的精确比较,

只有在两者完全相等的情况下,结果才会为1,否则为0,。case等价操作符产生的结果肯定不会为x。

4.4缩减操作符

缩减操作符只有一个操作数,它对这个向量操作数作逐位进行操作,产生一个一位的结果。

缩减与和缩减与非,缩减或和缩减或非,缩减异或和缩减同或的计算结果恰好相反。

 4.5操作符的优先级

操作操作符号优先级别
单目运算+ - ! ~最高
乘、除、取模* / % 
加、减+ - 
移位<< >> 
关系< <=   > >= 
等价== != 
=== !== 
缩减& ~& 
^ ^~ 
| ~| 
逻辑

 

&& 
|| 
条件?:最低

转载于:https://www.cnblogs.com/fxygrzb/p/5946082.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值