生成块可以动态的生成Verilog代码。可以用于对矢量中的多个位进行重复操作、多个模块的实例引用的重复操作、根据参数确定程序中是否包含某段代码。生成语句可以控制变量的声明、任务和函数的调用、还能对实例引用进行全面的控制。在编程时,应用关键字generate_endgenerate来说明生成的实例范围。

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

1)模块 ;  2)用户定语原语 ; 3)门级原语 ;  4)连续赋值语句;   5)initial 和 always 块。

生成实例中语序的数据类型:

1)wire型 reg型;

2)integer型,real型,time型,realtime型;

3)event型。

生成的数据、实例、任务、函数都具有唯一的标识名,可以被层次引用。(任务和函数的声明可以出现在生成范围之中,但是不能出现在循环过程当中)

不允许出现在生成范围之中的模块项声明:

1)参数、局部参数;

2)输入、输出、输入/输出声明;

3)指定块。

在Verilog中有三种常见生成语句的方法:

1)循环生成;   2)条件生成;  4)case生成。

A)循环生成语句

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

1)变量声明;    2)模块;    3)用户定义原语、门级原语;  4)连续赋值语句;   5)initial 和 always 块。

例:用循环生成语句描述的脉动加法器

//本地生成一个门级脉动加法器

module ripple_adder(co,sum,a0,a1,ci);

parameter   N=4;

output  [N-1,0]   sum;

output  co;

input    [N-1,0] a0,a1;

input    ci;

wire  [N-1,0] carry        //本地线网生成语句

assign   carry[0] = ci;   //指定进位变量的第0位等于进位的输入

genvar i ;                    //声明临时变量,该变量只用于生成块的循环中,在确定的仿真代码中是不存在的。

generate

for( i=0; i<N; i=i+1)

begin:r_loop

wire t1,t2,t3;

xor  g1(t1, a0[i], a1[i]);

xor  g2(sum[i], t1, carry[i]);

and  g3(t2, a0[i], a1[i])

and  g4(t3, t1, carry[i])

or    g5(carry[i=1], t2, t3)

end

endgenerate

//根据上面的循环生成,Verilog编译器会自动生成以下相对层次实例名

//xor: r_loop[0].g1, r_loop[1].g1, r_loop[2].g1, r_loop[3].g1;

//       r_loop[0].g2, r_loop[1].g2, r_loop[2].g2, r_loop[3].g2;

//and:r_loop[0].g3, r_loop[1].g3, r_loop[2].g3, r_loop[3].g3;

//       r_loop[0].g4, r_loop[1].g4, r_loop[2].g4, r_loop[3].g4;

//or :  r_loop[0].g5, r_loop[1].g5, r_loop[2].g5, r_loop[3].g5;

//根据上面的生成实例用下面这些线网连接起来

//Nets:r_loop[0].t1, r_loop[0].t2, r_loop[0].t3;

//         r_loop[1].t1, r_loop[1].t2, r_loop[1].t3;

//         r_loop[2].t1, r_loop[2].t2, r_loop[2].t3;

//         r_loop[3].t1, r_loop[3].t2, r_loop[3].t3;

assign  co=carry[N];

endmodule

B)条件生成语句

条件生成语句类似于 if_else_if 的生成构造,该结构可以在设计模块中根据经过仔细推敲并确定表达式,有条件的调用以下结构:

1)模块;  2)用于定义的原语,门级原语;  3)连续赋值语句;  4)initial 或always 块。

C)case生成语句

case生成语句可以调用以下的结构:

1)模块;  2)用于定义的原语,门级原语;   3)连续赋值语句;  4)initial 或 always块。

由定义来看,在if 和 case的生成语句中,不能够声明变量。

Verilog学习笔记基本语法篇(七)········ 生成块的更多相关文章

  1. Verilog学习笔记基本语法篇(十二)········ 编译预处理

    h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...

  2. Verilog学习笔记基本语法篇(十一)········ 常用系统函数

    1)系统任务:$monitor   格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...

  3. Verilog学习笔记基本语法篇(九)········ 任务和函数

    task 和 function 说明语句分别用来定义任务和函数,利用任务和函数可以把函数模块分成许多小的任务和函数便于理解和调试.任务和函数往往还是大的程序模块在不同地点多次用到的相同的程序段.输入. ...

  4. Verilog学习笔记基本语法篇(十三)...............Gate门

    Verilog中已有一些建立好的逻辑门和开关的模型.在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述. 逻辑门: and (output,input,...) nand ( ...

  5. Verilog学习笔记基本语法篇(十)········ 常用系统函数

    $display 和 $write 任务 格式: $display (p1,p2,...,pn); $write (p1,p2,..,pn); 这两个函数和系统的任务作用是用来输出信息,即将参数p2到 ...

  6. Verilog学习笔记基本语法篇(八)········ 结构说明语句

    Verilog中的任何过程都可以属于以下四种结构的说明语句; 1) initial;  2) always;  3) task;   4) function; 1) initial说明语句: 一个程序 ...

  7. Verilog学习笔记基本语法篇(六)········ 循环语句

    在Verilog中存在着4种类型的循环语句,用来控制执行语句的执行次数. 1)forever语句: 连续执行的语句. 2)repeat语句:  连续执行n次的语句. 3)while语句:    执行语 ...

  8. Verilog学习笔记基本语法篇(五)········ 条件语句

    条件语句可以分为if_else语句和case语句两张部分. A)if_else语句 三种表达形式 1) if(表达式)          2)if(表达式)               3)if(表达 ...

  9. Verilog学习笔记基本语法篇(四)·········块语句

    块语句是指将两条或者两条以上的语句组合在一起,使其在格式上更像一条语句.块语句分为两种: 1)用begin_end语句,通常用来标识顺序执行的语句,用它标识的块称作顺序块: 2)用fork_join语 ...

随机推荐

  1. python接口测试-项目实践(三)数据的处理示例

    三 数据处理 枚举值的转换.如接口返回1-5,需转成对应的中文. typecap = findinfo_from_api(result, 'TypeCap') dictcap = {': '微盘'} ...

  2. python入门18 继承和多态

    继承:子类继承父类的属性和方法  class 子类名(父类1,父类2) 多态:子类重写父类的方法 判断对象是否是某个类的实例:  isinstance(object,class) 父类-汽车类 #co ...

  3. C++学习之【使用位操作符求素数分析】

    先放普通代码: #include <iostream> using namespace std; void getPrime_1() { const int MAXN = 100; boo ...

  4. IOS Xib使用

  5. POJ-1080 Human Gene Functions---类似LCS

    题目链接: https://cn.vjudge.net/problem/POJ-1080 题目大意: 给定两组序列,要你求出它们的最大相似度,每个字母与其他字母或自身和空格对应都有一个打分,求在这两个 ...

  6. Android笔记之 图片自由裁剪

    前言--项目中须要用到对用户头像的裁剪和上传功能.关于裁剪.一開始是想自己来做,可是认为这个东西应该谷歌有开发吧,于是一搜索官方文档.果然有.于是.就果断无耻地用了Android自带有关于照片的自由裁 ...

  7. 【洛谷5279】[ZJOI2019] 麻将(“胡牌自动机”上DP)

    点此看题面 大致题意: 给你13张麻将牌,问你期望再摸多少张牌可以满足存在一个胡的子集. 似乎ZJOI2019Day1的最大收获是知道了什么是胡牌? 一个显然的性质 首先我们要知道一个显然的性质,即对 ...

  8. [转]Android Studio启动时出现unable to access android sdk add-on list

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50563122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  9. C#多线程最简单Demo

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. linux学习(一)开始

    第一关 用u盘安装ubuntu, 大部份工作制作的安装U盘会失败,使用Win32DiskImager就行了,这个工具需要手动填写完整iso路径. 第二个问题 装完后发现乱码,连英文都乱码,不知道原因, ...