原创 verilog model of IS61LV25616 (SRAM)

2008-8-13 22:40 7780 5 7 分类: FPGA/CPLD

 IS61LV25616 是常用的SRAM点击看大图


点击看大图


找到一个model文件如下:


// IS61LV25616 Asynchronous SRAM, 256K x 16 = 4M; speed: 10ns.
// Note; 1) Please include "+define+ OEb" in running script if you want to check
//          timing in the case of OE_ being set.
//       2) Please specify access time by defining tAC_10 or tAC_12.


`define OEb
`define tAC_10     //tAC_10 or tAC_12 defines different parameters
`timescale 1ns/1ns


module IS61LV25616 (A, IO, CE_, OE_, WE_, LB_, UB_);


parameter dqbits = 16;
parameter memdepth = 262143;
parameter addbits = 19;
parameter Toha  = 2;


parameter Tsa   = 2;


`ifdef tAC_10         //if "`define tAC_10 " at beginning,sentences below are compiled
  parameter Taa   = 10,
            Thzce = 3,
          Thzwe = 5;
`endif


`ifdef tAC_12        //if "`define tAC_12 " at beginning,sentences below are compiled
  parameter Taa   = 12,
          Thzce = 5,
          Thzwe = 6;
`endif


input CE_, OE_, WE_, LB_, UB_;
input [(addbits - 1) : 0] A;
inout [(dqbits - 1) : 0] IO;
 
wire [(dqbits - 1) : 0] dout;
reg  [(dqbits/2 - 1) : 0] bank0 [0 : memdepth];  
reg  [(dqbits/2 - 1) : 0] bank1 [0 : memdepth];
//array to simulate SRAM
// wire [(dqbits - 1) : 0] memprobe = {bank1[A], bank0[A]};


wire r_en = WE_ & (~CE_) & (~OE_);   //WE=1,CE=OE=0 Read
wire w_en = (~WE_) & (~CE_) & ((~LB_) | (~UB_)); //WE=CE=0,LB or UB="0",OE=x Write
assign #(r_en ? Taa : Thzce) IO = r_en ? dout : 16'bz;  


initial
  $timeformat (-9, 0.1, " ns", 10); //show current simulation time


assign dout [(dqbits/2 - 1) : 0]        = LB_ ? 8'bz : bank0[A];
assign dout [(dqbits - 1) : (dqbits/2)] = UB_ ? 8'bz : bank1[A];


always @(A or w_en)
  begin
    #Tsa    //address setup time
    if (w_en)
      #Thzwe
      begin
 bank0[A] = LB_ ? bank0[A] : IO [(dqbits/2 - 1) : 0];
 bank1[A] = UB_ ? bank1[A] : IO [(dqbits - 1)   : (dqbits/2)];
      end
  end
 
// Timing Check
`ifdef tAC_10
  specify        //sepcify delay
    specparam
      tSA   = 0,
      tAW   = 8,
      tSCE  = 8,
      tSD   = 6,
      tPWE2 = 10,
      tPWE1 = 8,
      tPBW  = 8;
`else


`ifdef tAC_12
  specify
    specparam
      tSA   = 0,
      tAW   = 8,
      tSCE  = 8,
      tSD   = 6,
      tPWE2 = 12,
      tPWE1 = 8,
      tPBW  = 8;
`endif
`endif


    $setup (A, negedge CE_, tSA);
    $setup (A, posedge CE_, tAW);
    $setup (IO, posedge CE_, tSD);
    $setup (A, negedge WE_, tSA);
    $setup (IO, posedge WE_, tSD);
    $setup (A, negedge LB_, tSA);
    $setup (A, negedge UB_, tSA);


    $width (negedge CE_, tSCE);
    $width (negedge LB_, tPBW);
    $width (negedge UB_, tPBW);
    `ifdef OEb
    $width (negedge WE_, tPWE1);
    `else
    $width (negedge WE_, tPWE2);
    `endif


  endspecify


endmodule


好的testbench比RTL代码更重要!

文章评论2条评论)

登录后参与讨论

用户377235 2016-4-28 05:08

请教IS61LV25616的write cycle的No.4 back to back write是什么意思?和其他3中写操作有何区别,哪种写时序最快?非常感谢,祝一切顺利!

用户377235 2016-4-28 05:07

请教博主:IS61LV25616的DS中Write Cycle No.4,/LB和/UB控制,back-to-back write是什么意思?和其他3中写操作有何区别?4种写时序,哪个速度最快?不懂请教,非常感谢!

相关推荐阅读
用户1359586 2011-07-07 11:49
一个简单字符驱动
网上常见的一个linux字符驱动,见 http://www.dzsc.com/data/html/2009-5-31/76528.html insmod test.ko lsmod      就可...
用户1359586 2010-05-14 22:38
FPGA自己产生reset
遇到一个FPGA没有外部的reset,只能自己产生了,这么简单一个问题居然想了很久才实现。在modelsim仿真是对的,还没有实际操作,也希望和大家讨论一下module reset_generatio...
用户1359586 2010-05-10 22:27
SRAM的时序约束
http://blog.ednchina.com/ilove314/198969/message.aspx#85821  读SRAM时序约束分析分析了SRAM的IO计算,但是没有讲如何具体的计算和Ti...
用户1359586 2010-04-07 21:09
CCS6000安装问题
http://bbs.21ic.com/icview-39374-1-1.html在安装CCS6000的时候,运行ccs6000.exe的时候,碰到好几机子都装不上。主要问题是在安装到“compone...
用户1359586 2010-01-13 21:15
matlab 函数:sprintf
for i="1:20"     j="sprintf"('%03d',i)endj =001j =002j =003j =004j =005j =006j =007j =008j =009j =01...
用户1359586 2009-09-29 09:54
有着十三亿人众的孔孟之乡没有一个教育家
   耶鲁大学校长 小贝诺.施密德特  曾任耶鲁大学校长的小贝诺?施密德特,日前在耶鲁大学学报上公开撰文批判中国大学,引起了美国教育界人士对中国大学的激烈争论。 对中国大学近年来久盛不衰的“做大做强”...
我要评论
2
5
关闭 站长推荐上一条 /2 下一条