tag 标签: generate

相关博文
  • 热度 11
    2021-6-28 16:07
    3445 次阅读|
    0 个评论
    问题描述: Verilog使用Gnerate+for循环复用逻辑,在添加每个复用模块里的信号在ModelSim波形窗口进行观测的时候,发现添加失败。一般的添加信号do命令格式如下: add wave -noupdate -format Logic /cs_sortmerger_stack_tb/tb/scan_timesup_flag #add wave -noupdate -format Literal -radix hexadecimal /cs_sortmerger_stack_tb/stack_Inst/rdempty_l #add wave -noupdate -format Literal -radix hexadecimal /cs_sortmerger_stack_tb/stack_Inst/rdempty_r 但是如果是复用模块,那么do命令格式就是这样的: add wave -noupdate -format Literal -radix hexadecimal {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/sflag} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/empty1} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/empty2} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/rdreq1} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/rdreq2} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/rdreq1_reg} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/rdreq2_reg} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/merged_en1} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/merged_en2} add wave -noupdate -format Logic {/cs_sortmerger_stack_tb/tb/level1_merger /level1_merger_Inst/merged_en} 即信号部分必须使用大括号框起来。 另外,需要注意的是: generate语句本身产生的功能模块在ModelSim里面被识别为逻辑设计层次结构的一层,故在上述波形添加语句中“level1_merger”除了Inst一层外,上层还包裹了Generate实体一层,否则仿真的时候会提示找不到目标。
  • 热度 16
    2014-4-28 14:24
    1351 次阅读|
    0 个评论
    verilog2001中有generate这个语法,近日有用到,简单归纳如下: 语法: 1。genvar后面的for,变量必须是genvar变量;generate+if,不如`ifdef `else `endif; 2。for里必须有begin,哪怕只有一句; 3。begin必须有名称,原因见4; 4。这里例化的模块名称是inst .unit; 5。generate语句可以看作是标准化为块的综合指令。 应用实例: generate可以用for,case,if。其中,generate实例化多个器件很简洁。 案例 generate   genvar j ;   for(j=0;j=INST_NUM;j=j+1)   begin : inst       dff #(PARAMETER) unit(                                         .clk(clk),                                         .ena(ena),                                         .in(in),                                         .out(out)                                         ) ;  end endgenerate   generate还可以进行多个assign赋值! 案例 module anytest_v(     input clk,     input datain,     output dataout,     output finish     ); wire mem ; wire xxx; //reg i; generate       genvar i;       for(i=0;i=31;i=i+1)        begin :wiertech             assign mem = 8'b0;        end endgenerate endmodule    
  • 热度 15
    2014-3-8 18:14
    3997 次阅读|
    0 个评论
    Abtract     generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复。这些语句可以包括模块实例引用的语句、连续赋值语句、always语句、initial语句和门级实例引用语句等。细化时间是指仿真开始前的一个阶段,此时所有的设计模块已经被链接到一起,并完成层次的引用。 Introduction 1.generate语法 定义genvar,作为generate种的循环变量。 generate语句中定义的for语句,必须要有begin,为后续增加标签做准备。 begin必须要有名称,也就是必须要有标签,因为标签会作为generate循环的实例名称。 可以使用在generate语句中的类型主要有: ü  module(模块) ü  UDP(用户自定义原语) ü  门级原语 ü  连续赋值语句 ü  initial或always语句 基本结构如下: genvar 循环变量名; generate     // generate循环语句     // generate 条件语句     // generate 分支语句     // 嵌套的generate语句 endgenerate     下面将就generate常用的几种情况举例说明。 2. generate-loop循环语句   3.generate-conditional条件语句     generate允许对语句进行条件选择,即将条件选择加入到generate中的for循环中,只例化条件成立时对应的语句或者module。   4.generate-case分支语句     generate-case分支语句与generate-条件语句类似,只不过将原来的分支语句换做了case语句。   Conclusion     genvar与generate是Verilog 2001才有的,功能非常强大,可以配合条件语句、分支语句等做一些有规律的例化或者赋值等操作,对于提高简洁代码很有帮助,同时也减少了人为的影响。
相关资源