首页>>论坛 >>技术社区 >>OpenHW社区论坛 >>Coregen及ComplexIP
|
我要发帖  | 我要投票  | 我要回复  | 收藏
1

异步双口RAM的综合

版主: Jerry Fan  Terry_ni  玄剑  XUPteam 
异步双口RAM的综合
 

异步双口RAM的综合

    我写了一个异步的FIFO,里面包括一个异步双口RAM,用ModelSim仿真完全正确,但用Synplify综合时(选用Cyclone器件),却把RAM综合成了一大堆的LUT,无论怎么改都没法综合成Cyclone器件内的Block RAM。即使在Synplify里加了约束条件,仍然无济于事。
    现在发现问题主要是出在异步时钟上,读和写用同一个时钟能综合成Block RAM,但分别用两个异步的时钟就不行了。
    有高手能帮我想想办法吗?谢谢!
    另外申明一点:我虽然知道用Quartus做的话,点点鼠标就能拉一个FIFO出来了,但我还是想直接用代码写,而且要能够综合成器件内的Block RAM。
附:我现在试了以下两个代码,都不行
module FIFO1024_MEM (rdata, wdata, waddr, raddr, wclken, wclk);
   parameter DATASIZE = 4;        // Memory data word width
   parameter ADDRSIZE = 8;        // Number of memory address bits
   parameter DEPTH = 1<<ADDRSIZE; // DEPTH = 2**ADDRSIZE
   output[DATASIZE-1:0] rdata;
   input [DATASIZE-1:0] wdata;
   input [ADDRSIZE-1:0] waddr, raddr;
   input                wclken, wclk;
   reg [DATASIZE-1:0] MEM [0EPTH-1];
   assign rdata = MEM[raddr];
   always @ (posedge wclk)
         begin
              if (wclken)
                begin
                     MEM[waddr] <= wdata;
                end
         end
endmodule

module FIFO1024_MEM (rdata, wdata, waddr, raddr, wclken, rclken, wclk, rclk);
   parameter DATASIZE = 4;        // Memory data word width
   parameter ADDRSIZE = 8;        // Number of memory address bits
   parameter DEPTH = 1<<ADDRSIZE; // DEPTH = 2**ADDRSIZE
   output[DATASIZE-1:0] rdata;
   input [DATASIZE-1:0] wdata;
   input [ADDRSIZE-1:0] waddr, raddr;
   input                wclken, rclken, wclk, rclk;
   reg [DATASIZE-1:0] MEM [0EPTH-1];
   reg [DATASIZE-1:0] rdata;
   always @ (posedge wclk)
         begin
              if (wclken)
                begin
                     MEM[waddr] <= wdata;
                end
         end
   always @ (posedge rclk)
         begin
              if (rclken)
                begin
                     rdata <= MEM[raddr];
                end
         end
endmodule

 
相关主题
回复 链接 收藏
 
RE:异步双口RAM的综合
 
你把这些代码直接可以用quartusII综合呀,
像这么大块的的话即使不加约束,它也会自动综合在EAB里的。
 
回复 链接 收藏
 
RE:异步双口RAM的综合
 
顶一下,怎么解决呢
 
回复 链接 收藏
 
RE:异步双口RAM的综合
 
While Cyclone devices do not support asynchronous memory,
they do support a pseudo-asynchronous read operation where the output
data is available during the same clock cycle as when the read address is
driven into it.
M4K的RAM支持同步操作,不支持异步操作
 
回复 链接 收藏
 
RE:异步双口RAM的综合
 
要把ram推入blockrma的时候,语句是越简洁越好。
根据我的经历,两个always语句里(wclken),(rclken)只能出现一个。最主要的是要把那些条件、逻辑等主要写在例化后的bolckram之外来控制。
 
回复 链接 收藏
 
RE:异步双口RAM的综合
 
只要把if (rclken)去掉就可以了
 
回复 链接 收藏
 
RE:异步双口RAM的综合
 
高手还挺多,原来都藏龙卧虎着潜水呢?!谢了各位
 
回复 链接 收藏
 
我要发帖  | 我要投票  | 我要回复  | 收藏
1