一: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 与always 语句结合使用
genvar i;
generate
for(i = 0; i <MCB_BYTE_WIDTH-1 ;i = i+1)
begin :data_shit
  always @( posedge wr_clk )
  begin
    if(i_h_sync )
    begin
      data_ram[i+1] <= data_ram[i];
    end
  end
end
endgenerate

2、gnerate for实现复制

genvar bufds_num;
   generate
      for ( bufds_num = 0; bufds_num < DATA_WIDTH ; bufds_num = bufds_num + 1)
      begin :ibufds_inst
            IBUFDS #(.DIFF_TERM("FALSE"),.IBUF_LOW_PWR("TRUE"), .IOSTANDARD("LVDS_25") 
         ) IBUFDS_inst00 (.O(dout[bufds_num]), .I(din_p[bufds_num]), .IB(din_n[bufds_num]));
    end
   
   endgenerate

2、 generate if 用法

parameter TRANS_FLAG = 1'b1;

generate
      if(TRANS_FLAG == 1'b1 )
        begin:trans_f
           always @( posedge rd_clk )
         begin
          if( rd_cnt >= cfg_rd_cnt-1 )
           rd_cnt <=4'd0;
          else
           rd_cnt <= rd_cnt + 1'b1;
         end  
         
         always @( posedge rd_clk )
         begin
          if((empty == 1'b0)&&(rd_cnt == 0))   
           rd_en <= 1'b1;
          else
           rd_en <= 1'b0;
         end
        end
       else
         begin
           always @( posedge rd_clk )
         begin
          if(empty == 1'b0)//(rd_cnt == 0)//&& )   
           rd_en <= 1'b1;
          else
           rd_en <= 1'b0;
         end
         
         always @( posedge rd_clk )
         begin
          if(num == (cfg_len-1)&&out_valid) //( )&&(rd_cnt == cfg_rd_cnt ) )
           begin
            num <= 5'd0;
           end
          else if(out_valid)//( rd_cnt == cfg_rd_cnt )
           begin
            num <= num + 1'b1;
           end
          else
           begin
            num <= num;
           end
          
         end
         
         always @( posedge rd_clk )
         begin
          if((num == 5'd0)&& out_valid )
           begin
            nt_dout <= rd_en;
           end
          else
           begin
            nt_dout <= 1'b0;
           end
         end
         
         always @( posedge rd_clk )
         begin
          nd_dout <= out_valid;
         
         end
         
         end
    endgenerate

 

二、参数传递

类似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

 

generate的更多相关文章

  1. 使用mvn archetype:generate生产maven工程,响应很慢

    经常到下列时就不往下走了. 解决方案: 1.不使用interactive mode方式,直接指定DarchetypeArtifactId 2.仍使用interactive mode方式,但增加参数 - ...

  2. [LeetCode] Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  3. LeetCode 22. Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  4. 【leetcode】Generate Parentheses

    题目简述: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...

  5. 在cmd命令行使用Maven Archetype插件 generate命令创建简单的java web项目

    前提: 1.下载apache-maven:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache ...

  6. No.022:Generate Parentheses

    问题: Given n pairs of parentheses, write a function to generate all combinations of well-formed paren ...

  7. iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)

    从2月14日开始,上传程序的同学可能会遇到提示上传失败的提示. 并且打开自己的钥匙串,发现所有的证书全部都显示此证书签发者无效. 出现以下情况: Failed to locate or generat ...

  8. How to generate UML Diagrams from Java code in Eclipse

    UML diagrams compliment inline documentation ( javadoc ) and allow to better explore / understand a ...

  9. maven archetype:generate 命令简化项目模板数量

    在maven里使用 mvn archetype:generate 来创建项目是十分方便的,但有时也不尽然.在网络不好时,从网络上加载 archetype-catalog.xml文件(http://re ...

  10. Generate Time Data(普通日期主数据)

    Note: While using this option you need to replicate the standard table into SAP HANA that is T005T, ...

随机推荐

  1. Kotlin语言学习笔记(4)

    函数 // 函数定义及调用 fun double(x: Int): Int { return 2*x } val result = double(2) // 调用方法 Sample().foo() / ...

  2. 常用类一一时间处理相关类一一java.util.Tomezone(java.util.Calendar , java.util.Date , java.text.DateFormat)

    时间处理相关类 时间是一个一维的东东.所以,我们需要一把刻度尺来区表达和度量时间.在计算机世界,我们把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一). ...

  3. Invoke,BeginInvoke的作用

    这两个方法主要是让给出的方法在控件创建的线程上执行 凡是使用BeginInvoke和Invoke调用的线程都是在UI主线程中执行的

  4. SciTE: 中文字符支持问题

    SciTE: 中文字符支持问题   SciTE(Scintilla Text Editor)是一个体积小巧的文本编辑器. 但是它默认的设置对中文字符处理不好,其实只要对它进行相应的配置,就可以了. 1 ...

  5. eclipse新建maven项目出现红叉解决办法

    新建的maven项目,项目内代码及pom.xml没有任何问题,但项目上就是有红叉,这时点开Markers(Window–>show veiw–>Markers),查看错误的详细信息,信息上 ...

  6. selenium IDE常用命令

    1.open(URL)命令                 1.作用:打开指定的URL,URL或者为相对或是绝对的URL                 2.target:要打开的URL,value值 ...

  7. count++线程安全与 synchronized对性能影响的测试

    一个计时器,同时开启100个线程,每个线程休眠1ms钟后,将全局静态变量count加1,这100个线程创建完之后,休眠500ms,计算总耗时,程序如下: public class Counter { ...

  8. 自动化预备知识上&&下--Android自动化测试学习历程

    章节:自动化基础篇——自动化预备知识上&&下 主要讲解内容及笔记: 一.需要具备的能力: 测试一年,编程一年,熟悉并掌握业界自动化测试工具(monkey--压力测试.monkeyrun ...

  9. PAT L3-008 喊山(广搜)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ...

  10. C++ define与const

    C++中不但可以用define定义常量还可以用const定义常量,它们的区别如下: 用#define MAX 255定义的常量是没有类型的,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常 ...