Verilog HDL(二):行为级建模的结构(initial和always)、begin、fork、时间控制

1.行为级建模的结构

(1)基本语法格式

module<模块名>(<端口列表>)
		模块端口说明;
		[参数定义];                 //用关键词“parameter”实现
		数据类型说明;            //默认为线网类型“wire”
		过程块(initial过程块或always过程块,可以有一个或多个)
		连续赋值语句;             //有关键词“assign”开头
		[任务定义(task)];
		[函数定义(function)];
endmodule

(2)initial和always过程块的区别

initial 
		语句块
always @(敏感事件列表)      //敏感事件列表是由一个或多个时间表达式组成,用or来连
		语句块

注意:always语句后面可以有一个敏感事件列表,该敏感事件列表的作用是用来激活always过程语句的执行,而initial过程语句的后面不允许有敏感事件列表。

2.语句块

(1)顺序块begin-end
当最后一条语句执行完毕时,程序流程控制跳出顺序快,结束执行。执行时间为内部各条语句执行时间的总和。
(2)并行块fork-join
当执行时间最长的语句执行完毕时,程序流程控制跳出并行块,结束执行。执行时间为执行时间最长的那条语句所需的执行时间。
(3)顺序块和并行块属于不同的过程块时,是并行执行的。
(4)顺序块和并行块可以相互嵌套。

3.时间控制

(1)延时控制

#<延迟时间>  行为语句;

#<延迟时间>

(2)边沿触发时间控制
语法格式:
@ (<事件表达式>)行为语句;
@ (<事件表达式>);
@ (<事件表达式1>or<事件表达式2>or…or<事件表达式n>)行为语句;
@ (<事件表达式1>or<事件表达式2>or…or<事件表达式n>);

其中事件表达式的形式:
1》<信号名>;
例如:@(reg_a)reg_b = reg_a;
2》posedge<信号名>; //加posedge,代表<信号名>所指定的信号发生正跳变
例如:@(posedge reg_a)reg_b = reg_a;
3》negedge<信号名>; //加negedge,代表<信号名>所指定的信号发生负跳变
例如:@(negedge reg_a)reg_b = reg_a;

(3)电平敏感事件控制(wait语句)
1》wait(条件表达式)语句块;
2》wait(条件表达式)行为语句;
3》wait(条件表达式);

你可能感兴趣的:(Verilog,HDL)