目录
一、数据流建模
1.连续赋值语句
- 目标类型是线型
- 连续赋值中,只要赋值语句右边表达式任何一个变量有变化,表达式被立即计算
- 连续赋值语句不能出现在过程块中
- 多个连续赋值语句之间是并行语句
assign y=m|n
二、行为级建模

1.过程语句
1.1 initial过程语句

一般用于初始化
1.2always语句块
always语句块的出发状态是一直存在的,只要满足always后面的敏感事件列表,就执行过程块。


1.3过程语句使用中需要注意的问题
无论是时序还是组合逻辑描述,在过程语句中,被赋值信号必须定义为reg类型。
- 组合电路描述中,全部输入信号列入敏感信号列表
- 时序电路描述中,时间信号和部分输入信号列入敏感信号列表
2.语句块
语句块包括串行语句块和并行语句块两种,前者的关键字为begin和end,后者的关键字为fork和join

需要注意的是,并行语句块只能用于仿真测试程序,不能用于可综合电路程序

3.过程赋值语句
3.1阻塞赋值语句
语法格式为变量=表达式
在串行语句块中,各条阻塞赋值语句按照先后顺序依次执行,在并行语句块中,各条阻塞赋值语句同时执行。
执行阻塞赋值语句的顺序是,先计算等号右边表达式的值,然后立刻将计算的值付给左边的变量,与仿真时间无关。
3.1非阻塞赋值语句
语法格式为变量<=表达式
在串行语句块中,各条非阻塞赋值语句的执行没有先后顺序,每条语句并行执行。
执行非阻塞赋值语句的顺序是,先计算右端表达式的值,然后等到延时时间结束时,将计算的值赋给左边的变量。
4.过程连续赋值语句
过程性连续赋值语句有两种类型:赋值、重新赋值(assign,deassign)和强制、释放语句(force,release)
assign <寄存器型变量>=<赋值表达式>
deassgin<寄存器变量>
force<寄存器或连线型变量>=<赋值表达式>
release<寄存器或连线型变量>
5.条件分支语句
if 与else(有缩进)
case(相比于c++,不需要break,执行完直接跳出)
在使用case语句时,应该包含所有状态,如果没有包含完全,则必须设定缺省项default
6.循环语句
6.1 forever循环语句
执行无限循环,直到遇到系统任务$finsh为止。如果需要退出,可以使用disable语句

6.2 repeat循环语句
固定次数循环

6.3 while循环语句

6.4 for循环语句

三、结构化建模
1.模块级建模
即通过调用由用户自己描述产生的module模块对硬件电路结构进行说明。
模块调用的基本语法格式为:
模块名 <参数值列表> 实例名(端口名列表)
阵列调用:

2. 门级建模


门级模块的调用为:
- 多输入门:门类型<实例名>(<输出端口>,<输入端口1>,<输入端口2>, ⋯ \cdots ⋯,<输入端口n>)
- 多输出们:门类型<实例名>(<输出端口1>,<输入端口2>, ⋯ \cdots ⋯,<输入端口n>,<输入端口>)
例如:
and A1(OUT1,in1,in2);
not not_1(out1,out2,in)
本文详细介绍了Verilog编程中的数据流建模和行为级建模,包括连续赋值语句、initial和always过程语句、阻塞与非阻塞赋值语句,以及各种循环和条件分支语句的使用。此外,还涵盖了结构化建模的模块级和门级建模概念。
1862

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



