来自VHDL程序员的Verilog中的泛型

use*_*759 5 syntax verilog vhdl

verilog中的泛型等效什么?例如

entity my_entity
generic(a : integer);
port(x : in std_logic; y out std_logic);
end entity my_entity;
Run Code Online (Sandbox Code Playgroud)

泛型相当于什么?还有if生成和for生成的等效项是什么?

Tho*_*ser 6

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

parameter DATA_WIDTH = 8;
parameter ADDR_WIDTH = 8;
Run Code Online (Sandbox Code Playgroud)

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

my_ram_impl #( 
  .DATA_WIDTH(16), 
  .ADDR_WIDTH(8)
)
ram_instance(
  .clk(clk),
  .addr(addr),
  .data(data),
  .cs(cs),
  .we(we)
); 
Run Code Online (Sandbox Code Playgroud)

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

`ifdef  SYM
   ...
`else
   ...
`endif
Run Code Online (Sandbox Code Playgroud)

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

generate
  if(cond)
    ...
  else
    ...
endgenerate
Run Code Online (Sandbox Code Playgroud)