Verilog中generate语句的用法
在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计提供了方便,generate语句一般在循环和条件语句中使用,为此,Verilog-2001增加了四个关键字generate,endgenerate, genvar, localparam,genvar是一个新增的数据类型,用在generate的循环中的标尺变量必须定义为gnevar类型;
下面举例说明generate的用法:
首先设计一个1bit位宽的buffer_1:
//1bit width buffer_1module buffer_1(input wire in,output wire out);assign out = ~in;endmodule
在buffer_8中例化buffer_1 8次,这里有几点需要注意:
- 循环变量i必须是genvar类型的,不可以是reg型,integer型;
- for循环之后的的begin最好加上一个标号(BLOCK1);
//8bit width buffermodule buffer_8(input wire[7:0] din,output wire[7:0] dout);// Generate blockgenvar i;generatefor(i=0; i<8; i=i+1) begin:BLOCK1buffer_1 buffer_1_1(.in(din[i]), .out(dout[i]));endendgenerateendmodule
这里给出了一个简单的顶层:
//testbenchmodule buffer_8_tb;// reg & wire define areareg [7:0] din;wire[7:0] dout;// Instance the DUTbuffer_8 buffer_8_1(.din (din ),.dout (dout ));// Generate the stimulateinitial begindin = 8'd7;#10; din = 8'd6;#10; din = 8'd4;#10; din = 8'd7;#10; $finish();endendmodule
在generate语句中可以出现以下三种语句:
(1)generate...loop循环语句
(2)generate...case分支语句
(3)generate...conditional条件语句
generate语句的格式如下:
generate
//generate...loop循环语句//generate...case分支语句//generate...conditional条件语句//嵌套的generate语句
endgenerate
1.generate循环语句
generate循环语句被用于(verilog编译)细化阶段的语句复制,允许对结构元素编写一个for循环,下面的例子是一个N位异或门。
module nbit_xor#(parameter SIZE=16)(input(SIZE-1:0) a,b,output[SIZE-1:0] y);genvar gv_i;generatefor(gv_i=0;gv_i<SIZE;gv_i++)begin:sblkaxor uxor(y[gv_i],a[gv_i],b[gv_i]);endendgenerate
endmodule
for循环中使用的循环变量gv_i被称为genvar变量,这种变量必须用genvar来声明,并且只能在generate循环语句中使用;此外,generate块需要标签,用来表示循环的实例化名称,在上例中是sblka.
2.generate-conditional条件语句
generate条件语句允许在细化期间对语句进行条件选择。generate条件语句最常见的格式如下:
if(condition)statements
elsestatements
condition必须是一个静态的条件,即在细化期间计算的出。statements可以是任何能够在模块中出现的语句,例如always语句。注意,由于条件的值可能取决于从上层模块中传递过来的参数,因此条件的值可能不能再细化期间被完全算出来。下面举一个用generate条件形式的例子:
module adder#(parameter SIZE=4)(input[SIZE-1:0] a,b,output[SIZE-1:0] sum,output carry_out);wire [SIZE-1:0] carry;genvar gv_k;generatefor(gv_k=0;gv_k<SIZE;gv_k++)begin: gen_blk_adderif(gv_k == 0)half_adder u_ha (.a(a[gv_k]),.b(b[gv_k]),.sum(sum[gv_k]),.carry_out(carry[gv_k]),);elsefull_adder u_ha (.a(a[gv_k]),.b(b[gv_k]),.sum(sum[gv_k]),.carry_in(carry[gv_k-1]),.carry_out(carry[gv_k]),);endendgenerate
endmodule
3.generate-case分支语句
generate分支语句与条件语句类似,只不过分支语句是用分支来进行条件选择,给出下面的例子:
module adder#(parameter SIZE=4parameter IMPLEMENTATION_LEVEL=0)(input[SIZE-1:0] arg1,arg2,output[SIZE-1:0] result,);generatecase(IMPLEMENTATION_LEVEL)0: assign result=arg1+arg2;1:.....;2:.....;3:.....;default:......;endgenerate
endmodule
Verilog中generate语句的用法相关推荐
- verilog中generate语句的使用
原文地址:https://blog.csdn.net/qq_38428056/article/details/84821982 至芯科技的书上看到的,觉得还行吧,给大家分享一下. 一.为什么学习gen ...
- Verilog 之 generate语句块用法
文章目录 一.generate-for-复制模块 二.generate-if-判断模块 三.generate-case-判断模块 genvar与generate是Verilog 2001才有的, ...
- Verilog中generate语法和作用
Verilog中generate语句的用法 在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计 ...
- Verilog中generate用法总结
Verilog中generate用法总结 1.generate-for 2.generate-if 3.generate-case 生成语句可以动态的生成verilog代码,当对矢量中的多个位进行 重 ...
- Verilog中generate的用法
Generate 语句基本概念 generate 语句可以动态地生成 Verilog 代码,常用于编写许多结构相同但参数不同的赋值语句或逻辑语句,方便参数化模块的生成.generate 语句主要有以下 ...
- Verilog中generate的使用
目录 generate的结构类型 1.generate循环结构 2.条件if-generate构造 3.条件case-generate构造 4.断言和形式验证 5.层次化访问生成的模块 总结 Veri ...
- python中break怎么用_详解Python中break语句的用法
详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...
- Verilog中生成语句(generate)的用法
一:generate Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function, ...
- Verilog:generate-for 语句(用法,及与for语句区别)
文章目录 Abtract 1.generate语法 2.generate常用的几种情况举例说明 1). generate-for循环语句 2).generate-conditional条件语句 3). ...
最新文章
- HDU 1155 Bungee Jumping
- Android 移植到 C#
- Python+Appium+POM实现APP端自动化测试
- 学校管理系统逻辑关系
- Win10 ancona傻瓜安装tensorflow-gpu,ancona傻瓜安装pytorch-gpu
- windows 2008R2 无法安装操作系统补丁,或无法安装Sp1升级包的解决办法
- CSS3实现侧边栏快速定位的隐藏和消失
- 中嵌协会 第1期“嵌入式与物联网”主题论坛将于2010年6月26日在中关村软件园举行...
- 快速迭代的开发方式中的QA实践方法
- 设置编译out_matlab2017a与 CCS 6.2联调设置
- textarea在IE中和FF下不同的效果
- Python3学习日志 函数参数
- 蓝桥杯2019年第十届C/C++省赛A组第三题-最大降雨量
- Illustrator中文版教程,如何在AI中以不同的方式组合形状?
- MAF:Mutation Annotation Format格式简介
- JAVA系列---项目打包部署
- 谷歌浏览器不能用_正在用 Chrome 或 Edge 浏览器的你,不能错过这亿个好用插件...
- 计算机cpu 显卡的作用是什么,显卡的作用是什么 显卡简介【图文详解】
- flash 火狐总是崩溃_火狐浏览器flash插件崩溃怎么办?解决firefox经常出现Adobe Flash 插件已崩溃方法...
- Jenkins企业应用