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

📄 testbench_cpuside.v

📁 arm7内核的verilog代码
💻 V
字号:
// Simple tester for CPUside`include "CPUside.v"`define DEBUGmodule top;   // All regs   reg [31:0]   A;   tri [31:0] 	D;   reg 		nMREQ, nRW, sysclk, reset;   wire 	nWAIT;   reg [1:0] 	MAS;   wire 	Store_Trigger, Load_Trigger;   wire [31:0] 	write_buffer_data, write_buffer_addr;   wire 	write_buffer_is_byte;   reg 		st_busy, ld_busy;   reg 		load_from_mem_req;   reg [31:0] 	load_from_mem_data;   reg [1:0] 	load_from_mem_offset;      reg [31:0] 	Dout;         assign D = Dout;      // Test pieces   CPU_coupler CC(D, A, nMREQ, nRW, MAS, nWAIT, sysclk, reset, 		  Store_Trigger, Load_Trigger, 		  write_buffer_data, write_buffer_addr, write_buffer_is_byte, 		  st_busy, ld_busy, load_from_mem_req, load_from_mem_data, load_from_mem_offset);   always #64 sysclk = ~sysclk;`ifdef DEBUG	    always @(posedge sysclk) #32      begin	 $write("%d A=%h D=%h {nWAIT,nMREQ,nRW,MAS}=%b st/ld_bsy=%b  ",		$time, A, D, {nWAIT,nMREQ, nRW, MAS}, {st_busy, ld_busy});	 $write("ld_frm_mem{req,data,offst}={%b,%h,%h} ",		load_from_mem_req, load_from_mem_data, load_from_mem_offset);			 $display("Ld/StTrigger=%b state=%h, victim-dedres=%b",		  {Load_Trigger, Store_Trigger}, CC.present_cpu_state, CC.victim_dedsec_result);      end // always @ (posedge slowclk) #20`endif	            initial      begin         $stop;	 sysclk = 0;	 st_busy = 0;	 ld_busy = 0;	 Dout = 32'hzzzzzzzz;	 load_from_mem_data = 32'h12345678;	 load_from_mem_offset = 00;	 load_from_mem_req = 0;	 #200;	 @(posedge sysclk) #1;	 // Load (1)	 A = 1;	 nMREQ = 0;	 nRW = 0;	 MAS = 2'b10;	 reset = 0;	 $display("Load initiated");	 #10;	 if (! Load_Trigger)	    $display("error: Load_Trigger not asserted (should be cache miss)");	 ld_busy <= 1;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b00;	 load_from_mem_req = 1;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b01;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b10;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b11;	 ld_busy <= @(posedge sysclk) 0;	 load_from_mem_req <= @(posedge sysclk) 0;	 	 #2000;	 $display ("Ending load...");	 nMREQ = 1;	 $display("Main cache line 0 is now:");	 $display("0: main_cache=%h tag=%h valid=%b dedsec=%h",		  CC.main_cache[0], CC.main_cache_tag[0], 		  CC.main_cache_valid[0], CC.main_cache_dedsec[0]);	 	 $display("Victim cache should be empty.");	 $display("Victim - oldest = 2'b%b", CC.oldest_victim_line);	 	 $display("0: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[0], CC.victim_cache_tag[0], 		  CC.victim_cache_valid[0], CC.victim_cache_dedsec[0]);	 	 $display("1: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[1], CC.victim_cache_tag[1], 		  CC.victim_cache_valid[1], CC.victim_cache_dedsec[1]);	 	 $display("2: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[2], CC.victim_cache_tag[2], 		  CC.victim_cache_valid[2], CC.victim_cache_dedsec[2]);	 	 $display("3: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[3], CC.victim_cache_tag[3], 		  CC.victim_cache_valid[3], CC.victim_cache_dedsec[3]);	 #200;	 	 @(posedge sysclk) #1;	 // Store (2)	 A = 2;	 nMREQ = 0;	 nRW = 1;	 MAS = 2'b10;	 reset = 0;	 Dout = 32'hABCD9876;	 $display("Store initiated");	 #20;	 if (! Store_Trigger)	    $display("error: Store_Trigger not signalled");	 @(posedge sysclk) #1;	 $display("write_buffer=%h, write_buffer_is_byte=%b", 		  write_buffer_data, write_buffer_is_byte);	 #30;	 $display("write_buffer=%h, write_buffer_is_byte=%b", 		  write_buffer_data, write_buffer_is_byte);	 @(posedge sysclk) #1;	 $display("write_buffer=%h, write_buffer_is_byte=%b", 		  write_buffer_data, write_buffer_is_byte);	 #1000;	 nMREQ = 1;	 #500;	 @(posedge sysclk) #1;	 // Load conflicting address	 A = 32'h401;	 nMREQ = 0;	 nRW = 0;	 MAS = 2'b10;	 reset = 0;	 $display("Load initiated (to generate a conflict with first load)");	 #10 if (! Load_Trigger)	    $display("error: Load_Trigger not asserted - should be cache miss");	 ld_busy <= 1;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b00;	 load_from_mem_req = 1;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b01;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b10;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b11;	 ld_busy <= @(posedge sysclk) 0;	 load_from_mem_req <= @(posedge sysclk) 0;	 #500;	 nMREQ = 1;	 $display("The first load should now be in the victim cache:");	 	 $display("Victim - oldest = 2'b%b", CC.oldest_victim_line);	 	 $display("0: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[0], CC.victim_cache_tag[0], 		  CC.victim_cache_valid[0], CC.victim_cache_dedsec[0]);	 	 $display("1: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[1], CC.victim_cache_tag[1], 		  CC.victim_cache_valid[1], CC.victim_cache_dedsec[1]);	 	 $display("2: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[2], CC.victim_cache_tag[2], 		  CC.victim_cache_valid[2], CC.victim_cache_dedsec[2]);	 	 $display("3: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[3], CC.victim_cache_tag[3], 		  CC.victim_cache_valid[3], CC.victim_cache_dedsec[3]);	 	 $display("Main cache line 0 is now:");	 $display("0: main_cache=%h tag=%h valid=%b dedsec=%h",		  CC.main_cache[0], CC.main_cache_tag[0], 		  CC.main_cache_valid[0], CC.main_cache_dedsec[0]);	 #500;	 @(posedge sysclk);	 // Load (1)	 A = 1;	 nMREQ = 0;	 nRW = 0;	 MAS = 2'b10;	 reset = 0;	 $display("Load initiated (1: should come from victim cache)");	 #10 if (Load_Trigger)	    $display("error: Load_Trigger asserted - should have come from cache");	 ld_busy <= 1;	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b00;	 load_from_mem_req = 1;	 	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b01;	 	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b10;	 	 @(posedge sysclk) #1;	 load_from_mem_offset = 2'b11;	 ld_busy <= @(posedge sysclk) 0;	 load_from_mem_req <= @(posedge sysclk) 0;	 #500;	 $display("Main cache line 0 is now:");	 $display("0: main_cache=%h tag=%h valid=%b dedsec=%h",		  CC.main_cache[0], CC.main_cache_tag[0], 		  CC.main_cache_valid[0], CC.main_cache_dedsec[0]);	 	 $display("Victim - oldest = 2'b%b", CC.oldest_victim_line);	 	 $display("0: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[0], CC.victim_cache_tag[0], 		  CC.victim_cache_valid[0], CC.victim_cache_dedsec[0]);	 	 $display("1: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[1], CC.victim_cache_tag[1], 		  CC.victim_cache_valid[1], CC.victim_cache_dedsec[1]);	 	 $display("2: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[2], CC.victim_cache_tag[2], 		  CC.victim_cache_valid[2], CC.victim_cache_dedsec[2]);	 	 $display("3: victim_cache=%h tag=%h, valid=%b, dedsec=%h",		  CC.victim_cache[3], CC.victim_cache_tag[3], 		  CC.victim_cache_valid[3], CC.victim_cache_dedsec[3]);	 #200;	 //$stop;	 	 $finish;      end // initial beginendmodule // top

⌨️ 快捷键说明

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