来自 vhdl 程序员的 verilog 中的通用
Generic in verilog from a vhdl programmer
verilog 中泛型的等价物是什么?
例如
entity my_entity
generic(a : integer);
port(x : in std_logic; y out std_logic);
end entity my_entity;
通用的等价物是什么?
另外,if generate 和 for generate 的等价物是什么?
泛型在 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
这是一个如何使用 for 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
verilog 中泛型的等价物是什么? 例如
entity my_entity
generic(a : integer);
port(x : in std_logic; y out std_logic);
end entity my_entity;
通用的等价物是什么? 另外,if generate 和 for generate 的等价物是什么?
泛型在 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
这是一个如何使用 for 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