From fc3b923213a78b7af184813be96ef3258bf3b9ea Mon Sep 17 00:00:00 2001 From: Roberto Hexsel <roberto@inf.ufpr.br> Date: Wed, 13 Apr 2016 11:36:51 -0300 Subject: [PATCH] fixed yesterday-s incomplete update --- cMIPS/include/handlers.s | 54 ++++++++++++++++++++++++++++++++++++++++ cMIPS/vhdl/core.vhd | 6 ++--- cMIPS/vhdl/tb_cMIPS.vhd | 4 +-- 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/cMIPS/include/handlers.s b/cMIPS/include/handlers.s index f644225..60ce4e2 100644 --- a/cMIPS/include/handlers.s +++ b/cMIPS/include/handlers.s @@ -203,3 +203,57 @@ cmips_delay: nop .end cmips_delay #---------------------------------------------------------------- + + + #---------------------------------------------------------------- + # print a message, does not disturbs registers + .bss + .align 2 + .comm _kmsg_saves 4*4 # area to save up to 4 registers + # _kmsg_saves[0]=$a0, [1]=$a1, [2]=$a2, [3]=$ra + # + .text + .set noreorder + .set noat + .global cmips_kmsg + .ent cmips_kmsg + .equ stdout_addr,(x_IO_BASE_ADDR + 1*x_IO_ADDR_RANGE); + # void cmips_kmsg( $k1 ) +cmips_kmsg: + lui $k0, %hi(_kmsg_saves) + ori $k0, $k0, %lo(_kmsg_saves) + sw $a0, 0*4($k0) + sw $a1, 1*4($k0) + sw $a2, 2*4($k0) + + lui $a1, %hi(_kmsg_list) + ori $a1, $a1, %hi(_kmsg_list) + + sll $k1, $k1, 2 # adjust index onto table + addu $a1, $a1, $k1 + + lui $a2, %hi(stdout_addr) + ori $a2, $a2, %lo(stdout_addr) + +k_for: lbu $a0, 0($a1) + sb $a0, 0($a2) # send it to simulator's stdout + bne $a0, $zero, k_for + addiu $a1, $a1, 1 + + lw $a0, 0*4($k0) + lw $a1, 1*4($k0) + jr $ra + lw $a2, 2*4($k0) + + .end cmips_kmsg + + .equ kmsg_interr,0 + .equ kmsg_excep,1 + .data + .global _kmsg_list +_kmsg_list: .word _kmsg_interr,_kmsg_excep + +_kmsg_interr: .asciiz "\n\tinterrupt\n\n" +_kmsg_excep: .asciiz "\n\texceptioninterrupt\n\n" + #---------------------------------------------------------------- + diff --git a/cMIPS/vhdl/core.vhd b/cMIPS/vhdl/core.vhd index 2ba0c4f..20cfcf1 100644 --- a/cMIPS/vhdl/core.vhd +++ b/cMIPS/vhdl/core.vhd @@ -3013,12 +3013,12 @@ begin -- TLB entry 6 -- initialized to 1st,2nd pages of SDRAM - MMU_TAG6: register32 generic map(MMU_ini_tag_SDR0) + MMU_TAG6: register32 generic map(MMU_ini_tag_RAM4) port map (clk, rst, tlb_tag6_updt, tlb_tag_inp, tlb_tag6); - MMU_DAT6_0: registerN generic map(DAT_REG_BITS, MMU_ini_dat_SDR0) -- d=1,v=1,g=1 + MMU_DAT6_0: registerN generic map(DAT_REG_BITS, MMU_ini_dat_RAM4) -- d=1,v=1,g=1 port map (clk, rst, tlb_dat6_updt, tlb_dat0_inp, tlb_dat6_0); - MMU_DAT6_1: registerN generic map(DAT_REG_BITS, MMU_ini_dat_SDR1) -- d=1,v=1,g=1 + MMU_DAT6_1: registerN generic map(DAT_REG_BITS, MMU_ini_dat_RAM5) -- d=1,v=1,g=1 port map (clk, rst, tlb_dat6_updt, tlb_dat1_inp, tlb_dat6_1); hit6_pc <= TRUE when (tlb_tag6(VA_HI_BIT downto VA_LO_BIT) = PC(VA_HI_BIT downto VA_LO_BIT) diff --git a/cMIPS/vhdl/tb_cMIPS.vhd b/cMIPS/vhdl/tb_cMIPS.vhd index 5bddc87..135e1fe 100644 --- a/cMIPS/vhdl/tb_cMIPS.vhd +++ b/cMIPS/vhdl/tb_cMIPS.vhd @@ -530,8 +530,8 @@ begin -- TB port map (rst, clk, mem_i_sel,rom_rdy, phi3, mem_i_addr,datrom); U_DATA_BUS_ERROR_DEC: busError_addr_decode - port map (rst, cpu_d_aVal, d_addr, open); - d_busError <= '1'; -- only while testing the SDRAM + port map (rst, cpu_d_aVal, d_addr, d_busError); + -- d_busError <= '1'; -- only while testing the SDRAM U_IO_ADDR_DEC: io_addr_decode port map (phi0, rst, cpu_d_aVal, d_addr, dev_select_io, -- GitLab