集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1045|回复: 1

Verilog HDL的基本语法

[复制链接]
LYF 发表于 2021-8-6 14:59:10 | 显示全部楼层 |阅读模式
3.4.2 块语句

块语句通常用来将两条或多条语句组合在一起,使其在格式上看更象一条语句。块语句有两
种,一种是begin_end语句,通常用来标识顺序执行的语句,用它来标识的块称为顺序块。一种是
fork_join语句,通常用来标识并行执行的语句,用它来标识的块称为并行块。下面进行详细的介绍。
一.顺序块
顺序块有以下特点:
1) 块内的语句是按顺序执行的,即只有上面一条语句执行完后下面的语句才能执行。
2) 每条语句的延迟时间是相对于前一条语句的仿真时间而言的。
3) 直到最后一条语句执行完,程序流程控制才跳出该语句块。
顺序块的格式如下:
begin
语句1;
语句2;
......
语句n;
end

begin:块名
块内声明语句
语句1;
语句2;
......
语句n;
end
其中:
y 块名即该块的名字,一个标识名。其作用后面再详细介绍。
y 块内声明语句可以是参数声明语句、reg型变量声明语句、integer型变量声明语句、real
型变量声明语句。
下面举例说明:
[例1]:begin
areg = breg;
creg = areg; //creg的值为breg的值。
end
D
CLK
a Q
clk
b
c
33
第三章 Verilog HDL 基本语法
--------------------------------------------------------------------------------------------------------------------------------------------
------
从该例可以看出,第一条赋值语句先执行,areg的值更新为breg的值,然后程序流程控制转到第二条
赋值语句,creg的值更新为areg的值。因为这两条赋值语句之间没有任何延迟时间,creg的值实为breg
的值。当然可以在顺序块里延迟控制时间来分开两个赋值语句的执行时间,见[例2]:
[例2]: begin
areg = breg;
#10 creg = areg;
//在两条赋值语句间延迟10个时间单位。
end
[例3]:parameter d=50; //声明d是一个参数
reg [7:0] r; //声明r是一个8位的寄存器变量
begin //由一系列延迟产生的波形
#d r = 'h35;
#d r = 'hE2;
#d r = 'h00;
#d r = 'hF7;
#d -> end_wave; //触发事件end_wave
end
这个例子中用顺序块和延迟控制组合来产生一个时序波形。
二. 并行块
并行块有以下四个特点:
1) 块内语句是同时执行的,即程序流程控制一进入到该并行块,块内语句则开始同时并行
地执行。
2) 块内每条语句的延迟时间是相对于程序流程控制进入到块内时的仿真时间的。
3) 延迟时间是用来给赋值语句提供执行时序的。
4) 当按时间时序排序在最后的语句执行完后或一个disable语句执行时,程序流程控制跳
出该程序块。
并行块的格式如下:
fork
语句1;
语句2;
.......
语句n;
join

fork:块名
块内声明语句
语句1;
语句2;
......
语句n;
join
其中:
• 块名即标识该块的一个名字,相当于一个标识符。
• 块内说明语句可以是参数说明语句、reg型变量声明语句、integer型变量声明语句、real
型变量声明语句、time型变量声明语句、事件(event)说明语句。
34
第三章 Verilog HDL 基本语法
--------------------------------------------------------------------------------------------------------------------------------------------
------
下面举例说明:
[例4]:fork
#50 r = 'h35;
#100 r = 'hE2;
#150 r = 'h00;
#200 r = 'hF7;
#250 -> end_wave; //触发事件end_wave.
join
在这个例子中用并行块来替代了前面例子中的顺序块来产生波形,用这两种方法生成的波形是一样
的。
三. 块名
在VerilgHDL语言中,可以给每个块取一个名字,只需将名字加在关键词begin或fork后面即
可。这样做的原因有以下几点。
1) 这样可以在块内定义局部变量,即只在块内使用的变量。
2) 这样可以允许块被其它语句调用,如被disable语句。
3) 在Verilog语言里,所有的变量都是静态的,即所有的变量都只有一个唯一的存储地址,
因此进入或跳出块并不影响存储在变量内的值。
基于以上原因,块名就提供了一个在任何仿真时刻确认变量值的方法。
lihongkun16 发表于 2021-8-7 09:03:43 | 显示全部楼层
Verilog HDL的基本语法
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-23 23:20 , Processed in 0.055202 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表