文章目录
参考来源:china.pub.com
一、Verilog HDL简介
1.1 Verilog HDL
- Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的
数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之
间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
- Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构
组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模
语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设
计外部访问设计,包括模拟的具体控制和运行。
二、HDL指南
2.1 模块(module)
- 基本语法:
- 说明部分语句最好放在module开头部分
- 端口默认大小为一位,线网型(线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。)
module module name (port list)i
Declarations
reg, wire, parameter,
input, output, inout
function, task,
statements
Initial statement
Always statement
Module ins tantiation
Gate instantiation
UDP instantiation
Continuous assignment
endmodule
2.2时延
`` timescale** 1ns /100ps`编译器指令在模块描述前定义,表示时延时间单位为 1 n s并且时间精度为100ps
#2
表示2个时间单位
2.3数据流描述方式
- 连续赋值语句
- 语法:
assign [delay] LHS_net = RHS_ expression
- 右表达式使用的操作数一旦发生变化 , 右边表达式都重新计算 , 在指定的时延后变化值(默认为0)被赋予左边表达式的线网类型变量。
- 连续赋值语句只能为线网类型变量赋值
- 连续赋值语句是并发执行的,各语句的执行顺序与其在描述中出现的顺序无关
- 语法:
2.4行为表述方式
-
initial语句
- 只执行一次
-
always语句
-
循环执行
-
语法:’,'和“or”都可以分割敏感事件,可以用“*”代表所有输入信号,always 语句中有一个与事件控制(紧跟在字符@ 后面的
表达式)。相关联的顺序过程( begin - end对)。
always@ * always@ (posedge clk1,negedge clk2) always@ (a or b) begin //顺序过程 end
-
在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值可以有一个可选的时延。分为语句间(时延语句执行的时延)、内(右边表达式数值计算与左边表达式赋值间的时延)时延
-
-
寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。
-
所有的初始化语