一: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例子:


genvar S_i;
generate
for(S_i=0;S_i<C_COEF_NUM;S_i=S_i+1)   //parallel calculation  并行计算
begin:test
wire [C_PRIMPOLY_ORDER-1:0] S_para1;
reg [C_DWIDTH-1:0] S_para2;
localparam C_POLY = C_GEN_POLY [S_i*C_PRIMPOLY_ORDER+:C_PRIMPOLY_ORDER];//每次15bit,从低位到高位
localparam C_UPP  = C_GEN_UPP  [S_i*C_UPP_WIDTH+:C_UPP_WIDTH]-1;//每次4bit,从低位到高位 C_UPP = 14always @(posedge I_clk)beginif(I_rst)S_para2 <= 'd0;else S_para2 <= I_data;endassign S_para1 = S_data_sof ? 'd0 : S_reg[S_i];always @(posedge I_clk)beginif(S_data_v) begin       S_reg[S_i] <= F_reg_update(S_para1,S_para2,C_POLY,C_UPP);end endend
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 generate语法总结

    一.语法介绍 generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复.这些语句可以包括模块实例引用的语句.连续赋值语句.always语句.initial语句和门级 ...

  2. (25)Verilog HDL循环语句:forever

    (25)Verilog HDL循环语句:forever 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:forever 5)结语 1.2 ...

  3. (26)Verilog HDL循环语句:repeat

    (26)Verilog HDL循环语句:repeat 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:repeat 5)结语 1.2 FP ...

  4. (27)Verilog HDL循环语句:while

    (27)Verilog HDL循环语句:while 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:while 5)结语 1.2 FPGA ...

  5. (28)Verilog HDL循环语句:for

    (28)Verilog HDL循环语句:for 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL循环语句:for 5)结语 1.2 FPGA简介 F ...

  6. C语言的for循环转verilog,Verilog for 循环语句

    Verilog for 循环语句 在Verilog 语法中,定义了多种循环语句,其中for是应用最广泛的一种语句,不仅可以在顺序语句中使用,在并发语句中也有相应的模型.for 循环语句可以用在实体模块 ...

  7. verilog generate 生成语句

    循环生成 1.generate不放在always块中,而是always块等包含在generate中. 2.generatefor 的名字放在for的begin后面,不要忘记加: 3.task不能放在g ...

  8. verilog for循环_HDLBits:在线学习 Verilog (二十四 · Problem 115-119)

    本系列文章将和读者一起巡礼数字逻辑在线学习网站 HDLBits 的教程与习题,并附上解答和一些作者个人的理解,相信无论是想 7 分钟精通 Verilog,还是对 Verilog 和数电知识查漏补缺的同 ...

  9. Verilog HDL——循环语句

    循环语句 Verilog HDL中4种循环语句 for循环:指定循环次数 while循环:设置循环条件 repeat循环:连续执行语句N次 forever循环:连续执行某条语句(不可综合,多用于仿真激 ...

最新文章

  1. AI 还原宋代皇帝,原来这么帅?!
  2. 《数据结构与算法 C语言版》—— 3.8习题
  3. Linux系统基础知识整理
  4. 11. jsp与servlet之间页面跳转及参数传递实例
  5. 乘法器的verilog实现(并行、移位相加、查找表)
  6. 部署用于生产的Exceptionlees(一个强大易用的日志收集服务)
  7. vue组件样式scoped
  8. 最小化安装CentOS-7-x86_64-Minimal-1511图文教程
  9. 技校计算机程序设计,如何编写技工学校计算机程序设计课程校本教材
  10. 【论文译文】BigGAN
  11. vs 安装qtaddin_VS2015安装Qt5的Add-in的问题与解决方案【记录贴】
  12. Photoshop透明度网格颜色设置方法
  13. “软件工程”学习笔记、复习资料
  14. 2021年浏阴一中高考成绩查询,2021年湖南高考最高分多少分,历年湖南高考状元
  15. OpenCms 带分页的新闻列表
  16. Mysql 1022
  17. PlantUML 用代码画思维导图,时序图,流程图
  18. 金属学与热处理(第二版)课后习题答案
  19. c语言编程节日祝福,2019程序员祝福语 程序员节祝福语
  20. 超级兔子收到“搜狗公司”来信

热门文章

  1. 如何在Pycharm内打开.xlsx文件
  2. [Centos]Centos7升级内核版本
  3. 一分钟快速理解CDN加速原理
  4. python中那些双下划线开头得函数和变量
  5. VisualStudio 调试 添加命令行参数
  6. webdriver配置
  7. 搭档之家:瑞幸退市后竟比之前还火!回光返照还是要卷土重来?
  8. Temporal介绍
  9. 【MySQL】47 条SQL语句性能优化策略
  10. activiti简单的方式设置流程下一个节点的处理人