![]() |
|
| If you can't view the Datasheet, Please click here to try to view without PDF Reader . |
|
|
| Datasheet File OCR Text: |
| /* ********************************************** * File Name: w25p243a.v * * * * * * * * Date : March 2, 1999 * Written by Lin, Hung-Hsueh * Email Address : hhlin@winbond.com.tw * * Verilog model for 64kx64 Burst Pipelined SRAM * (Tested on Verilog-XL 2.2.27) * * * Memory Product Dept.(PM20) * Winbond Electronics Crop. * * Copyright (c) 1999 Winbond Electronics Corp. * All right reserved * * -------------------------------------------* Version 1.0 March 2 , 1999 ********************************************** */ timescale 1ns/100ps module pbsram (addr, io, clk, ce_1, ce2, ce_3, gw, bwe, bw1, bw2, bw3, bw4, bw5, bw6, bw7,bw8, oe, adv, adsc, adsp, zz, ft, lbo); parameter maxDepth = 65536; //64k parameter maxAddr = 16; //Address parameter maxOut = 64; //IO parameter maxbyte = 8; //Byte Number Product: W25P243A access time: 4.5ns pipelined data output capability 2T/1T mode Signal cycle desllected mode Intel burst mode & linear burst mode selection (LBO) Packaged in 128-pin QFP and TQFP * Features: 64k x 64 burst pipelined SRAM parameter reg_delay = 0.3; inout [maxOut-1:0] io; input [maxAddr-1:0] addr; input clk, ce_1, ce2, ce_3; input adv, adsc, adsp; input gw, bwe, bw1, bw2, bw3, bw4, bw5, bw6, bw7, bw8, oe; input zz , ft, lbo; reg enable, pipe_enable; reg wr_reg_out1, wr_reg_out2,wr_reg_out3,wr_reg_out4; reg wr_reg_out5, wr_reg_out6,wr_reg_out7,wr_reg_out8; reg [1:0] count; reg [maxAddr-1:0] addr_reg_in; reg [maxOut-1 :0] dout, data_out; reg [maxOut-1:0] din; reg [(maxOut/4-1):0] array_quad1 [0:maxDepth]; reg [(maxOut/4-1):0] array_quad2 [0:maxDepth]; reg [(maxOut/4-1):0] array_quad3 [0:maxDepth]; reg [(maxOut/4-1):0] array_quad4 [0:maxDepth]; reg [(maxOut/4-1):0] array_quad5 [0:maxDepth]; reg [(maxOut/4-1):0] array_quad6 [0:maxDepth]; reg [(maxOut/4-1):0] array_quad7 [0:maxDepth]; reg [(maxOut/4-1):0] array_quad8 [0:maxDepth]; wire en_int = (~ce_1 & ce2 & ~ce_3); wire ce_adsp = (~adsp & ~ce_1); wire load = (ce_adsp | ~adsc) ; wire addbit1, addbit0; wire [maxAddr-1:0] addr_reg_out; wire bw_en1 = (bw1 | bwe) & gw; wire bw_en2 = (bw2 | bwe) & gw; wire bw_en3 = (bw3 | bwe) & gw; wire bw_en4 = (bw4 | bwe) & gw; wire bw_en5 = (bw5 | bwe) & gw; wire bw_en6 = (bw6 | bwe) & gw; wire bw_en7 = (bw7 | bwe) & gw; wire bw_en8 = (bw8 | bwe) & gw; wire wr_reg_or = wr_reg_out1 | wr_reg_out2 | wr_reg_out3 | wr_reg_out4 | wr_reg_out5 | wr_reg_out6 | wr_reg_out7 | wr_reg_out8 ; wire oe_en; wire [maxOut-1:0] io; wire [maxOut-1:0] io_int; integer i; initial begin enable =0; $timeformat(-9,1,"ns",10); for (i=0; i<=maxDepth; i=i+1) begin array_quad1[i] =8'b0; array_quad2[i] =8'b0; array_quad3[i] =8'b0; array_quad4[i] =8'b0; array_quad5[i] =8'b0; array_quad6[i] =8'b0; array_quad7[i] =8'b0; array_quad8[i] =8'b0; end end // address register always @(posedge clk) begin if (load) addr_reg_in <= #0.2 addr; end // burst counter always @(posedge clk) begin if (~lbo & load) count <= 2'b00; else if (lbo & load) count <= addr [1:0]; else if (~adv & ~load) count = count + 1; end assign addbit1 = lbo ? count[1] : (count[1]^addr_reg_in[1]) ; assign addbit0 = lbo ? count[0] : (count[0]^addr_reg_in[0]) ; assign addr_reg_out = {addr_reg_in[maxAddr-1:2], addbit1, addbit0}; // write register always @(posedge clk) begin wr_reg_out1 <= #0.2 ~(ce_adsp || bw_en1); wr_reg_out2 <= #0.2 ~(ce_adsp || bw_en2); wr_reg_out3 <= #0.2 ~(ce_adsp || bw_en3); wr_reg_out4 <= #0.2 ~(ce_adsp || bw_en4); wr_reg_out5 <= #0.2 ~(ce_adsp || bw_en5); wr_reg_out6 <= #0.2 ~(ce_adsp || bw_en6); wr_reg_out7 <= #0.2 ~(ce_adsp || bw_en7); wr_reg_out8 <= #0.2 ~(ce_adsp || bw_en8); end // enable register always @(posedge clk) begin if (load) enable = #0.2 en_int; end // pipelined enable always @(posedge clk) begin pipe_enable <= #0.2 enable; end // memory array always @(posedge clk) begin if (en_int & ~adsc & adsp) begin #1.0 if (~bw_en1) array_quad1[addr] <= din[7:0]; if (~bw_en2) array_quad2[addr] <= din[15:8]; if (~bw_en3) array_quad3[addr] <= din[23:16]; if (~bw_en4) array_quad4[addr] <= din[31:24]; if (~bw_en5) array_quad5[addr] <= din[39:32]; if (~bw_en6) array_quad6[addr] <= din[47:40]; if (~bw_en7) array_quad7[addr] <= din[55:48]; if (~bw_en8) array_quad8[addr] <= din[63:56]; end else if (enable & (adsc & (adsp | ce_1))) begin #1.0; if (~bw_en1) array_quad1[addr_reg_out] <= din[7:0]; if (~bw_en2) array_quad2[addr_reg_out] <= din[15:8]; if (~bw_en3) array_quad3[addr_reg_out] <= din[23:16]; if (~bw_en4) array_quad4[addr_reg_out] <= din[31:24]; if (~bw_en5) array_quad5[addr_reg_out] <= din[39:32]; if (~bw_en6) array_quad6[addr_reg_out] <= din[47:40]; if (~bw_en7) array_quad7[addr_reg_out] <= din[55:48]; if (~bw_en8) array_quad8[addr_reg_out] <= din[63:56]; end end // input register always @(posedge clk) begin din <= #0.3 io; end // output register always @(posedge clk) begin #0.4; if ( ~wr_reg_or) begin dout[7 : 0] <= #0.2 array_quad1 [addr_reg_out]; dout[15: 8] <= #0.2 array_quad2 [addr_reg_out]; dout[23:16] <= #0.2 array_quad3 [addr_reg_out]; dout[31:24] <= #0.2 array_quad4 [addr_reg_out]; dout[39:32] <= #0.2 array_quad5 [addr_reg_out]; dout[47:40] <= #0.2 array_quad6 [addr_reg_out]; dout[55:48] <= #0.2 array_quad7 [addr_reg_out]; dout[63:56] <= #0.2 array_quad8 [addr_reg_out]; end end always @(posedge clk) begin #0.2; if (wr_reg_or) data_out <= din ; else if ( ~wr_reg_or) data_out <= dout ; end assign io_int = oe_en ? data_out : din ; assign oe_en = (~oe & pipe_enable & enable & ~wr_reg_or); //output driver bufif1 #0.2 (io[0], io_int[0], oe_en); bufif1 #0.2 (io[1], io_int[1], oe_en); bufif1 #0.2 (io[2], io_int[2], oe_en); bufif1 #0.2 (io[3], io_int[3], oe_en); bufif1 #0.2 (io[4], io_int[4], oe_en); bufif1 #0.2 (io[5], io_int[5], oe_en); bufif1 #0.2 (io[6], io_int[6], oe_en); bufif1 #0.2 (io[7], io_int[7], oe_en); bufif1 #0.2 (io[8], io_int[8], oe_en); bufif1 #0.2 (io[9], io_int[9], oe_en); bufif1 #0.2 (io[10], io_int[10], oe_en); bufif1 #0.2 (io[11], io_int[11], oe_en); bufif1 #0.2 (io[12], io_int[12], oe_en); bufif1 #0.2 (io[13], io_int[13], oe_en); bufif1 #0.2 (io[14], io_int[14], oe_en); bufif1 #0.2 (io[15], io_int[15], oe_en); bufif1 #0.2 (io[16], io_int[16], oe_en); bufif1 #0.2 (io[17], io_int[17], oe_en); bufif1 #0.2 (io[18], io_int[18], oe_en); bufif1 #0.2 (io[19], io_int[19], oe_en); bufif1 #0.2 (io[20], io_int[20], oe_en); bufif1 #0.2 (io[21], io_int[21], oe_en); bufif1 #0.2 (io[22], io_int[22], oe_en); bufif1 #0.2 (io[23], io_int[23], oe_en); bufif1 #0.2 (io[24], io_int[24], oe_en); bufif1 #0.2 (io[25], io_int[25], oe_en); bufif1 #0.2 (io[26], io_int[26], oe_en); bufif1 #0.2 (io[27], io_int[27], oe_en); bufif1 #0.2 (io[28], io_int[28], oe_en); bufif1 #0.2 (io[29], io_int[29], oe_en); bufif1 #0.2 (io[30], io_int[30], oe_en); bufif1 #0.2 (io[31], io_int[31], oe_en); bufif1 #0.2 (io[32], io_int[32], oe_en); bufif1 #0.2 (io[33], io_int[33], oe_en); bufif1 #0.2 (io[34], io_int[34], oe_en); bufif1 #0.2 (io[35], io_int[35], oe_en); bufif1 #0.2 (io[36], io_int[36], oe_en); bufif1 #0.2 (io[37], io_int[37], oe_en); bufif1 #0.2 (io[38], io_int[38], oe_en); bufif1 #0.2 (io[39], io_int[39], oe_en); bufif1 #0.2 (io[40], io_int[40], oe_en); bufif1 #0.2 (io[41], io_int[41], oe_en); bufif1 #0.2 (io[42], io_int[42], oe_en); bufif1 #0.2 (io[43], io_int[43], oe_en); bufif1 #0.2 (io[44], io_int[44], oe_en); bufif1 #0.2 (io[45], io_int[45], oe_en); bufif1 #0.2 (io[46], io_int[46], oe_en); bufif1 #0.2 (io[47], io_int[47], oe_en); bufif1 #0.2 (io[48], io_int[48], oe_en); bufif1 #0.2 (io[49], io_int[49], oe_en); bufif1 #0.2 (io[50], io_int[50], oe_en); bufif1 #0.2 (io[51], io_int[51], oe_en); bufif1 #0.2 (io[52], io_int[52], oe_en); bufif1 #0.2 (io[53], io_int[53], oe_en); bufif1 #0.2 (io[54], io_int[54], oe_en); bufif1 #0.2 (io[55], io_int[55], oe_en); bufif1 #0.2 (io[56], io_int[56], oe_en); bufif1 #0.2 (io[57], io_int[57], oe_en); bufif1 #0.2 (io[58], io_int[58], oe_en); bufif1 #0.2 (io[59], io_int[59], oe_en); bufif1 #0.2 (io[60], io_int[60], oe_en); bufif1 #0.2 (io[61], io_int[61], oe_en); bufif1 #0.2 (io[62], io_int[62], oe_en); bufif1 #0.2 (io[63], io_int[63], oe_en); specify specparam tCYC=10.0, //Clock Cycle time tKH=4, //Colok High Pulse Width tKL=4, //Colok Low Pulse Width tKQ=6, //Clock to Output Valid tKX=2, //Clock to Output Invalid tKHZ=4.5, //Clock to Output High-Z tKLZ=0, //Clock to Output Low-Z tOE=4.5, //Output Enable to Output Valid tOHZ=4.5, //Output Enable to High-Z tOLZ=0, //Output Enable to Low-Z tAS=2.0, //Add. Setup Time tADSS=2.0, //ADSP_, ADSC_, ADV_ Setup Time tCES=2.0, //CE_1_, CE2, CE_3_ Setup Time tWS=2.0, //GW_, BWE_ BWx_ Setup Time tDS=2.0, //Write Data Setup Time tAH=1.0, //Add. Hold Time tADSH=1.0, //ADSP_, ADSC_, ADV_ Hold Time tCEH=1.0, //CE_1_, CE2, CE_3_ Hold Time tWH=1.0, //GW_, BWE_ BWx_ Hold Time tDH=1.0; //Write Data Hold Time (oe *>io) =(tOE,tOE,tOHZ); (clk *>io) =(tKQ,tKQ,tKHZ); $width (posedge clk, tKH); $width (negedge clk, tKL); $period (posedge clk, tCYC); $period (negedge clk, tCYC); $setuphold(posedge clk, adsc, tADSS, tADSH); $setuphold(posedge clk, adsp, tADSS, tADSH); $setuphold(posedge clk, adv, tADSS, tADSH); $setuphold(posedge clk, bw1, tWS, tWH); $setuphold(posedge clk, bw2, tWS, tWH); $setuphold(posedge clk, bw3, tWS, tWH); $setuphold(posedge clk, bw4, tWS, tWH); $setuphold(posedge clk, bw5, tWS, tWH); $setuphold(posedge clk, bw6, tWS, tWH); $setuphold(posedge clk, bw7, tWS, tWH); $setuphold(posedge clk, bw8, tWS, tWH); $setuphold(posedge clk, gw, tWS, tWH); $setuphold(posedge clk, bwe, tWS, tWH); $setuphold(posedge clk, ce_1, tCES, tCEH); $setuphold(posedge clk, ce2, tCES, tCEH); $setuphold(posedge clk, ce_3, tCES, tCEH); $setuphold(posedge clk, addr, tAS, tAH); endspecify endmodule |
|
Price & Availability of W25P243AS
|
|
|
|
|
All Rights Reserved © IC-ON-LINE 2003 - 2022 |
| [Add Bookmark] [Contact Us] [Link exchange] [Privacy policy] |
|
Mirror Sites : [www.datasheet.hk]
[www.maxim4u.com] [www.ic-on-line.cn]
[www.ic-on-line.com] [www.ic-on-line.net]
[www.alldatasheet.com.cn]
[www.gdcy.com]
[www.gdcy.net] |