在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2464|回复: 4

[求助] 请问从这样的SRAM模型设计出来的控制逻辑能正确吗?

[复制链接]
发表于 2012-10-15 02:21:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
就是这样的一个模型,我是要实现一个能用的接口和计算模块。
但是听说真实的存储器access latency和delay都是更复杂,我就怕设计来设计去,综合后的电路无法和真正SRAM的读写时许匹配。。。
请问如下的简单模型能用吗?

module SRAM (Address, Data, CS, WE, OE);

parameter AddressSize = 12;
parameter WordSize = 8;

input [AddressSize-1:0] Address;
inout [WordSize-1:0] Data;
input CS, WE, OE;
integer i;
reg [WordSize-1:0] Mem [0:1<<AddressSize];
initial
begin
  $readmemb("C:/Users/Administrator/Desktop/sram.txt", Mem);
  for(i=0;i<8;i=i+1)
    $display("Mem=%b",Mem[i]);
end

assign Data = (!CS && !OE) ? Mem[Address] : {WordSize{1'bz}} ;  // Very important, don't forget this "z"

always @(CS or WE)
  if (!CS && !WE)             // CS, WE, OE are all active low
    Mem[Address] = Data;

always @(WE or OE)
  if (!WE && !OE)
    $display("Operational error in RamChip: OE and WE both active");

endmodule
发表于 2012-10-15 09:46:55 | 显示全部楼层
既然是模型,那是拿来仿真用的,怎么还会去做综合????

综合的时候设置为black box;
发表于 2012-10-15 10:32:39 | 显示全部楼层
这个综合没问题,只是没有时钟来控制,为非同步信号,到时要注意下控制信号和数据之间的时间关系之类的,
我给你发个我用的SRAM,综合仿真都没有问题,简单例化下就行,需要同步时钟的。





  1. module se_perf_ram1p (
  2.      addr,
  3.      clk,
  4.      din,
  5.      dout,
  6.      en,
  7.      we
  8. );
  9. // -----------------------------------------------------------------------------
  10. // Parameters
  11. // -----------------------------------------------------------------------------
  12. parameter WD = 8;       // Width of RAM
  13. parameter PW = 12;      // Size of address
  14. parameter DP = (1<<PW); // Depth of RAM (default is power of 2)
  15. parameter RDSYNC = 1;

  16. input [PW-1:0] addr;
  17. input          clk;
  18. input [WD-1:0] din;
  19. input          en;
  20. input          we;
  21. output [WD-1:0] dout;

  22. reg [WD-1:0]            mem [0:DP-1];   // The memory array
  23. reg [WD-1:0]            dout;


  24. // Writes
  25. always @(posedge clk)
  26. begin
  27.      if (en & we)
  28.          mem[addr]       <= #(`TP) din;
  29.      // synopsys translate_off
  30.      if ((addr >= DP) & (DP > 0))
  31.          $display("%t: Memory (%m) write address error. Address is %x, Max is %x", $time, addr, DP-1);
  32.      // synopsys translate_on
  33. end

  34. // Reads
  35. always @(posedge clk)
  36. begin
  37.      if (en)
  38.          dout            <= #(`TP) mem[addr];
  39.      // synopsys translate_off
  40.      if ((addr >= DP) & (DP > 0))
  41.          $display("%t: Memory (%m) read address error. Address is %x, Max is %x", $time, addr, DP-1);
  42.      // synopsys translate_on
  43. end

  44. endmodule
  45. // leda on



复制代码
 楼主| 发表于 2012-10-15 23:28:30 | 显示全部楼层
谢谢二位回复。
我不是要综合SRAM,而是要设计SRAM以外的电路,比如把SRAM的数据读出来,处理完再存回去。
由于我从来没有用过SRAM,也头一次要设计综合后可用的“真的”设计(不是行为级),心里怕设计出来的东西综合后和真实的SRAM时序不搭配(也就是说即使能综合,功能上却不正确)。
发表于 2012-10-16 14:01:08 | 显示全部楼层
那你找一个能用的SRAM 泡一泡 看看时序不就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-15 04:39 , Processed in 0.023640 second(s), 10 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表