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

目录

  • 一、数据流建模
    • 1.连续赋值语句
  • 二、行为级建模
    • 1.过程语句
      • 1.1 initial过程语句
      • 1.2always语句块
      • 1.3过程语句使用中需要注意的问题
    • 2.语句块
    • 3.过程赋值语句
      • 3.1阻塞赋值语句
      • 3.1非阻塞赋值语句
    • 4.过程连续赋值语句
    • 5.条件分支语句
    • 6.循环语句
      • 6.1 forever循环语句
      • 6.2 repeat循环语句
      • 6.3 while循环语句
      • 6.4 for循环语句
  • 三、结构化建模
    • 1.模块级建模
    • 2. 门级建模

一、数据流建模

1.连续赋值语句

  • 目标类型是线型
  • 连续赋值中,只要赋值语句右边表达式任何一个变量有变化,表达式被立即计算
  • 连续赋值语句不能出现在过程块中
  • 多个连续赋值语句之间是并行语句
assign y=m|n


二、行为级建模

[Verilog学习笔记]②程序设计语句和描述方式_第1张图片

1.过程语句

1.1 initial过程语句

[Verilog学习笔记]②程序设计语句和描述方式_第2张图片
一般用于初始化

1.2always语句块

always语句块的出发状态是一直存在的,只要满足always后面的敏感事件列表,就执行过程块。
在这里插入图片描述
[Verilog学习笔记]②程序设计语句和描述方式_第3张图片

1.3过程语句使用中需要注意的问题

无论是时序还是组合逻辑描述,在过程语句中,被赋值信号必须定义为reg类型。

  • 组合电路描述中,全部输入信号列入敏感信号列表
  • 时序电路描述中,时间信号和部分输入信号列入敏感信号列表

2.语句块

语句块包括串行语句块和并行语句块两种,前者的关键字为begin和end,后者的关键字为fork和join
[Verilog学习笔记]②程序设计语句和描述方式_第4张图片
需要注意的是,并行语句块只能用于仿真测试程序,不能用于可综合电路程序
[Verilog学习笔记]②程序设计语句和描述方式_第5张图片

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语句
[Verilog学习笔记]②程序设计语句和描述方式_第6张图片

6.2 repeat循环语句

固定次数循环
[Verilog学习笔记]②程序设计语句和描述方式_第7张图片

6.3 while循环语句

[Verilog学习笔记]②程序设计语句和描述方式_第8张图片

6.4 for循环语句

[Verilog学习笔记]②程序设计语句和描述方式_第9张图片

三、结构化建模

1.模块级建模

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

阵列调用:
[Verilog学习笔记]②程序设计语句和描述方式_第10张图片

2. 门级建模

[Verilog学习笔记]②程序设计语句和描述方式_第11张图片
[Verilog学习笔记]②程序设计语句和描述方式_第12张图片
门级模块的调用为:

  • 多输入门:门类型<实例名>(<输出端口>,<输入端口1>,<输入端口2>, ⋯ \cdots ,<输入端口n>)
  • 多输出们:门类型<实例名>(<输出端口1>,<输入端口2>, ⋯ \cdots ,<输入端口n>,<输入端口>)

例如:

and A1(OUT1,in1,in2);
not not_1(out1,out2,in)

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