欢迎来到EDA中国!
当前位置:网站首页 >资源共享 > FPGA

Verilog HDL语言教程第二章--HDL指南

  • 500k
  • pdf
  •  
  •  
  • 下载
  • 2013-04-26
  • 软件简介
2.1 模块
模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的
外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的
数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个
模块中使用。
一个模块的基本语法如下:
m o d u l e m o d u l e n a m e (p o r t l i s t) ;
D e c l a r a t i o n s :
reg, wire, parameter,
input, output, inout,
function, task, . . .
S t a t e m e n t s :
Initial statement
Always statement
Module instantiation
Gate instantiation
UDP instantiation
Continuous assignment
e n d m o d u l e
说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功
能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数
等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说
明部分放在语句前。本书中的所有实例都遵守这一规范。
图2 - 1为建模一个半加器电路的模块的简单实例。
m o d u l e H a l f A d d e r (A, B, Sum, Carry) ;
i n p u t A, B;
o u t p u t Sum, Carry;
a s s i g n #2 Sum = A ^ B;
a s s i g n #5 Carry = A & B;
e n d m o d u l e
模块的名字是H a l f A d d e r。模块有4个端口: 两个输
入端口A和B,两个输出端口S u m和C a rry。由于没有定
义端口的位数, 所有端口大小都为1位;同时, 由于没有
各端口的数据类型说明, 这四个端口都是线网数据类型。

模块包含两条描述半加器数据流行为的连续赋值。

语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条
语句的执行顺序依赖于发生在变量A和B上的事件。
在模块中,可用下述方式描述一个设计:
1) 数据流方式;
2) 行为方式;
3) 结构方式;
4) 上述描述方式的混合。
下面几节通过实例讲述这些设计描述方式。不过有必要首先对Verilog HDL的时延作简要
介绍。
2.2 时延
Verilog HDL模型中的所有时延都根据时间单位定义。下面是带时延的连续赋值语句实
例。
a s s i g n #2 S u m = A ^ B;
# 2指2个时间单位。
使用编译指令将时间单位与物理时间相关联。这样的编译器指令需在模块描述前定义,
如下所示:
` timescale 1ns /100ps
此语句说明时延时间单位为1 n s并且时间精度为100ps (时间精度是指所有的时延必须被限定在
0 . 1 n s内)。如果此编译器指令所在的模块包含上面的连续赋值语句, #2 代表2 n s。
如果没有这样的编译器指令, Verilog HDL 模拟器会指定一个缺省时间单位。IEEE Ve r i l o g
HDL 标准中没有规定缺省时间单位。
2.3 数据流描述方式
用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋值
语句中,某个值被指派给线网变量。连续赋值语句的语法为:
a s s i g n [d e l a y] L H S n e t = RHS_ expression;
右边表达式使用的操作数无论何时发生变化, 右边表达式都重新计算, 并且在指定的时延后变
化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表达式
之间的持续时间。如果没有定义时延值, 缺省时延为0。
图2 - 2显示了使用数据流描述方式对2 - 4解码器电路的建模的实例模型。
图2-2 2-4解码器电路
第2章HDL指南5


获取帮助