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中行为级建模的基本结构,包括模块定义、过程块(initial和always)、语句块(begin-end和fork-join)以及时间控制方法如延迟控制、边沿触发和电平敏感事件控制。通过理解这些核心概念,读者可以更好地掌握Verilog的行为级设计技巧。
3626

被折叠的 条评论
为什么被折叠?



