lljlljlzh1

生成块

0
阅读(4617)

生成语句可以动态的生成Verilog代码。这一声明语句方便了参数化模块的生成。当对矢量中的多个位进行重复操作时,或者当进行多个模块的实例引用的重复操作时,或者在根据参数的定义来确定程序中是否应该包括某段Verilog代码的时候,使用生成语句能够大大的简化程序的编写过程。

 

生成语句能够控制变量的声明,任务或函数的调用,还能对实例进行全面的控制,编写代码是必须在模块中说明生成的实例范围,关键字generate-endgenerate 用来指定该范围。

 

生成实例可以是以下的一个或多个类型

(1) 模块;

(2) 用户定义原语;

(3) 门级原语;

(4) 连续赋值语句;

(5) initial和always块。

 

Verilog允许在生成范围内声明下列数据类型:

(1) net,reg;

(2) integer,real,time,realtime;

(3) event;

生成的数据类型具有唯一的标识名,可以被层次引用。

注意: 生成范围中定义的defparam语句所能够重新定义的参数必须是在同一个范围内,或者是在生成范围的层次实例当中。

任务和函数的声明允许出现在生成范围之中,但是不能出现在循环生成当中

 

Verilog不允许在生成范围内模块声明包括:

(1) 参数,局部参数;

(2) 输入,输出,和输入/输出声明;

(3) 指定块;

生成模块实例的连接方法与常规模块实例相同。

 

在Verilog中有三种创建生成语句的方法

{1} 循环生成;

(2) 条件生成;

(3) case生成;

 

循环生成语句

循环生成语句允许使用者对下面的模块或者模块项进行多次实例引用;

(1) 变量声明;

(2) 模块;

(3) 用户定义原语,门级原语;

(4) initial和always;

(5) 连续赋值语句;

 

 

 条件生成语句

条件生成语句类似语if_else_if的生成构造,该结构可以在设计模块中经过仔细推敲并确定表达式,有条件的调用(实例引用)以下这些Verilog结构:

(1) 模块;

(2) 用户定于的原语,门级原语;

(3) 连续赋值语句;

(4) initial或always块;

 

case生成语句

case生成语句可以在设计模块中,根据仔细推敲确定多选一case构造,有条件的调用(实例引用)下面这些Verilog:

(1) 模块;

(2) 用户定于的原语,门级原语;

(3) 连续赋值语句;

(4) initial或always;