Memory 我们能合成一个简单的通用内存吗?

Memory 我们能合成一个简单的通用内存吗?,memory,verilog,synthesis,Memory,Verilog,Synthesis,我试图在设计编译器中使用简单的通用内存模型进行综合 但我确实发现一些错误消息如下所示 我使用了简单的通用内存模型,如下所示 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

我试图在设计编译器中使用简单的通用内存模型进行综合

但我确实发现一些错误消息如下所示

我使用了简单的通用内存模型,如下所示

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
模块RAM\u通用
(时钟,
enb,
西丁,
地址:,
嗯,,
地址:,
(三),;
参数AddrWidth=1;
参数DataWidth=1;
输入时钟;
输入enb;
输入有符号[DataWidth-1:0]wr_din;
输入[AddrWidth-1:0]wr_addr;
输入wr_en;
输入[AddrWidth-1:0]rd_addr;
输出有符号[DataWidth-1:0]rd_dout;
reg[DataWidth-1:0]ram[2**AddrWidth-1:0];
reg[DataWidth-1:0]数据\u int;
始终@(posedge clk)
开始
如果(enb==1'b1)开始
如果(wr_en==1'b1)开始
ram[wr_addr]是的,你可以

在FPGA中,单端口或双端口存储器将映射到内部存储器结构上。(至少如果您使用了正确的语法!请查找FPGA应用程序说明如何做到这一点)

在ASIC中,它将由寄存器构成。几年前,我需要一个小的三端口内存(两个读端口和一个写端口同时进行),结果很好。大多数FIFO都有内存,其中90%由寄存器构成

您的代码缺少“endmodule”。我没有发现任何其他明显的错误

一些提示:


  • 使用((1谢谢,我只是想知道,使用xilinx的coregen和使用RAM_generic(推断RAM,通过hdl编码)生成的FPGA生成的单端口或双端口内存有什么区别)如果你做得对,什么都不会!事实上,它使模拟变得非常、非常容易,因为你不必使用Xilinx模型。我们过去自己制作模拟模型,以确保模拟模型与FPGA内存匹配。至于确保两者都与真正的ASIC内存匹配,则是另一项主要的验证任务!