Fix HI/LO

This commit is contained in:
Paul Pan 2022-08-18 18:45:57 +08:00
parent 7c5fef05b0
commit 57b9d66643
8 changed files with 928 additions and 467 deletions

View File

@ -1,7 +1,7 @@
//Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
//--------------------------------------------------------------------------------
//Tool Version: Vivado v.2022.1 (lin64) Build 3526262 Mon Apr 18 15:47:01 MDT 2022
//Date : Mon Aug 8 13:32:33 2022
//Date : Tue Aug 16 17:39:17 2022
//Host : Laptop-Paul running 64-bit Manjaro Linux
//Command : generate_target mycpu_block_wrapper.bd
//Design : mycpu_block_wrapper
@ -42,6 +42,12 @@ module mycpu_block_wrapper
spi_rtl_0_io1_io,
spi_rtl_0_sck_io,
spi_rtl_0_ss_io,
uart_rtl_0_cts,
uart_rtl_0_dcd,
uart_rtl_0_dsr,
uart_rtl_0_dtr,
uart_rtl_0_ri,
uart_rtl_0_rts,
uart_rtl_0_rxd,
uart_rtl_0_txd);
input clk;
@ -76,6 +82,12 @@ module mycpu_block_wrapper
inout spi_rtl_0_io1_io;
inout spi_rtl_0_sck_io;
inout [0:0]spi_rtl_0_ss_io;
input uart_rtl_0_cts;
input uart_rtl_0_dcd;
input uart_rtl_0_dsr;
output uart_rtl_0_dtr;
input uart_rtl_0_ri;
output uart_rtl_0_rts;
input uart_rtl_0_rxd;
output uart_rtl_0_txd;
@ -126,6 +138,12 @@ module mycpu_block_wrapper
wire [0:0]spi_rtl_0_ss_io_0;
wire [0:0]spi_rtl_0_ss_o_0;
wire spi_rtl_0_ss_t;
wire uart_rtl_0_cts;
wire uart_rtl_0_dcd;
wire uart_rtl_0_dsr;
wire uart_rtl_0_dtr;
wire uart_rtl_0_ri;
wire uart_rtl_0_rts;
wire uart_rtl_0_rxd;
wire uart_rtl_0_txd;
@ -177,11 +195,15 @@ module mycpu_block_wrapper
.spi_rtl_0_ss_i(spi_rtl_0_ss_i_0),
.spi_rtl_0_ss_o(spi_rtl_0_ss_o_0),
.spi_rtl_0_ss_t(spi_rtl_0_ss_t),
.uart_rtl_0_ctsn(1'b0),
.uart_rtl_0_dcdn(1'b0),
.uart_rtl_0_ri(1'b1),
.uart_rtl_0_ctsn(~uart_rtl_0_cts),
.uart_rtl_0_dcdn(~uart_rtl_0_dcd),
.uart_rtl_0_dsrn(~uart_rtl_0_dsr),
.uart_rtl_0_dtrn(~uart_rtl_0_dtr),
.uart_rtl_0_ri(uart_rtl_0_ri),
.uart_rtl_0_rtsn(~uart_rtl_0_rts),
.uart_rtl_0_rxd(uart_rtl_0_rxd),
.uart_rtl_0_txd(uart_rtl_0_txd));
IOBUF spi_rtl_0_io0_iobuf
(.I(spi_rtl_0_io0_o),
.IO(spi_rtl_0_io0_io),

File diff suppressed because it is too large Load Diff

View File

@ -195,9 +195,7 @@ module mycpu_block_wrapper
.uart_rtl_0_ctsn(~uart_rtl_0_cts),
.uart_rtl_0_dcdn(~uart_rtl_0_dcd),
.uart_rtl_0_dsrn(~uart_rtl_0_dsr),
.uart_rtl_0_dtrn(~uart_rtl_0_dtr),
.uart_rtl_0_ri(uart_rtl_0_ri),
.uart_rtl_0_rtsn(~uart_rtl_0_rts),
.uart_rtl_0_rxd(uart_rtl_0_rxd),
.uart_rtl_0_txd(uart_rtl_0_txd));
endmodule

View File

@ -0,0 +1,333 @@
#include <asm.h>
#include <regdef.h>
#include <inst_test.h>
LEAF(n103_memory1_test)
.set noreorder
addiu s0, s0 ,1
li s2, 0x0
###test inst
move a0, k0
move a1, k1
#########################################
li v0, 0x800d0000
li v1, 0x800f0000
mfc0 t5, $9, 0
move k0, t5
move k1, t5
addiu t6, t5, 42
addiu t7, t6, 42
addiu t8, t7, 42
addiu s5, t8, 42
addiu s6, s5, 42
addiu s7, s6, 42
addiu s8, s7, 42
1:
beq v0, v1, 2f
nop
sw t5, 0(v0)
sw t6, 4(v0)
sw t7, 8(v0)
sw t8, 12(v0)
sw s5, 16(v0)
sw s6, 20(v0)
sw s7, 24(v0)
sw s8, 28(v0)
addiu v0, v0, 32
addiu t5, t5, 11
addiu t6, t6, 11
addiu t7, t7, 11
addiu t8, t8, 11
addiu s5, s5, 11
addiu s6, s6, 11
addiu s7, s7, 11
addiu s8, s8, 11
j 1b
nop
2:
li v0, 0x800d0000
1:
beq v0, v1, 2f
nop
lw t5, 0(v0)
lw t6, 4(v0)
lw t7, 8(v0)
lw t8, 12(v0)
lw s5, 16(v0)
lw s6, 20(v0)
lw s7, 24(v0)
lw s8, 28(v0)
move t4, k0
bne t5, t4, inst_error
nop
addiu t4, t4, 42
bne t6, t4, inst_error
nop
addiu t4, t4, 42
bne t7, t4, inst_error
nop
addiu t4, t4, 42
bne t8, t4, inst_error
nop
addiu t4, t4, 42
bne s5, t4, inst_error
nop
addiu t4, t4, 42
bne s6, t4, inst_error
nop
addiu t4, t4, 42
bne s7, t4, inst_error
nop
addiu t4, t4, 42
bne s8, t4, inst_error
nop
addiu v0, v0, 32
addiu k0, k0, 11
j 1b
nop
2:
#########################################
li v0, 0x800e0000
move t5, k0
move t9, k0
addiu t6, t5, 42
addiu t7, t6, 42
addiu t8, t7, 42
addiu s5, t8, 42
addiu s6, s5, 42
addiu s7, s6, 42
addiu s8, s7, 42
1:
beq v0, v1, 2f
nop
sw t5, 0(v0)
sw t6, 4(v0)
sw t7, 8(v0)
sw t8, 12(v0)
sw s5, 16(v0)
sw s6, 20(v0)
sw s7, 24(v0)
sw s8, 28(v0)
addiu v0, v0, 32
addiu t5, t5, 11
addiu t6, t6, 11
addiu t7, t7, 11
addiu t8, t8, 11
addiu s5, s5, 11
addiu s6, s6, 11
addiu s7, s7, 11
addiu s8, s8, 11
j 1b
nop
2:
li v0, 0x800d0000
li v1, 0x800e0000
1:
beq v0, v1, 2f
nop
lw t5, 0(v0)
lw t6, 4(v0)
lw t7, 8(v0)
lw t8, 12(v0)
lw s5, 16(v0)
lw s6, 20(v0)
lw s7, 24(v0)
lw s8, 28(v0)
move t4, k1
bne t5, t4, inst_error
nop
addiu t4, t4, 42
bne t6, t4, inst_error
nop
addiu t4, t4, 42
bne t7, t4, inst_error
nop
addiu t4, t4, 42
bne t8, t4, inst_error
nop
addiu t4, t4, 42
bne s5, t4, inst_error
nop
addiu t4, t4, 42
bne s6, t4, inst_error
nop
addiu t4, t4, 42
bne s7, t4, inst_error
nop
addiu t4, t4, 42
bne s8, t4, inst_error
nop
addiu v0, v0, 32
addiu k1, k1, 11
j 1b
nop
2:
li v0, 0x800e0000
li v1, 0x800f0000
1:
beq v0, v1, 2f
nop
lw t5, 0(v0)
lw t6, 4(v0)
lw t7, 8(v0)
lw t8, 12(v0)
lw s5, 16(v0)
lw s6, 20(v0)
lw s7, 24(v0)
lw s8, 28(v0)
move t4, t9
bne t5, t4, inst_error
nop
addiu t4, t4, 42
bne t6, t4, inst_error
nop
addiu t4, t4, 42
bne t7, t4, inst_error
nop
addiu t4, t4, 42
bne t8, t4, inst_error
nop
addiu t4, t4, 42
bne s5, t4, inst_error
nop
addiu t4, t4, 42
bne s6, t4, inst_error
nop
addiu t4, t4, 42
bne s7, t4, inst_error
nop
addiu t4, t4, 42
bne s8, t4, inst_error
nop
addiu v0, v0, 32
addiu t9, t9, 11
j 1b
nop
2:
#########################################
li v0, 0x800d0000
li v1, 0x800f0000
mfc0 t5, $9, 0
move k0, t5
move k1, t5
addiu t6, t5, 42
addiu t7, t6, 42
addiu t8, t7, 42
addiu s5, t8, 42
addiu s6, s5, 42
addiu s7, s6, 42
addiu s8, s7, 42
1:
beq v0, v1, 2f
nop
sw t5, 0(v0)
sw t6, 4(v0)
sw t7, 8(v0)
sw t8, 12(v0)
sw s5, 16(v0)
sw s6, 20(v0)
sw s7, 24(v0)
sw s8, 28(v0)
addiu v0, v0, 32
addiu t5, t5, 11
addiu t6, t6, 11
addiu t7, t7, 11
addiu t8, t8, 11
addiu s5, s5, 11
addiu s6, s6, 11
addiu s7, s7, 11
addiu s8, s8, 11
j 1b
nop
2:
li v0, 0x800d0000
1:
beq v0, v1, 2f
nop
lw t5, 0(v0)
sw t5, 4(v0)
lw t5, 8(v0)
sw t5, 12(v0)
lw t5, 16(v0)
sw t5, 20(v0)
lw t5, 24(v0)
sw t5, 28(v0)
addiu v0, v0, 32
j 1b
nop
2:
li v0, 0x800d0000
1:
beq v0, v1, 2f
nop
lw t5, 0(v0)
lw t6, 4(v0)
lw t7, 8(v0)
lw t8, 12(v0)
lw s5, 16(v0)
lw s6, 20(v0)
lw s7, 24(v0)
lw s8, 28(v0)
addiu v0, v0, 32
move t4, k0
bne t4, t5, inst_error
nop
bne t4, t6, inst_error
nop
addiu t4, t4, 84
bne t4, t7, inst_error
nop
bne t4, t8, inst_error
nop
addiu t4, t4, 84
bne t4, s5, inst_error
nop
bne t4, s6, inst_error
nop
addiu t4, t4, 84
bne t4, s7, inst_error
nop
bne t4, s8, inst_error
nop
addiu k0, k0, 11
j 1b
nop
2:
#########################################
move k0, a0
move k1, a1
###detect exception
bne s2, zero, inst_error
nop
###score ++
addiu s3, s3, 1
###output (s0<<24)|s3
inst_error:
sll t1, s0, 24
or t0, t1, s3
sw t0, 0(s1)
jr ra
nop
END(n103_memory1_test)

View File

@ -0,0 +1,61 @@
#include <asm.h>
#include <regdef.h>
#include <inst_test.h>
LEAF(n104_linux)
.set noreorder
addiu s0, s0 ,1
li s2, 0x0
###test inst
#########################
## lw + mthi/lo hazard ##
#########################
li a0, 0x42424242
li a1, 0x800d0000
sw a0, 0(a1)
j 1f
nop
1:
lw v0, 0(a1)
mthi v0
nop;nop;nop;nop;
mfhi v1
bne a0, v1, inst_error
nop
mfhi v0
sw v0, 4(a1)
nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;
lw v1, 4(a1)
bne a0, v1, inst_error
nop
## mips_next_event
#########################################
move k0, a0
move k1, a1
###detect exception
bne s2, zero, inst_error
nop
###score ++
addiu s3, s3, 1
###output (s0<<24)|s3
inst_error:
sll t1, s0, 24
or t0, t1, s3
sw t0, 0(s1)
jr ra
nop
END(n104_linux)

View File

@ -8,6 +8,52 @@ LEAF(n99_cache_icache_test)
li s2, 0x0
###test inst
# series test
li v0, 0x9fc00000
li v1, 0x9fc0ff00
1:
beq v0, v1, 2f
nop
addiu v0, v0, 0x100
cache 16, 0(v0)
cache 16, 64(v0)
cache 16, 128(v0)
cache 16, 192(v0)
cache 16, 256(v0)
cache 16, 320(v0)
cache 16, 384(v0)
cache 16, 448(v0)
cache 16, 512(v0)
cache 16, 576(v0)
cache 16, 640(v0)
cache 16, 704(v0)
cache 16, 768(v0)
cache 16, 832(v0)
cache 16, 896(v0)
cache 16, 960(v0)
cache 16, 1024(v0)
cache 16, 1088(v0)
cache 16, 1152(v0)
cache 16, 1216(v0)
cache 16, 1280(v0)
cache 16, 1344(v0)
cache 16, 1408(v0)
cache 16, 1472(v0)
cache 16, 1536(v0)
cache 16, 1600(v0)
cache 16, 1664(v0)
cache 16, 1728(v0)
cache 16, 1792(v0)
cache 16, 1856(v0)
cache 16, 1920(v0)
cache 16, 1984(v0)
j 1b
nop
2:
.n99_1_prepare:
addi a1, zero, 0
.n99_1:

View File

@ -4,7 +4,7 @@
#include <utils.h>
#define TEST_NUM 152
#define TEST_NUM 156
##s0, number
@ -309,6 +309,8 @@ locate:
lui s0, 0 ## initial run number
inst_test:
TEST_UNIT_CACHE(n104_linux)
TEST_UNIT_CACHE(n1_lui_test) # 1 2
TEST_UNIT_CACHE(n2_addu_test)
TEST_UNIT_CACHE(n3_addiu_test)
@ -417,8 +419,6 @@ inst_test:
TEST_UNIT_CACHE(n96_maddu_test)
TEST_UNIT_CACHE(n97_msub_msubu_test)
TEST_UNIT(n98_cache_dcache_test) # 146
TEST_UNIT_ONLY_CACHE(n99_cache_icache_test)
TEST_UNIT_CACHE(n100_movz_movn_test) # 148 149
@ -426,6 +426,11 @@ inst_test:
TEST_UNIT_CACHE(n102_memory_test) # 151 152
TEST_UNIT_ONLY_CACHE(n103_memory1_test) # 153
TEST_UNIT(n98_cache_dcache_test) # 146
TEST_UNIT_ONLY_CACHE(n99_cache_icache_test)
###check io access
LI (a0, IO_SIMU_ADDR)
LI (t0, 0x1234)

View File

@ -883,7 +883,7 @@ module Datapath (
assign E.I0.ExcValid = E_I0_PrevExcValid | E_I0_NowExcValid;
assign E.I0.ERET = E_I0_PrevERET & ~C0_int;
assign E.I0.REFILL = E_I0_PrevREFILL & ~C0_int;
assign E.I0.ExcCode = C0_int ? 5'h0
assign E.I0.ExcCode = C0_int ? `EXCCODE_INT
: E_I0_PrevExcValid ? E_I0_PrevExcCode : `EXCCODE_OV;
assign E_I1_NowExcValidWithoutOF = C0_int & E_valid | E.I1.MCtrl.MR & E_I1_STRBERROR;
@ -892,7 +892,7 @@ module Datapath (
assign E.I1.ExcValid = E_I1_PrevExcValid | E_I1_NowExcValid;
assign E.I1.ERET = E_I1_PrevERET & ~C0_int;
assign E.I1.REFILL = E_I1_PrevREFILL & ~C0_int;
assign E.I1.ExcCode = C0_int ? 5'h0
assign E.I1.ExcCode = C0_int ? `EXCCODE_INT
: E_I1_PrevExcValid ? E_I1_PrevExcCode
: E_I1_Overflow & E.I1.OFA ? `EXCCODE_OV
: E.I1.MCtrl.MWR ? `EXCCODE_ADES : `EXCCODE_ADEL;
@ -1354,19 +1354,19 @@ module Datapath (
ffen #(32) HI_ff (
clk,
M_I0_HI,
M.I0.MCtrl.HW & M_go,
M.I0.MCtrl.HW & M_I0_go & M.en,
HI
);
ffen #(32) LO_ff (
clk,
M_I0_LO,
M.I0.MCtrl.LW & M_go,
M.I0.MCtrl.LW & M_I0_go & M.en,
LO
);
assign C0_addr = M.I0.MCtrl.C0D;
assign C0_sel = M.I0.MCtrl.SEL;
assign C0_we = M.I0.MCtrl.C0W & M_I0_go;
assign C0_we = M.I0.MCtrl.C0W & M_I0_go & M.en;
assign C0_wdata = M_I0_ForwardT;
// M.I1.MEM