📄 test_register.v
字号:
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 + -