[Verilog学习笔记]②程序设计语句和描述方式

本文详细介绍了Verilog编程中的数据流建模和行为级建模,包括连续赋值语句、initial和always过程语句、阻塞与非阻塞赋值语句,以及各种循环和条件分支语句的使用。此外,还涵盖了结构化建模的模块级和门级建模概念。

一、数据流建模

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)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值