我们可以合成一个简单的通用内存吗?
Can we synthesis a simple generic memory?
我正在尝试在设计编译器中使用简单的通用内存模型进行综合。
但我发现一些错误信息如下,
我使用了如下简单的通用内存模型
module RAM_generic
(clk,
enb,
wr_din,
wr_addr,
wr_en,
rd_addr,
rd_dout);
parameter AddrWidth = 1;
parameter DataWidth = 1;
input clk;
input enb;
input signed [DataWidth - 1:0] wr_din;
input [AddrWidth - 1:0] wr_addr;
input wr_en;
input [AddrWidth - 1:0] rd_addr;
output signed [DataWidth - 1:0] rd_dout;
reg [DataWidth - 1:0] ram [2**AddrWidth - 1:0];
reg [DataWidth - 1:0] data_int;
always @(posedge clk)
begin
if (enb == 1'b1) begin
if (wr_en == 1'b1) begin
ram[wr_addr] <= wr_din;
end
data_int <= ram[rd_addr];
end
end
assign rd_dout = data_int;
endmodule
我想知道我们不能合成一个简单的通用内存吗?如果是,我应该如何合成通用内存合成错误?
是的,你可以。
在FPGA 中,单端口或双端口存储器将映射到内部存储器结构上。 (至少如果你使用正确的语法!查找 FPGA 应用说明如何做到这一点)
在 ASIC 中,它将由寄存器制成。几年前我需要一个小型三端口内存(两个读端口和一个写端口同时),结果很好。大多数 FIFO 中都有内存,其中 90% 由寄存器组成。
您的代码丢失 'endmodule'。我没有发现任何其他明显的错误。
一些提示:
- 使用 ((1 << AddrWidth) -1) 也适用于老式 Verilog。
- 我不会使用默认的 width/depth 1 作为记忆。你得到了 [0:0] 的构造,但如果8x8更有可能被使用。
- 不应对通用内存进行签名。按照惯例,通用内存是无符号的。
- 参数按照惯例全部大写。 (至少在我工作过的每家公司都是)
我正在尝试在设计编译器中使用简单的通用内存模型进行综合。
但我发现一些错误信息如下,
我使用了如下简单的通用内存模型
module RAM_generic
(clk,
enb,
wr_din,
wr_addr,
wr_en,
rd_addr,
rd_dout);
parameter AddrWidth = 1;
parameter DataWidth = 1;
input clk;
input enb;
input signed [DataWidth - 1:0] wr_din;
input [AddrWidth - 1:0] wr_addr;
input wr_en;
input [AddrWidth - 1:0] rd_addr;
output signed [DataWidth - 1:0] rd_dout;
reg [DataWidth - 1:0] ram [2**AddrWidth - 1:0];
reg [DataWidth - 1:0] data_int;
always @(posedge clk)
begin
if (enb == 1'b1) begin
if (wr_en == 1'b1) begin
ram[wr_addr] <= wr_din;
end
data_int <= ram[rd_addr];
end
end
assign rd_dout = data_int;
endmodule
我想知道我们不能合成一个简单的通用内存吗?如果是,我应该如何合成通用内存合成错误?
是的,你可以。
在FPGA 中,单端口或双端口存储器将映射到内部存储器结构上。 (至少如果你使用正确的语法!查找 FPGA 应用说明如何做到这一点)
在 ASIC 中,它将由寄存器制成。几年前我需要一个小型三端口内存(两个读端口和一个写端口同时),结果很好。大多数 FIFO 中都有内存,其中 90% 由寄存器组成。
您的代码丢失 'endmodule'。我没有发现任何其他明显的错误。
一些提示:
- 使用 ((1 << AddrWidth) -1) 也适用于老式 Verilog。
- 我不会使用默认的 width/depth 1 作为记忆。你得到了 [0:0] 的构造,但如果8x8更有可能被使用。
- 不应对通用内存进行签名。按照惯例,通用内存是无符号的。
- 参数按照惯例全部大写。 (至少在我工作过的每家公司都是)