三防平板设计-Verilog HDL规范进阶
时间:2024-08-06 作者:乐凡信息 浏览:201

三防平板设计中更复杂的Verilog HDL语法知识,在使用专用的电子设计自动化(Electronic Design Automation,EDA)工具(比如西门子公司的Modelsim软件)对高云FPGA进行仿真时会涉及这些语法规则。本章内容主要包括Verilog HDL用户自定义原语、Verilog HDL指定块、Verilog HDL时序检查、Verilog HDL SDF逆向注解和Verilog HDL的VCD文件。

通过学习本章所介绍的Verilog HDL语法,可以帮助读者进一步理解和掌握FPGA时序仿真的原理,以及仿真参数的设置规则。


一、 三防平板设计中Verilog HDL用户自定义原语

本节描述了一种建模计数,通过设计和指定称为用户定义原语(User Defined Primitive,UDP)的新元素来扩充预定义的门原语集。这些新UDP的实例可以与门原语完全相同的方式使用,以表示正在建模的电路。

在UDP中可以表示以下两种类型的行为。

(1)组合:由组合UDP建模。

(2)时序:由时序UDP建模。

组合UDP使用其输入的值来确定其输出的下一个值。时序UDP使用其输入的值和输出的当前值来确定其输出的值。时序UDP提供了一种对诸如触发器和锁存器之类的时序电路进行建模的方法。时序UDP可以对电平敏感和边沿敏感行为进行建模。

每个UDP只有一个输出,可以处于三种状态之一:0、1或x。不支持三态值z。在时序UDP中,输出总是具有与内部状态相同的值。传递给UDP的z值应该与x值相同。


二、 三防平板设计中UDP定义

UDP定义独立于模块,它们与语法层次结构中的模块定义处于相同级别。它们可以出现在源文件文本中的任何位置,但不可出现在关键字module和endmodule之间。

实现可能会限制模型中UDP定义的最大数量,但允许至少256个。

UDP的语法格式如下:

其中,OutputName为输出端口名;UDP_name为UDP的标识符;List_of_inputs为用“,”分割的输入端口的名字;output_delaration为输出端口的类型声明;input_declarations为输入端口的类型声明;reg_declaration为输出寄存器类型数据的声明(可选);initial_statement为元件的初始状态声明(可选);table和endtable为关键字;list_of_table_entries为表项1到n的声明。

UDP的定义独立于模块定义。因此,UDP定义出现在模块定义以外。此外,也可以在单独的文本文件中定义UDP。注:(1)UDP包含输入和输出端口声明。其中,输出端口声明以关键字ouput开头,后面跟随输出端口的名字;输入端口声明以关键字input开头,后面跟随输入端口的名字;时序UDP,包含用于输出端口的reg声明,可以在时序UDP的initial语句中指定输出端口的初始值;实现过程限制了UDP的输入端口个数,允许时序UDP可以至少有9个输入端口,组合UDP可以至少有10个输入端口。

(2)UDP的行为以列表的形式给出。以table关键字开始,以endtable关键字结束。


1.三防平板设计中UDP头部

UDP定义具有两种形式。第一种形式,以关键字原语开头,后跟一个标识符,该标识符为UDP的名字。然后是一个逗号分隔的端口名字列表,该列表用括号括起来,后面跟着一个分号。UDP定义头部后面跟有端口声明和状态表。UDP定义以关键字endprimitive结束。

第二种形式,以关键字原语开头,后跟一个标识符,该标识符为UDP的名字。然后是一个逗号分隔的端口声明列表,该列表用括号括起来,后跟分号。UDP定义头部后面跟有一个状态表。UDP定义以关键字endprimitive结束。

UDP具有多个输入端口和一个输出端口。UDP上不允许双向inout端口。UDP的所有端口应为标量,不允许为矢量端口。注意,输出端口应为端口列表中的第一个端口。


2.三防平板设计中UDP端口声明

UDP应包含输入和输出端口声明。输出端口声明以关键字output开头,后跟一个输出端口名字。输入端口声明以关键字input开头,后跟一个或多个输入端口名字。

当使用第一种形式的UDP头部声明UDP时,除输出声明外,时序UDP还应包含输出端口的reg声明,三防平板设计中或者作为输出声明的一部分。组合UDP不能包含reg声明。输出端口的初值可以在时序UDP中的初始语句中指定。

实现可能会限制UDP的最大输入数量,但它们应允许时序UDP至少有9个输入,组合UDP至少有10个输入。


3.三防平板设计中时序UDP初始化语句

时序UDP初始语句指定仿真开始时输出端口的值,该语句以关键字initial开头。下面的语句应该是一个赋值语句,它

为输出端口分配一个单比特文字值。


4.三防平板设计中状态表

状态表定义UDP的行为,它以关键字table开始,以关键字endtable结束。表中的每一行都以分号结尾,表中的每一行都使用各种字符创建,如表1.1所示。这些字符表示输入值和输出状态。支持三种状态,即0、1和x。在UDP中,明确排除z状态。表中定义了许多特殊字符来表示状态可能性的某些组合。

表1.1 UDP表中符号的含义

状态表每行的输入状态字段的顺序直接取决于UDP定义头部的端口列表,它与输入端口声明无关。

组合UDP的每个输入都有一个字段、输出有一个字段。输入字段与输出字段之间用冒号(:)分割。每一行定义输入值的特定组合的输出。

时序UDP在输入字段和输出字段之间插入了一个额外的字段。该额外字段表示UDP的当前状态,并考虑为当前输出值的等效。它由冒号分割。每一行都根据当前状态、输入值的特定组合以及最多一个输入跳变来定义输出。下面一行是非法的:

(01)(10)0:0:1;

如果所有输入值都指定为x,则输出状态应指定为x。

没有必要明确指定每个可能输入组合。未明确指定的输入值的所有组合都会导致默认输出状态x。

三防平板设计中为不同的输出指定相同的输入组合(包括边沿)是非法的。