一:generate
Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function,continous assignment,initial和always。在generate语句中可以引入if-else和case语句,根据条件不同产生不同的实例化。
用法:
1. generate语法有generate for, genreate if和generate case三种
2. generate for语句必须有genvar关键字定义for的变量
3. for 的内容必须加begin和end
4. 必须给for语段起个名字
例子:
1. generate for例子:
generate
genvar i; //generate 8 samll fifo for in_data[i] 8X72
for(i=0; i<NUM_QUEUES; i=i+1) begin: in_arb_queues //NUM_QUEUES = 8
small_fifo
#( .WIDTH(DATA_WIDTH+CTRL_WIDTH),
.MAX_DEPTH_BITS(2))
in_arb_fifo
(// Outputs
.dout ({fifo_out_ctrl[i], fifo_out_data[i]}),
.full (),
.nearly_full (nearly_full[i]),
.prog_full (),
.empty (empty[i]),
// Inputs
.din ({in_ctrl[i], in_data[i]}),
.wr_en (in_wr[i]),
.rd_en (rd_en[i]),
.reset (reset),
.clk (clk));
end // block: in_arb_queues
endgenerate
2.generate if例子:
generate
if (REG_WIDTH == WRITE_WIDTH) begin : new_data_a_generation
assign new_data_a = merge_update ? merge_wr_data : held_wr_data_a;
end
else begin
assign new_data_a = merge_update ?
{{(REG_WIDTH - WRITE_WIDTH - 1){merge_wr_data_sign}}, merge_wr_data} :
{{(REG_WIDTH - WRITE_WIDTH){held_wr_data_sign_a}}, held_wr_data_a};
end
endgenerate
3.generate还可以进行多个assign赋值!
module anytest_v(
input clk,
input[7:0] datain,
output[7:0] dataout,
output finish
);
wire[7:0] mem[31:0];
wire[32*8-1:0] xxx;
//reg[7:0] i;
generate
genvar i;
for(i=0;i<=31;i=i+1)
begin :wiertech
assign mem[i]= 8'b0;
end
endgenerate
endmodule
ps: 对于a[8*i+:8]
this is the so-called "Indexed vector part selects"
在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。
[base_expr +: width_expr] //positive offset
[base_expr -: width_expr] //negative offset
其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向上递减width_expr位。例如:
reg [63:0] word;
reg [3:0] byte_num; //a value from 0 to 7
wire [7:0] byteN = word[byte_num*8 +: 8];
如果byte_num的值为4,则word[39:32]赋值给byteN
二、参数传递
类似VHDL的Generic语句,Verilog也可以在例化时传递参数
传递的参数是子模块中定义的parameter。
传递的方法:
1、module_name #( parameter1, parameter2) inst_name( port_map);
2、module_name #( .parameter_name(para_value), .parameter_name(para_value)) inst_name (port map);
用#方法和port map的写法差不多
module multiplier (a, b, product);
parameter a_width = 8, b_width = 8;
localparam product_width = a_width+b_width;
input [a_width-1:0] a;
input [b_width-1:0] b;
output[product_width-1:0]product;
generate
if((a_width < 8) || (b_width < 8))
CLA_multiplier #(a_width, b_width) u1 (a, b, product);
else
WALLACE_multiplier #(a_width, b_width) u1 (a, b, product);
endgenerate
endmodule

Verilog中生成语句(generate)的用法相关推荐

  1. verilog中wire和reg的用法区别

    verilog中wire和reg的用法区别 wire(组合逻辑) reg(组合和时序逻辑) 可以相互替代的情况 看到一个文档,很详细的讲了wire和reg的区别,随便记录一下 wire(组合逻辑) w ...

  2. verilog 中生成块的相关知识

    介绍: 生成块可以动态地生成Verilog代码. 这一声明语句方便了参数化模块的生成.当对矢量中的多个位进行重复操作时,或者当进行多个模块的实例引用的重复操作时,或者在根据参数的定义来确定程序中是否应 ...

  3. Verilog中for语句的使用

    在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...

  4. verilog中assign语句

    /************************************** * Module: assign * Date:2014-08-10 * Author: hemmingway@163. ...

  5. verilog中for语句使用

     在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在T ...

  6. oracle中SQL语句ge的用法,Oracle中SQL语句的几种用法

    在诊断数据库系统性能的过程中,总会涉及到跟踪效率低下的SQL语句,Oracle数据库10g包含一种新的实用程序trcsess,它可以让您基于会话ID或模块名称之类的条件,有选择地从大量跟踪文件中抽取出 ...

  7. Verilog中for 语句怎么用

    类似C的环路结构如for-loop可能对学过C语言的人存在陷阱.其原因是在硬件语言中并没有隐含的寄存器这个条件,所以一般这些环路不可以在可综合代码中用来做算法迭代.在Verilog中,for循环一般用 ...

  8. Verilog 中signed和$signed()的用法

    1.在verilog中有时会用signed修饰符来修饰定义的数据,运算的时候也会用$signed()任务来强制转换数据,那么signed的修饰是为什么呢,是为了区分有符号数和无符号数的加法和乘法吗?其 ...

  9. mysql select语句最简_10个mysql中select语句的简单用法

    1.select语句可以用回车分隔 $sql="select * from article where id=1" 和 $sql="select * from artic ...

最新文章

  1. 网络系统传输负载测试
  2. Solr安装并导入mysql数据
  3. 重构智能合约(上):非确定性的幽灵
  4. HTTP/2 协议规范
  5. linux wait函数头文件_第五十八章、linux中的3种正常结束进程的方式你都了解么...
  6. iZotope系列音频软件如何卸载操作指南
  7. .net winform 里控件的Dock属性(Dock的Z 顺序停靠)
  8. HDU-1584蜘蛛牌
  9. threejs编辑器(3D场景编辑器)
  10. KEIL中加入GD设备文件
  11. 华为认证云计算HICA
  12. 选择性粘贴出现html,为什么我把EXCEL表中的一个数据复制,选择性粘贴会出现这个对话框?...
  13. DirectX12(D3D12)基础教程(十)——DXR(DirectX Raytracing)基础教程(上)
  14. 获取Unique reads方法
  15. 网站搭建之PHP安装教程
  16. linux看磁盘是sas还是sata吗,SAS和SATA硬盘傻傻分不清?看这里
  17. 千年鸿蒙盼尔来兮,古言爱情誓言
  18. NFS nfs4_reclaim_open_state lock reclaim failed
  19. matlab脚本文件求梯度,转:用MATLAB求梯度的二个实例
  20. 人工智能概念站上风口

热门文章

  1. 2021年春季学期-信号与系统-第十二次作业参考答案-第五小题
  2. 2021年春季学期-信号与系统-第二次作业参考答案-第七小题
  3. 2021-春季学习-智能车技术创新与实践-Lesson3
  4. 电网电压波形是否失真?
  5. 使用STC8G1K08制作调频接收模块TEA5767配置电路
  6. 什么是清华大学的“三好”学生?
  7. q函数表格怎么看_会计表格函数玩不会?超实用会计表格函数公式大全,财务人都在用...
  8. Linux卸载unity,你如何删除Unity?
  9. C 指针的有意思的描述
  10. python中的方法需要定义_Python中规范定义命名空间的一些建议