⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tst_ssram.v

📁 verilog 写的 memory controller
💻 V
字号:
/////////////////////////////////////////////////////////////////////////                                                             ////////  OpenCores Memory Controller Testbench                      ////////  SSRAM memory devices tests                                 ////////  This file is being included by the main testbench          ////////                                                             ////////  Author: Richard Herveille                                  ////////          richard@asics.ws                                   ////////                                                             ////////                                                             ////////  Downloaded from: http://www.opencores.org/cores/mem_ctrl/  ////////                                                             /////////////////////////////////////////////////////////////////////////////                                                             //////// Copyright (C) 2001, 2002 Richard Herveille                  ////////                          richard@asics.ws                   ////////                                                             //////// This source file may be used and distributed without        //////// restriction provided that this copyright statement is not   //////// removed from the file and that any derivative work contains //////// the original copyright notice and the associated disclaimer.////////                                                             ////////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     //////// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   //////// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   //////// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      //////// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         //////// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    //////// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   //////// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        //////// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  //////// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  //////// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  //////// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         //////// POSSIBILITY OF SUCH DAMAGE.                                 ////////                                                             ///////////////////////////////////////////////////////////////////////////  CVS Log////  $Id: tst_ssram.v,v 1.1 2002/03/06 15:10:34 rherveille Exp $////  $Date: 2002/03/06 15:10:34 $//  $Revision: 1.1 $//  $Author: rherveille $//  $Locker:  $//  $State: Exp $//// Change History://               $Log: tst_ssram.v,v $//               Revision 1.1  2002/03/06 15:10:34  rherveille//               Initial release////	////////////////////////////////	// SSRAM Sequential access test	//	// 1) Tests ssram sequential address access	// 2) Tests page switch	// 3) Test burst-action by filling memory backwards (high addresses first)	task tst_ssram_seq;			parameter MAX_CYC_DELAY = 5;		parameter MAX_STB_DELAY = 5;		parameter SSRAM_TST_RUN = 128;		parameter [31:0] SSRAM_TST_STARTA = `SSRAM_LOC + (SSRAM_TST_RUN<<2);		parameter [ 7:0] SSRAM_SEL = SSRAM_TST_STARTA[28:21];		integer n, k;		reg [31:0] my_adr, dest_adr;		reg [31:0] my_dat;		reg [15:0] tmp0, tmp1;		// SSRAM Mode Register bits		reg [31:0] csc_data, tms_data;		integer cyc_delay, stb_delay, bl;		begin			$display("\n\n --- SSRAM SEQUENTIAL ACCESS TEST ---\n\n");			// clear Wishbone-Master-model current-error-counter 			wbm.set_cur_err_cnt(0);			csc_data = {				8'h00,       // reserved				SSRAM_SEL,   // SEL				4'h0,        // reserved				1'b1,        // parity enabled				1'b0,        // KRO, no meaning for ssram				1'b0,        // BAS, no meaning for ssram				1'b0,        // WP				2'b00,       // MS, no meaning for ssram				2'b10,       // BW == 32bit bus. Always for ssram (maybe hardwire ???)				3'b001,      // MEM_TYPE == SDRAM				1'b1         // EN == chip select enabled			};									// tms_data is unused for ssrams			tms_data = {				32'hx			};			// program chip select registers			$display("\nProgramming SSRAM chip select register.");			wbm.wb_write(0, 0, 32'h6000_0030, csc_data); // program cs4 config register (CSC4)			$display("Programming SSRAM timing register.");			wbm.wb_write(0, 0, 32'h6000_0034, tms_data); // program cs4 timing register (TMS4)			// check written data			wbm.wb_cmp(0, 0, 32'h6000_0030, csc_data);			wbm.wb_cmp(0, 0, 32'h6000_0034, tms_data);			cyc_delay = 0;			stb_delay = 0;			for (cyc_delay = 0; cyc_delay <= MAX_CYC_DELAY; cyc_delay = cyc_delay +1)			for (stb_delay = 0; stb_delay <= MAX_STB_DELAY; stb_delay = stb_delay +1)			for (bl        = 1; bl        <= 8            ; bl        = bl        +1)				begin					$display("\nSSRAM sequential test. BL = %d, CYC-delay = %d, STB-delay = ", bl, cyc_delay, stb_delay);					// fill sdrams					$display("Filling SSRAM memory...");					my_dat = 0;					for (n=0; n < SSRAM_TST_RUN; n=n+1)					begin						my_adr = SSRAM_TST_STARTA + ( (SSRAM_TST_RUN -n -bl) <<2);						for (k=0; k < bl; k=k+1)							begin								// fill destination backwards, but with linear bursts								dest_adr   = my_adr + (k<<2);								tmp0     = ~dest_adr[15:0] + bl + cyc_delay + stb_delay;								tmp1     =  dest_adr[15:0] + bl + cyc_delay + stb_delay;								my_dat   = {tmp0, tmp1};								wbm.wb_write(cyc_delay, stb_delay, dest_adr, my_dat);							end						end					// read sdrams					$display("Verifying SSRAM memory contents...");					my_dat = 0;					for (n=0; n < SSRAM_TST_RUN; n=n+1)						begin							my_adr   = n<<2;							dest_adr = SSRAM_TST_STARTA + my_adr;							tmp0     = ~dest_adr[15:0] + bl + cyc_delay + stb_delay;							tmp1     =  dest_adr[15:0] + bl + cyc_delay + stb_delay;							my_dat   = {tmp0, tmp1};							wbm.wb_cmp(cyc_delay, stb_delay, dest_adr, my_dat);						end				end			repeat(10) @(posedge wb_clk); //wait a while			// show Wishbone-Master-model current-error-counter 			wbm.show_cur_err_cnt;		end	endtask // test_ssram_seq

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -