关于Verilog中的几种赋值语句(assigndeassignforcerelea)

更新时间:2023-05-25 06:26:58 阅读: 评论:0

关于Verilog中的⼏种赋值语句
(assigndeassignforcerelea)
摘⾃
1. 连续赋值语句(Continuous Assignments)
连续赋值语句是Verilog数据流建模的基本语句,⽤于对线⽹进⾏赋值,等价于门级描述,是从更⾼的抽象⾓度来对电路进⾏描述。连续赋值语句必须以关键词assign开始。
连续复制的主要特点是:
连续赋值语句的左值可以是⼀下类型之⼀:
①标量线⽹
②向量线⽹
③矩阵中的⼀个元素(该矩阵可以是标量线⽹类型的,也可以是向量线⽹类型的)
④向量线⽹的某⼀位瓶子的英文
⑤向量线⽹的部分位
以及上述各种类型的拼接体
但是,不能是向量或向量寄存器。
连续赋值语句总是处于激活状态。只要任意⼀个操作数发⽣变化,表达式就会被⽴即重新计算,并且将结果赋给等号左边的线⽹。
操作数可以是标量或向量的线⽹或寄存器,也可以是函数的调⽤。
赋值延迟⽤于控制对线⽹赋予新值的时间,根据仿真时间单位进⾏说明。赋值延迟类似于门延迟,对于描述实际电路中的时序是⾮常重要的。
2. 过程赋值语句(Procedural Assignments)
过程赋值语句的更新对象是寄存器、整数、实数或时间变量等。这些类型的变量在被赋值后,其值将保持不变,直到被其他过程赋值语句赋予新值。过程赋值语句只有在执⾏到的时候才会起作⽤。过程赋值语句只能在initial或always语句内进⾏赋值,只能对变量数据类型赋值,同时initial和always中只能使⽤过程赋值语句。过程赋值语句的左值可以是以下类型之⼀:
①reg、整形数、实型数、时间寄存器变量或存储器单元
②上述各种类型的位选(例如:addr[3])
注册会计师考哪几门课程③上述各种类型的域选(例如:addr[31:16])
④上⾯三种类型的拼接
过程性赋值语句包括两种类型的赋值语句:阻塞赋值(=)和⾮阻塞赋值(<=)(其主要区别详见各类Verilog参考书,这⾥不再详述)。
3. 过程连续赋值语句(Procedural Continuous Assignments)
过程连续赋值是在过程块内对变量或线⽹型数据进⾏连续赋值,是⼀种过程性赋值,换⾔之,过程性连续赋值语句是⼀种能够在always 或initial语句块中出现的语句。这种赋值可以改写(Override)所有其他语句对线⽹或者变量的赋值。这种赋值允许赋值表达式被连续的驱动进⼊到变量或线⽹中去。
过程连续赋值语句有两种类型:
①assign和deassign过程性语句:对变量进⾏赋值。
②force和relea过程性语句:主要⽤于对线⽹赋值,也可以⽤于对变量赋值。
3.1 assign和deassign语句
assign和deassign语句构成了⼀类过程性连续赋值语句,只能⽤于对寄存器类型变量的连续赋值操作,不能⽤来对线⽹类型数据进⾏连续赋值操作。
①assign语句
语法:assign <;寄存器类型变量> = <;赋值表达式>;
assign在执⾏时,寄存器类型变量将由赋值表达式进⾏连续驱动,即进⼊连续赋值状态。如果此时有普通的过程赋值语句对该寄存器变量进⾏过程赋值操作,由于过程连续赋值语句assign的优先级⾼于普通过程赋值语句,所以出于连续赋值状态的寄存器变量将忽略普通过程赋值语句对它的过程赋值操作,其逻辑状态仍然由过程连续赋值语句内的赋值表达式所决定。
如果先后有两条assign语句对同⼀寄存器变量进⾏了过程连续赋值操作,那么第⼆条assign的执⾏将覆盖第⼀条assign的执⾏效果。
②deassign语句
语法:deassign <;寄存器类型变量>;
locodeassign语句是⼀条撤销连续赋值语句,⽤来结束对变量的连续赋值操作。当deassign语句执⾏后,原来由assign语句对该变量进⾏的连续赋值操作将失效,寄存器变量被连续赋值的状态将得到解除,该变量⼜可以由普通过程赋值语句进⾏赋值操作了。这⾥需要注意⼀点,当执⾏该语句撤销对某寄存器变量的连续赋值后,该寄存器变量仍将保持使⽤该语句之前的原有值。
毕业论文翻译
③⽰例:
上述语句执⾏过程如下:
s0:在0时刻,out被赋值为0,并且保持这个取值;
上海儿童英语哪个好s1:在10时刻,s1开始执⾏,实现了对变量out的连续赋值操作,因此从10时刻开始,out将处于连续赋值状态;
s2:在20时刻,s2开始执⾏,将覆盖s1产⽣的作⽤,所以从20时刻开始,out将由c & d连续驱动;
s3:s3操作覆盖掉s2操作;
s4:当deassign语句得到执⾏,变量out连续赋值状态被解除,其取值将保持最后⼀次assign语句赋予的值,即“e & f”;
3.2 force和relea语句
force和relea语句与assign和deassign语句类似,也是⼀种过程连续赋值语句。这组赋值语句不仅能对寄存器类型变量产⽣作⽤,还能对线⽹类型数据进⾏连续赋值操作。
①force语句
语法:force <;寄存器变量或者线⽹数据> = <;赋值表达式>>;
force语句应⽤于寄存器类型变量时,则在force语句执⾏后,该寄存器变量将强制由<;赋值表达式>进⾏连续驱动,进⼊被连续赋值的状态,此时将忽略其他较低优先级的赋值语句对该寄存器变量的赋值操作,直到执⾏⼀条relea语句来释放对该寄存器变量的连续赋值为⽌。
force语句应⽤于线⽹数据时,则force语句执⾏后,对应的线⽹数据将得到<;赋值表达式>的连续驱动,此时将忽略该线⽹数据上较低优先级的驱动,直到有⼀条relea语句执⾏为⽌。wherehaveyoubeen
②relea语句
语法:relea  <;寄存器变量或者线⽹数据>;
relea语句执⾏后,原先由force语句对变量或者线⽹施加的过程连续赋值将失效,变量将解除被被连续赋值的状态,较低优先级的赋值语句的赋值操作将有效。juniorcollege
③⽰例:
s0:实现对变量var_reg1的过程赋值操作,即var_reg1被赋值为3'b000;
s1:执⾏assign过程连续赋值语句,⽤来实现对变量var_reg2的连续赋值,从⽽var_reg2将被连续赋值为3'b001;
s2:在执⾏本条语句时,var_reg1未被assign语句进⾏过连续赋值操作,因此var_reg1被force连续赋值为3'b100;
s3:执⾏本条语句后,var_reg2被force连续赋值为3'b100;
s4:执⾏本条语句时,因为变量var_reg1将退出连续赋值的状态,因为var_reg1未曾被assign语句进⾏过连续赋值操作,故var_reg1取值保持不变,即保持force状态时的值3'b100;
s5:执⾏本语句时,因为var_reg2在执⾏s3之前已经由s1实现了连续赋值,所以在本条语句s5执⾏后,变量var_reg2将恢复到由assign 语句s1确定的连续赋值状态,即3'b001;
4. 赋值语句的区别
4.1 连续赋值语句和过程赋值语句之间的区别
连续赋值语句由assign来标⽰,⽽过程赋值语句不能包含这个关键词;
连续赋值语句中左侧的数据类型必须是线⽹数据类型,⽽过程赋值语句中的被赋值数据类型则必须是寄存器类型的变量;雅思在线学习
连续赋值语句不能出现在过程块(initial或always)中,⽽过程赋值语句可以;
六级考多久>when i was 13 years old连续赋值语句主要⽤来对组合逻辑电路进⾏建模以及对线⽹数据间的连接进⾏描述,⽽过程赋值语句主要⽤来对时序逻辑电路进⾏⾏为描述;
连续赋值语句对被赋值线⽹型数据的赋值是“连续”的(即赋值表达式的任何变化都会在⽴刻反应在线⽹数据的取值上),⽽过程性赋值语句,只有在过程赋值语句被执⾏时才执⾏赋值操作,语句执⾏完后被赋值变量的取值不再受到赋值表达式的影响(注意这⾥的⼀次是指:在initial块中,过程性赋值只顺序执⾏⼀次,⽽在always块中,每⼀次满⾜always的条件时,都要顺序执⾏⼀次该always块中的语句。)。
连续赋值与过程赋值的区别:
过程赋值 连续赋值
assign ⽆assign(过程性连续赋值除外) 有assign
符号  使⽤“=”或“《=”  只使⽤“=”
位置  在always语句或initial语句中均可出现 不可出现于always语句和initial语句
执⾏条件 与周围其他语句有关 等号右端操作数的值发⽣变化时
⽤途 驱动寄存器 驱动线⽹
4.2 过程连续赋值语句和连续赋值语句之间的区别
过程连续赋值语句只能⽤在过程块(initial过程快或always过程块)内,⽽连续赋值语句不能出现在过程块中。
过程连续赋值语句可以对寄存器类型变量进⾏连续赋值(其中force-relea语句还可以对线⽹进⾏连续赋值),但是其赋值⽬标不能是变量或线⽹的某⼀位或某⼏位,⽽连续赋值语句只能对线⽹数据进⾏赋值,赋值⽬标可以是线⽹型数据的某⼀位或某⼏位。

本文发布于:2023-05-25 06:26:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/121767.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:赋值   语句   过程   变量   寄存器   类型   操作
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图