【问题标题】:Generic in verilog from a vhdl programmer来自 vhdl 程序员的 verilog 中的泛型
【发布时间】:2016-07-27 20:51:30
【问题描述】:

verilog 中泛型的等价物是什么? 例如

entity my_entity
generic(a : integer);
port(x : in std_logic; y out std_logic);
end entity my_entity;

泛型的等价物是什么? 还有 if generate 和 for generate 的等价物是什么?

【问题讨论】:

    标签: syntax vhdl verilog


    【解决方案1】:

    泛型在 Verilog 中称为参数。它们在模块中通过如下行声明:

    parameter DATA_WIDTH = 8;
    parameter ADDR_WIDTH = 8;
    

    实例化可以单独细化参数值:

    my_ram_impl #( 
      .DATA_WIDTH(16), 
      .ADDR_WIDTH(8)
    )
    ram_instance(
      .clk(clk),
      .addr(addr),
      .data(data),
      .cs(cs),
      .we(we)
    ); 
    

    使用这些类似于 C 的指令进行条件综合:

    `ifdef  SYM
       ...
    `else
       ...
    `endif
    

    或者,更灵活的 generate 构造如下:

    generate
      if(cond)
        ...
      else
        ...
    endgenerate
    

    【讨论】:

      【解决方案2】:

      这是一个如何使用 generate 实例化模块的示例,在本例中为 core_top。 NCORE 是父模块的参数或指定要实例化的核心数量的本地参数。

        wire clk;
        wire [31:0] data_from_core[0:NCORES-1];
      
        genvar core;
        generate
          for (core=0; core < NCORES; core=core+1) begin : core_gen
               core_top
                  #(.CORE_ID  (core),
                    .NCORES   (NCORES))
                 u_fpgaminer_top
                   (.clk_in          (clk),
                    .data_out        (data_from_core[core]));
            end
        endgenerate
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 2011-03-10
        相关资源
        最近更新 更多