教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

Verilog中的一些语法和技巧(3)

来源:网络收集 时间:2026-05-03
导读: 变化过程。 第二种表示正跳变可以是下列中的一种:0——x 0——z 0——1 x——1 z——1 第三种表示负跳变可以是写列中的一种:1——x 1——z 1——0 x——0 Z——0. 4、用always过程块实现组合逻辑功能 (1)事件表

变化过程。

第二种表示正跳变可以是下列中的一种:0——x 0——z 0——1 x——1 z——1

第三种表示负跳变可以是写列中的一种:1——x 1——z 1——0 x——0 Z——0.

4、用always过程块实现组合逻辑功能

(1)事件表达式内不能能包含“posedge”和“negedge”关键词,也就是说敏感事件列表中的事件表达式智能是前面所述的第一种现在敏感时间列表中。 5、电平敏感事件控制(wait语句)

与边沿触发事件控制不同,在电平敏感事件控制方式下启动语句执行的触发条件是某一个指定的条件为真。有三种形式: 第一种:wait(条件表达式) 语句块; 第二种:wait(条件表达式) 行为语句; 第三种:wait(条件表达式);

6、过程赋值语句:过程赋值语句是使用于两种结构化过程块(initial和always过程块)中的赋值语句。在过程块中智能使用过程赋值语句(不能在过程块中出现连续赋值语句),同时过程赋值语句也只能用在过程块中。 过程赋值语句的基本格式为:

<被赋值变量><赋值操作符><赋值表达式>

其中赋值操作符是“=”或者“《=”之一,他们分别代表了阻塞型赋值和非阻塞性赋值类型。

7、过程赋值语句智能对于对寄存器类的变量(reg、integer、real、time)进行赋值

8、过程赋值的两种延时方式:

(1)、外部延时控制方式:如果时间控制部分出现在整个过程赋值语句的最左端,也就是出现在赋值目标变量的左边,那么这种时间控制就是外部时间控制方式。 在这种控制方式下,过程赋值语句在仿真时是这样执行的:仿真进程晕倒这条带有时间控制的过程赋值语句后,首先要延迟等待有时间控制部分指定的延时时间量,或者等待到指定触发事件发生后,才开始计算有短的赋值表达式并将其值赋

11

予左端被赋变量。例如 #5 a=b;相当于延时5在把b的值赋给a。 (2)、内部时间控制

当赋值语句中的时间控制部分出现在“赋值操作符”和“赋值表达式”之间这种情况下的时间控制成为“内部时间控制”。 格式为:a=#5 b;

先计算b的值,当延迟时间过后把b的值赋给a。

可见,在内部时间控制方式下,时间控制所“控制”的是赋值表达式被计算时刻到赋值操作被执行时刻之间的时间差,赋值表达式被计算时刻和赋值变量被复制的时刻是不同的,他们之间的时间差是有时间控制部分决定的。

注意:这里赋给a的值是b在零时刻的值,要是b在以后的时刻发生了变化,则a在延时时间过后得到的值依然是b零时刻的取值。

格式例子:b=#5 a;c=@(posedge clk)a;d=wait(enable)a;

9、“显式零延时”控制即延时时间为零。#0 a=b;上面的这条语句的执行过程与不具有延时控制的赋值语句“a=b”的执行过程是很相似的;在语句开始执行后他们都是首先计算表达是b的值,在对变量a进行赋值;同时这两条语句的开始执行时刻、表达式计算时刻和变量赋值时刻都是相同的。但是两种赋值有这微妙的差别:在显示零延时控制下,赋值语句内赋值表达式的计算以及变量的赋值操作是在当前的仿真时刻的末位进行的,也就是说要等到这一时刻其他正常操作完成后才进行的。而赋值语句“a=b”内的表达式计算和变量赋值操作则是在赋值开始执行后立即进行的,不需要等待同一时刻的其他操作完成后才进行。如

initial Begin A=0; B=0; End

Initial Begin #0 a=1; #0 b=1; End

其中四条赋值语句的操作都是在零时刻得到执行。但是后两条赋值语句的左端加上了显示零延时控制#0,所以后两条语句在前两条语句执行完后才执行。也就是

12

先给a,b赋值0,然后再仿真时刻0 的末尾执行对a,b赋值1的操作,a、b的最终取值是1。 10、阻塞和非阻塞赋值:

阻塞型————符号为“=” 非阻塞型——符号为“<=”

区别:阻塞型在串行快中的 个跳阻塞型过程赋值语句将以他们在顺序快中的先后排列次序依次得到执行;而并行块中 的各条阻塞型过程赋值语句则是同事得到执行的。阻塞性过程赋值语句的执行过程是:先计算右端赋值表达式的取值,然后立即将计算结果赋值给“=”左端的被复制变量。

这两个特点表明:仿真进程在遇到阻塞型过程赋值语句时将计算表达是的值并立即将其结果付给等式左边的被赋值变量;在串行语句块中,下一条语句的执行会被本条阻塞型过程赋值语句阻塞,只有当前这条阻塞型过程赋值语句所对应的赋值操作执行完毕后下一条语句才能开始执行。也就是说“=”时,语句是一条一条执行的,第一条语句执行完毕后,第二条语句才开始执行。

非阻塞和阻塞是不同的,他的语句是同时执行的,在零时刻中他的赋值是同时进行的,在begin-end串行语句块中,一条非阻塞型过程赋值语句的执行不会阻塞下一条语句的执行,也就是说本条非阻塞型过程赋值语句对应的赋值操作执行完毕之前,下一条语句也是可以执行的。 12、

连续赋值语句:主要对组合逻辑电路进行描述。

连线性赋值语句智能用来对连星星变量进行驱动(赋值),而不能对寄存器型变量进行赋值他可以采用如下两种格式: (1)、显示连续复制语句:

连线型变量类型 [连线型变量位宽] 连线型变量名; Assign #(延时量) 连线型变量名=赋值表达式; (2)、隐式连续赋值语句:

连线型变量类型(赋值驱动强度)[连线型变量位宽]#(延时量) 连线型变量名=赋值表达式;

在以上两种格式中:“连线型变量类型”可以是出了trireg类型外的任何一种连线型数据类型。

驱动强度默认为(strong1,weak0)即赋1值时的驱动强度为strong,赋0值

13

时的驱动强度是weak。例如语句wire (weak1,strong0)a=b&c; “延时量”也是可选的格式如下: #(delay1,delay2,delay3)

其中delay1、2、3都是数值,“delay1”表示连线性变量转移到“1”时的延时量(称为上升延时);delay2为下降延时,delay3致命了连线性变量转移到“高阻(z)”状态的延时称之为关断延时。

在实际使用中上三个值是可以省略其中一个或者两个的:如值给出了一个延时值,则这个延时值同时带表“上升延时”、“下降延时”、“关断延时”。如给出了两个延时值,则分别代表“上升延时”和“下降延时”,而“关断延时:将由给出的两个延时值中的较小的哪一个指定。如果延时值这一项缺省,则默认所有的延时值为零。

“赋值表达式”可以包含连线型、寄存器型或函数调用等任何数据类型的操作数,同时也可以包含任何操作符。 13、

在实际中,连续赋值语句的赋值目标可以是如下几种:

(1)、标量连线型变量 Wire a,b; Assign a=b;

(2)、向量连线性变量 Wire[7:0]a,b; Assign a=b;

(3)、向量连线型中变量的一位 Wire[7:0]a,b; Assign a[3]=b[3];

(4)、向量连线性变量中的几位 Wire[7:0]a,b; Assign a[3:2]=b[3:2];

(5)、上面几种类型的任意凭借运算结果 Wire a,c;

Wire[2:1]b;Assign{a,c}=b;

14

在需要对多个连线型变量进行连续赋值时还可以采用下列形势的连续复制语句,他可以实现对多个变量进行连续赋值。 Assign a=b; C=d; D=f; 就等同于 Assign a=b; Assign c=d; Assign d=f;

连续赋值语句是对连线型变量进行连续的驱动;

14、注意:与寄存器型变量类型不同,连线性变量没有数据保持 …… 此处隐藏:1656字,全部文档内容请下载后查看。喜欢就下载吧 ……

Verilog中的一些语法和技巧(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/453558.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)