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

📄 test_register.v

📁 简单的8位CPU
💻 V
📖 第 1 页 / 共 2 页
字号:
			tst_reg9_addr 	<= 1'b0;
			tst_reg10_addr 	<= 1'b0;
			tst_reg11_addr 	<= 1'b0;
			tst_reg12_addr 	<= 1'b0;
			tst_reg13_addr 	<= 1'b0;
			tst_reg14_addr 	<= 1'b0;
			tst_reg15_addr 	<= 1'b0;
			tst_reg16_addr 	<= 1'b0;
			tst_reg17_addr 	<= 1'b0;
			tst_reg18_addr 	<= 1'b0;
			tst_reg19_addr 	<= 1'b0;
			tst_reg20_addr 	<= 1'b0;
			tst_reg21_addr 	<= 1'b0;
			tst_reg22_addr 	<= 1'b0;
			tst_reg23_addr 	<= 1'b0;
			tst_reg24_addr 	<= 1'b0;
			tst_reg25_addr 	<= 1'b0;
			tst_reg26_addr 	<= 1'b0;
			tst_reg27_addr 	<= 1'b0;
			tst_reg28_addr 	<= 1'b0;
			tst_reg29_addr 	<= 1'b0;
			tst_reg30_addr 	<= 1'b0;
			tst_reg31_addr 	<= 1'b0;
			ext_io_din_addr <= 1'b0;
			intr_addr	<= 1'b0;
			status_user_reg <= 1'b0;
			
			`ifdef DEMO
			isp_instr_addr 	<= 1'b0;
			isp_carry_flag_addr <= 1'b0;
			isp_alu_dout_addr <= 1'b0;
			isp_cout_alu_addr <= 1'b0;
			isp_call_cmd_addr <= 1'b0;
			isp_ret_cmd_addr <= 1'b0;
			isp_bz_cmd_addr <=1'b0;
			`endif

			
		end
	else
		begin
		
			tst_ctrl0_addr 	<= (tst_sys_addr[7:0] == 8'h00) ? 1'b1 : 1'b0;
			tst_ctrl1_addr	<= (tst_sys_addr[7:0] == 8'h01) ? 1'b1 : 1'b0;
			intr_addr		<= (tst_sys_addr[7:0] == 8'h02) ? 1'b1 : 1'b0;
			ext_io_din_addr <= (tst_sys_addr[7:0] == 8'h03) ? 1'b1 : 1'b0;		
			tst_reg0_addr	<= (tst_sys_addr[7:0] == 8'h20) ? 1'b1 : 1'b0;
			tst_reg1_addr	<= (tst_sys_addr[7:0] == 8'h21) ? 1'b1 : 1'b0;
			tst_reg2_addr	<= (tst_sys_addr[7:0] == 8'h22) ? 1'b1 : 1'b0;
			tst_reg3_addr	<= (tst_sys_addr[7:0] == 8'h23) ? 1'b1 : 1'b0;
			tst_reg4_addr	<= (tst_sys_addr[7:0] == 8'h24) ? 1'b1 : 1'b0;
			tst_reg5_addr	<= (tst_sys_addr[7:0] == 8'h25) ? 1'b1 : 1'b0;
			tst_reg6_addr	<= (tst_sys_addr[7:0] == 8'h26) ? 1'b1 : 1'b0;
			tst_reg7_addr	<= (tst_sys_addr[7:0] == 8'h27) ? 1'b1 : 1'b0;
			tst_reg8_addr	<= (tst_sys_addr[7:0] == 8'h28) ? 1'b1 : 1'b0;
			tst_reg9_addr	<= (tst_sys_addr[7:0] == 8'h29) ? 1'b1 : 1'b0;
			tst_reg10_addr	<= (tst_sys_addr[7:0] == 8'h2a) ? 1'b1 : 1'b0;
			tst_reg11_addr	<= (tst_sys_addr[7:0] == 8'h2b) ? 1'b1 : 1'b0;
			tst_reg12_addr	<= (tst_sys_addr[7:0] == 8'h2c) ? 1'b1 : 1'b0;
			tst_reg13_addr	<= (tst_sys_addr[7:0] == 8'h2d) ? 1'b1 : 1'b0;
			tst_reg14_addr	<= (tst_sys_addr[7:0] == 8'h2e) ? 1'b1 : 1'b0;
			tst_reg15_addr	<= (tst_sys_addr[7:0] == 8'h2f) ? 1'b1 : 1'b0;
			tst_reg16_addr	<= (tst_sys_addr[7:0] == 8'h30) ? 1'b1 : 1'b0;
			tst_reg17_addr	<= (tst_sys_addr[7:0] == 8'h31) ? 1'b1 : 1'b0;
			tst_reg18_addr	<= (tst_sys_addr[7:0] == 8'h32) ? 1'b1 : 1'b0;
			tst_reg19_addr	<= (tst_sys_addr[7:0] == 8'h33) ? 1'b1 : 1'b0;
			tst_reg20_addr	<= (tst_sys_addr[7:0] == 8'h34) ? 1'b1 : 1'b0;
			tst_reg21_addr	<= (tst_sys_addr[7:0] == 8'h35) ? 1'b1 : 1'b0;
			tst_reg22_addr	<= (tst_sys_addr[7:0] == 8'h36) ? 1'b1 : 1'b0;
			tst_reg23_addr	<= (tst_sys_addr[7:0] == 8'h37) ? 1'b1 : 1'b0;
			tst_reg24_addr	<= (tst_sys_addr[7:0] == 8'h38) ? 1'b1 : 1'b0;
			tst_reg25_addr	<= (tst_sys_addr[7:0] == 8'h39) ? 1'b1 : 1'b0;
			tst_reg26_addr	<= (tst_sys_addr[7:0] == 8'h3a) ? 1'b1 : 1'b0;
			tst_reg27_addr	<= (tst_sys_addr[7:0] == 8'h3b) ? 1'b1 : 1'b0;
			tst_reg28_addr	<= (tst_sys_addr[7:0] == 8'h3c) ? 1'b1 : 1'b0;
			tst_reg29_addr	<= (tst_sys_addr[7:0] == 8'h3d) ? 1'b1 : 1'b0;
			tst_reg30_addr	<= (tst_sys_addr[7:0] == 8'h3e) ? 1'b1 : 1'b0;
			tst_reg31_addr	<= (tst_sys_addr[7:0] == 8'h3f) ? 1'b1 : 1'b0;

			`ifdef DEMO
			isp_alu_dout_addr <= (tst_sys_addr[7:0] == 8'h10) ? 1'b1 : 1'b0;
			isp_instr_addr 	<= (tst_sys_addr[7:0] == 8'h11) ? 1'b1 : 1'b0;
			isp_carry_flag_addr <= (tst_sys_addr[7:0] == 8'h14) ? 1'b1 : 1'b0;
			isp_cout_alu_addr <= (tst_sys_addr[7:0] == 8'h15) ? 1'b1 : 1'b0;
			isp_call_cmd_addr <= (tst_sys_addr[7:0] == 8'h16) ? 1'b1 : 1'b0;
			isp_ret_cmd_addr <= (tst_sys_addr[7:0] == 8'h17) ? 1'b1 : 1'b0;
			isp_bz_cmd_addr <= (tst_sys_addr[7:0] == 8'h18) ? 1'b1 : 1'b0;
			`endif
			status_user_reg <= 1'b1;
		end
end

assign cpu_wr = ext_io_wr;
assign rst_tst_regs = TST_CTRL1[0];
assign cpu_start = TST_CTRL1[1];


// ==========================
// Writing the Test Registers
// ==========================

always @(posedge tst_clk or negedge reset_n)
begin
	if (reset_n == 1'b0)
		begin
			tst_reg0 <= 8'h00;
			tst_reg1 <= 8'h00;
			tst_reg2 <= 8'h00;
			tst_reg3 <= 8'h00;
			tst_reg4 <= 8'h00;
			tst_reg5 <= 8'h00;
			tst_reg6 <= 8'h00;
			tst_reg7 <= 8'h00;
			tst_reg8 <= 8'h00;
			tst_reg9 <= 8'h00;
			tst_reg10 <= 8'h00;
			tst_reg11 <= 8'h00;
			tst_reg12 <= 8'h00;
			tst_reg13 <= 8'h00;
			tst_reg14 <= 8'h00;
			tst_reg15 <= 8'h00;
			tst_reg16 <= 8'h00;
			tst_reg17 <= 8'h00;
			tst_reg18 <= 8'h00;
			tst_reg19 <= 8'h00;
			tst_reg20 <= 8'h00;
			tst_reg21 <= 8'h00;
			tst_reg22 <= 8'h00;
			tst_reg23 <= 8'h00;
			tst_reg24 <= 8'h00;
			tst_reg25 <= 8'h00;
			tst_reg26 <= 8'h00;
			tst_reg27 <= 8'h00;
			tst_reg28 <= 8'h00;
			tst_reg29 <= 8'h00;
			tst_reg30 <= 8'h00;
			tst_reg31 <= 8'h00;
			//test_reg3 <= 8'h00;
		end
	else
		begin
			tst_reg0 <= STORE_REGS[7:0];
			tst_reg1 <= STORE_REGS[15:8];
			tst_reg2 <= STORE_REGS[23:16];
			tst_reg3 <= STORE_REGS[31:24];
			//test_reg3 <= STORE_REGS[31:24];
			tst_reg4 <= STORE_REGS[39:32];
			tst_reg5 <= STORE_REGS[47:40];
			tst_reg6 <= STORE_REGS[55:48];
			tst_reg7 <= STORE_REGS[63:56];
			tst_reg8 <= STORE_REGS[71:64];
			tst_reg9 <= STORE_REGS[79:72];
			tst_reg10 <= STORE_REGS[87:80];
			tst_reg11 <= STORE_REGS[95:88];
			tst_reg12 <= STORE_REGS[103:96];
			tst_reg13 <= STORE_REGS[111:104];
			tst_reg14 <= STORE_REGS[119:112];
			tst_reg15 <= STORE_REGS[127:120];
			tst_reg16 <= STORE_REGS[135:128];
			tst_reg17 <= STORE_REGS[143:136];
			tst_reg18 <= STORE_REGS[151:144];
			tst_reg19 <= STORE_REGS[159:152];
			tst_reg20 <= STORE_REGS[167:160];
			tst_reg21 <= STORE_REGS[175:168];
			tst_reg22 <= STORE_REGS[183:176];
			tst_reg23 <= STORE_REGS[191:184];
			tst_reg24 <= STORE_REGS[199:192];
			tst_reg25 <= STORE_REGS[207:200];
			tst_reg26 <= STORE_REGS[215:208];
			tst_reg27 <= STORE_REGS[223:216];
			tst_reg28 <= STORE_REGS[231:224];
			tst_reg29 <= STORE_REGS[239:232];
			tst_reg30 <= STORE_REGS[247:240];
			tst_reg31 <= STORE_REGS[255:248];
				

			
		end
end

always @(INTR_REG[0] or reset_n)
begin
	if (!reset_n)
		intr <=	1'b0;
	else
		intr <= INTR_REG[0];
		
end

always @(posedge tst_clk or negedge reset_n)
begin
	if (reset_n == 1'b0)
		begin
			TST_CTRL0 <= 8'h00;
			TST_CTRL1 <= 8'h00;
			//TST_CTRL1 <= 8'h02;
			STORE_REGS <= 255'd0;
			INTR_REG	  <= 8'h00;
			//EXT_IO_DIN_REG	<= 8'h00;
			EXT_IO_DIN_REG	<= 8'h00;
			//test_reg3		<= 8'h0;

			`ifdef DEMO
			ALU_DOUT_REG	<= 8'h00;
			ISP_INSTR_REG	<= 24'h00000;
			CARRY_FLAG_REG  <= 8'h0;
			COUT_ALU_REG	<= 8'h0;
			CALL_CMD_REG	<= 8'h0;
			RET_CMD_REG	<= 8'h0;
			BZ_CMD_REG	<= 8'h0;
			`endif
		end
	else
		begin
		  

		   if (TST_CTRL1[0] == 1'b1)
				begin
					TST_CTRL0 <= 8'h00;	
					TST_CTRL1 <= 8'h00;
					STORE_REGS <= 255'd0;
					INTR_REG	  <= 1'b0;
					EXT_IO_DIN_REG	<= 8'h00;
			
					`ifdef DEMO
					ALU_DOUT_REG	<= 8'h00;
					ISP_INSTR_REG	<= 24'h00000;
					CARRY_FLAG_REG  <= 8'h0;
					COUT_ALU_REG	<= 8'h0;
					CALL_CMD_REG	<= 8'h0;
					RET_CMD_REG	<= 8'h0;
					BZ_CMD_REG	<= 8'h0;

					`endif
				end

		    if (TST_CTRL1[1] == 1'b1)
				ext_io_din <= 8'h01;
			else
				ext_io_din <= EXT_IO_DIN_REG;			

				
			if (ext_intr_ack == 1'b1)
				INTR_REG[0]	<= 1'b0;
			
								
	
			if ((tst_wr) && (tstreg_access == 1'b1))
				begin
					if (tst_ctrl0_addr)
						TST_CTRL0 <= tst_datain[7:0];
					
					if (tst_ctrl1_addr)
						begin
							//if ((ext_addr[7:0] == 8'h1f) && (ext_io_rd == 1'b1))
							//	TST_CTRL1 <= 8'b00000010;
							//else 
								TST_CTRL1 <= tst_datain[7:0];
						end
					
					if (intr_addr)
						INTR_REG	  <= tst_datain;
				
					if (ext_io_din_addr)
						EXT_IO_DIN_REG    <= tst_datain;

					case (tst_addr)
						8'h20: STORE_REGS[7:0] 		<= tst_datain[7:0];						
						8'h21: STORE_REGS[15:8]		<= tst_datain[7:0];
						8'h22: STORE_REGS[23:16] 	<= tst_datain[7:0];
						8'h23: STORE_REGS[31:24]	<= tst_datain[7:0];
						8'h24: STORE_REGS[39:32]	<= tst_datain[7:0];
						8'h25: STORE_REGS[47:40]	<= tst_datain[7:0];
						8'h26: STORE_REGS[55:48]	<= tst_datain[7:0];
						8'h27: STORE_REGS[63:56]	<= tst_datain[7:0];
						8'h28: STORE_REGS[73:64]	<= tst_datain[7:0];
						8'h29: STORE_REGS[79:72]	<= tst_datain[7:0];
						8'h2a: STORE_REGS[87:80]	<= tst_datain[7:0];
						8'h2b: STORE_REGS[95:88]	<= tst_datain[7:0];
						8'h2c: STORE_REGS[103:96]	<= tst_datain[7:0];
						8'h2d: STORE_REGS[111:104]	<= tst_datain[7:0];
						8'h2e: STORE_REGS[119:112]	<= tst_datain[7:0];
						8'h2f: STORE_REGS[127:120]	<= tst_datain[7:0];
						8'h30: STORE_REGS[135:128]	<= tst_datain[7:0];
						8'h31: STORE_REGS[143:136]	<= tst_datain[7:0];
						8'h32: STORE_REGS[151:144]	<= tst_datain[7:0];
						8'h33: STORE_REGS[159:152]	<= tst_datain[7:0];
						8'h34: STORE_REGS[167:160]	<= tst_datain[7:0];
						8'h35: STORE_REGS[175:168]	<= tst_datain[7:0];
						8'h36: STORE_REGS[183:176]	<= tst_datain[7:0];
						8'h37: STORE_REGS[191:184]	<= tst_datain[7:0];
						8'h38: STORE_REGS[199:192]	<= tst_datain[7:0];
						8'h39: STORE_REGS[207:200]	<= tst_datain[7:0];
						8'h3a: STORE_REGS[215:208]	<= tst_datain[7:0];
						8'h3b: STORE_REGS[223:216]	<= tst_datain[7:0];
						8'h3c: STORE_REGS[231:224]	<= tst_datain[7:0];
						8'h3d: STORE_REGS[239:232]	<= tst_datain[7:0];
						8'h3e: STORE_REGS[247:240]	<= tst_datain[7:0];
						8'h3f: STORE_REGS[255:248]	<= tst_datain[7:0];
						default: STORE_REGS[255:0]	<= STORE_REGS[255:0];

					endcase	
					
					
				end

			if (cpu_wr)
				begin
			
					case (ext_addr)
						8'h00: STORE_REGS[7:0] 		<= ext_dout[7:0];						
						8'h01: STORE_REGS[15:8]		<= ext_dout[7:0];
						8'h02: STORE_REGS[23:16] 	<= ext_dout[7:0];
						8'h03: STORE_REGS[31:24]	<= ext_dout[7:0];
						8'h04: STORE_REGS[39:32]	<= ext_dout[7:0];
						8'h05: STORE_REGS[47:40]	<= ext_dout[7:0];
						8'h06: STORE_REGS[55:48]	<= ext_dout[7:0];
						8'h07: STORE_REGS[63:56]	<= ext_dout[7:0];
						8'h08: STORE_REGS[73:64]	<= ext_dout[7:0];
						8'h09: STORE_REGS[79:72]	<= ext_dout[7:0];
						8'h0a: STORE_REGS[87:80]	<= ext_dout[7:0];
						8'h0b: STORE_REGS[95:88]	<= ext_dout[7:0];
						8'h0c: STORE_REGS[103:96]	<= ext_dout[7:0];
						8'h0d: STORE_REGS[111:104]	<= ext_dout[7:0];
						8'h0e: STORE_REGS[119:112]	<= ext_dout[7:0];
						8'h0f: STORE_REGS[127:120]	<= ext_dout[7:0];
						8'h10: STORE_REGS[135:128]	<= ext_dout[7:0];
						8'h11: STORE_REGS[143:136]	<= ext_dout[7:0];
						8'h12: STORE_REGS[151:144]	<= ext_dout[7:0];
						8'h13: STORE_REGS[159:152]	<= ext_dout[7:0];
						8'h14: STORE_REGS[167:160]	<= ext_dout[7:0];
						8'h15: STORE_REGS[175:168]	<= ext_dout[7:0];
						8'h16: STORE_REGS[183:176]	<= ext_dout[7:0];
						8'h17: STORE_REGS[191:184]	<= ext_dout[7:0];
						8'h18: STORE_REGS[199:192]	<= ext_dout[7:0];
						8'h19: STORE_REGS[207:200]	<= ext_dout[7:0];
						8'h1a: STORE_REGS[215:208]	<= ext_dout[7:0];
						8'h1b: STORE_REGS[223:216]	<= ext_dout[7:0];
						8'h1c: STORE_REGS[231:224]	<= ext_dout[7:0];
						8'h1d: STORE_REGS[239:232]	<= ext_dout[7:0];
						8'h1e: STORE_REGS[247:240]	<= ext_dout[7:0];
						8'h1f: STORE_REGS[255:248]	<= ext_dout[7:0];
						default: STORE_REGS[255:0]	<= STORE_REGS[255:0];

					endcase	
				end
			
			if (ext_io_rd)
				begin
					case(ext_addr)
						8'h00: STORE_REGS[7:0] 		<= ext_io_din[7:0];						
						8'h01: STORE_REGS[15:8]		<= ext_io_din[7:0];
						8'h02: STORE_REGS[23:16] 	<= ext_io_din[7:0];
						8'h03: STORE_REGS[31:24]	<= ext_io_din[7:0];
						8'h04: STORE_REGS[39:32]	<= ext_io_din[7:0];
						8'h05: STORE_REGS[47:40]	<= ext_io_din[7:0];
						8'h06: STORE_REGS[55:48]	<= ext_io_din[7:0];
						8'h07: STORE_REGS[63:56]	<= ext_io_din[7:0];
						8'h08: STORE_REGS[73:64]	<= ext_io_din[7:0];
						8'h09: STORE_REGS[79:72]	<= ext_io_din[7:0];
						8'h0a: STORE_REGS[87:80]	<= ext_io_din[7:0];
						8'h0b: STORE_REGS[95:88]	<= ext_io_din[7:0];
						8'h0c: STORE_REGS[103:96]	<= ext_io_din[7:0];
						8'h0d: STORE_REGS[111:104]	<= ext_io_din[7:0];
						8'h0e: STORE_REGS[119:112]	<= ext_io_din[7:0];
						8'h0f: STORE_REGS[127:120]	<= ext_io_din[7:0];
						8'h10: STORE_REGS[135:128]	<= ext_io_din[7:0];
						8'h11: STORE_REGS[143:136]	<= ext_io_din[7:0];
						8'h12: STORE_REGS[151:144]	<= ext_io_din[7:0];
						8'h13: STORE_REGS[159:152]	<= ext_io_din[7:0];
						8'h14: STORE_REGS[167:160]	<= ext_io_din[7:0];
						8'h15: STORE_REGS[175:168]	<= ext_io_din[7:0];
						8'h16: STORE_REGS[183:176]	<= ext_io_din[7:0];
						8'h17: STORE_REGS[191:184]	<= ext_io_din[7:0];
						8'h18: STORE_REGS[199:192]	<= ext_io_din[7:0];
						8'h19: STORE_REGS[207:200]	<= ext_io_din[7:0];
						8'h1a: STORE_REGS[215:208]	<= ext_io_din[7:0];
						8'h1b: STORE_REGS[223:216]	<= ext_io_din[7:0];
						8'h1c: STORE_REGS[231:224]	<= ext_io_din[7:0];
						8'h1d: STORE_REGS[239:232]	<= ext_io_din[7:0];
						8'h1e: STORE_REGS[247:240]	<= ext_io_din[7:0];
						8'h1f: STORE_REGS[255:248]	<= ext_io_din[7:0];
						default: STORE_REGS[255:0]	<= STORE_REGS[255:0];
					endcase	
			end
		
			`ifdef DEMO
			
				ALU_DOUT_REG	<= isp_dout_alu;
			
			
				ISP_INSTR_REG[17:0] <= isp_instr;
			
			
				CARRY_FLAG_REG  <= isp_carry_flag;
	
			
				COUT_ALU_REG	<= isp_cout_alu;

			
				CALL_CMD_REG	<= isp_call_cmd;

			
				RET_CMD_REG	<= isp_ret_cmd;

			
				BZ_CMD_REG	<= isp_bz_cmd;

			`endif

		end
end




endmodule 

⌨️ 快捷键说明

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