From 355539aaaf2c9ea619453340672d84a98bb6204c Mon Sep 17 00:00:00 2001 From: Raphael Jacquot Date: Mon, 4 Feb 2019 18:35:53 +0100 Subject: [PATCH] handle 0 --- rom_tb | 863 -------------------------------------------------- saturn_core.v | 86 ++--- 2 files changed, 47 insertions(+), 902 deletions(-) delete mode 100755 rom_tb diff --git a/rom_tb b/rom_tb deleted file mode 100755 index 2268252..0000000 --- a/rom_tb +++ /dev/null @@ -1,863 +0,0 @@ -#! /usr/bin/vvp -v -:ivl_version "10.1 (stable)"; -:ivl_delay_selection "TYPICAL"; -:vpi_time_precision + 0; -:vpi_module "system"; -:vpi_module "vhdl_sys"; -:vpi_module "v2005_math"; -:vpi_module "va_math"; -S_0x55eb737b02d0 .scope module, "saturn_tb" "saturn_tb" 2 846; - .timescale 0 0; -v0x55eb737d2ef0_0 .var "clk", 0 0; -v0x55eb737d2fb0_0 .net "decstate", 31 0, v0x55eb737d2110_0; 1 drivers -v0x55eb737d3070_0 .net "halt", 0 0, v0x55eb737d21d0_0; 1 drivers -v0x55eb737d3170_0 .var "reset", 0 0; -v0x55eb737d3240_0 .net "runstate", 3 0, v0x55eb737d2c60_0; 1 drivers -E_0x55eb73731d20 .event posedge, v0x55eb737d21d0_0; -S_0x55eb737b0450 .scope module, "saturn" "saturn_core" 2 853, 2 40 0, S_0x55eb737b02d0; - .timescale 0 0; - .port_info 0 /INPUT 1 "clk" - .port_info 1 /INPUT 1 "reset" - .port_info 2 /OUTPUT 1 "halt" - .port_info 3 /OUTPUT 4 "runstate" - .port_info 4 /OUTPUT 32 "decstate" -P_0x55eb737b05d0 .param/l "DEC" 1 2 101, +C4<00000000000000000000000000000001>; -P_0x55eb737b0610 .param/l "DECODE_0" 1 2 64, C4<00000000000000000000000000000001>; -P_0x55eb737b0650 .param/l "DECODE_0X" 1 2 65, C4<00000000000000000000000000000010>; -P_0x55eb737b0690 .param/l "DECODE_1" 1 2 67, C4<00000000000000000000000000010000>; -P_0x55eb737b06d0 .param/l "DECODE_14" 1 2 69, C4<00000000000000000000010000010000>; -P_0x55eb737b0710 .param/l "DECODE_15" 1 2 70, C4<00000000000000000000010100010000>; -P_0x55eb737b0750 .param/l "DECODE_1X" 1 2 68, C4<00000000000000000000000000010001>; -P_0x55eb737b0790 .param/l "DECODE_8" 1 2 81, C4<00000000000000000000000010000000>; -P_0x55eb737b07d0 .param/l "DECODE_80" 1 2 83, C4<00000000000000000000000010000010>; -P_0x55eb737b0810 .param/l "DECODE_82" 1 2 89, C4<00000000000000000000001010000000>; -P_0x55eb737b0850 .param/l "DECODE_8X" 1 2 82, C4<00000000000000000000000010000001>; -P_0x55eb737b0890 .param/l "DECODE_A" 1 2 97, C4<00000000000000000000000010100000>; -P_0x55eb737b08d0 .param/l "DECODE_A_FS" 1 2 98, C4<00000000000000000000000010100001>; -P_0x55eb737b0910 .param/l "DECODE_C_EQ_P_N" 1 2 87, C4<00000000000000001100000010000000>; -P_0x55eb737b0950 .param/l "DECODE_D0_EQ_5N" 1 2 72, C4<00000000000000000000101100010000>; -P_0x55eb737b0990 .param/l "DECODE_GOSBVL" 1 2 95, C4<00000000000000000000111110000000>; -P_0x55eb737b09d0 .param/l "DECODE_GOTO" 1 2 79, C4<00000000000000000000000001100000>; -P_0x55eb737b0a10 .param/l "DECODE_GOVLNG" 1 2 94, C4<00000000000000000000110110000000>; -P_0x55eb737b0a50 .param/l "DECODE_LC" 1 2 77, C4<00000000000000000000000000110001>; -P_0x55eb737b0a90 .param/l "DECODE_LC_LEN" 1 2 76, C4<00000000000000000000000000110000>; -P_0x55eb737b0ad0 .param/l "DECODE_MEMACCESS" 1 2 71, C4<00000000000000000000010000010001>; -P_0x55eb737b0b10 .param/l "DECODE_P_EQ" 1 2 74, C4<00000000000000000000000000100000>; -P_0x55eb737b0b50 .param/l "DECODE_RESET" 1 2 85, C4<00000000000000001010000010000000>; -P_0x55eb737b0b90 .param/l "DECODE_START" 1 2 62, C4<00000000000000000000000000000000>; -P_0x55eb737b0bd0 .param/l "DECODE_ST_EQ_0_N" 1 2 91, C4<00000000000000000000010010000000>; -P_0x55eb737b0c10 .param/l "DECODE_ST_EQ_1_N" 1 2 92, C4<00000000000000000000010110000000>; -P_0x55eb737b0c50 .param/l "HEX" 1 2 100, +C4<00000000000000000000000000000000>; -P_0x55eb737b0c90 .param/l "READ_ROM_CLK" 1 2 54, +C4<00000000000000000000000000000010>; -P_0x55eb737b0cd0 .param/l "READ_ROM_STA" 1 2 53, +C4<00000000000000000000000000000001>; -P_0x55eb737b0d10 .param/l "READ_ROM_STR" 1 2 55, +C4<00000000000000000000000000000011>; -P_0x55eb737b0d50 .param/l "READ_ROM_VAL" 1 2 56, +C4<00000000000000000000000000000100>; -P_0x55eb737b0d90 .param/l "RUN_DECODE" 1 2 58, +C4<00000000000000000000000000001111>; -P_0x55eb737b0dd0 .param/l "RUN_EXEC" 1 2 57, +C4<00000000000000000000000000001110>; -P_0x55eb737b0e10 .param/l "RUN_START" 1 2 52, +C4<00000000000000000000000000000000>; -v0x55eb737d1150_0 .var "A", 63 0; -v0x55eb737d1250_0 .var "B", 63 0; -v0x55eb737d1330_0 .var "C", 63 0; -v0x55eb737d1420_0 .var "Carry", 0 0; -v0x55eb737d14e0_0 .var "D", 63 0; -v0x55eb737d1610_0 .var "D0", 19 0; -v0x55eb737d16f0_0 .var "D1", 19 0; -v0x55eb737d17d0_0 .var "HST", 3 0; -v0x55eb737d18b0_0 .var "P", 3 0; -v0x55eb737d1990_0 .var "PC", 19 0; -v0x55eb737d1a70_0 .var "R0", 63 0; -v0x55eb737d1b50_0 .var "R1", 63 0; -v0x55eb737d1c30_0 .var "R2", 63 0; -v0x55eb737d1d10_0 .var "R3", 63 0; -v0x55eb737d1df0_0 .var "R4", 63 0; -v0x55eb737d1ed0 .array "RSTK", 7 0, 19 0; -v0x55eb737d1f90_0 .var "ST", 15 0; -v0x55eb737d2070_0 .net "clk", 0 0, v0x55eb737d2ef0_0; 1 drivers -v0x55eb737d2110_0 .var "decstate", 31 0; -v0x55eb737d21d0_0 .var "halt", 0 0; -v0x55eb737d2290_0 .var "hex_dec", 0 0; -v0x55eb737d2350_0 .var "jump_base", 19 0; -v0x55eb737d2430_0 .var "jump_offset", 19 0; -v0x55eb737d2510_0 .var "load_cnt", 3 0; -v0x55eb737d25f0_0 .var "load_ctr", 3 0; -v0x55eb737d26d0_0 .var "nibble", 3 0; -v0x55eb737d27b0_0 .net "reset", 0 0, v0x55eb737d3170_0; 1 drivers -v0x55eb737d2870_0 .var "rom_address", 19 0; -v0x55eb737d2960_0 .var "rom_clock", 0 0; -v0x55eb737d2a00_0 .var "rom_enable", 0 0; -v0x55eb737d2ad0_0 .net "rom_nibble", 3 0, v0x55eb737d0ee0_0; 1 drivers -v0x55eb737d2ba0_0 .var "rstk_ptr", 2 0; -v0x55eb737d2c60_0 .var "runstate", 3 0; -v0x55eb737d2d40_0 .var "saved_PC", 19 0; -S_0x55eb737b10c0 .scope module, "calc_rom" "hp_rom" 2 146, 2 9 0, S_0x55eb737b0450; - .timescale 0 0; - .port_info 0 /INPUT 1 "clk" - .port_info 1 /INPUT 20 "address" - .port_info 2 /INPUT 1 "enable" - .port_info 3 /OUTPUT 4 "nibble_out" -P_0x55eb737b1290 .param/str "ROM_FILENAME" 1 2 15, "rom-gx-r.hex"; -v0x55eb737af640_0 .net "address", 19 0, v0x55eb737d2870_0; 1 drivers -v0x55eb737ae630_0 .net "clk", 0 0, v0x55eb737d2ef0_0; alias, 1 drivers -v0x55eb737d0e10_0 .net "enable", 0 0, v0x55eb737d2a00_0; 1 drivers -v0x55eb737d0ee0_0 .var "nibble_out", 3 0; -v0x55eb737d0fc0 .array "rom", 1048575 0, 3 0; -E_0x55eb73766ba0 .event posedge, v0x55eb737ae630_0; - .scope S_0x55eb737b10c0; -T_0 ; - %vpi_call 2 24 "$readmemh", P_0x55eb737b1290, v0x55eb737d0fc0 {0 0 0}; - %end; - .thread T_0; - .scope S_0x55eb737b10c0; -T_1 ; - %wait E_0x55eb73766ba0; - %load/vec4 v0x55eb737d0e10_0; - %flag_set/vec4 8; - %jmp/0xz T_1.0, 8; - %load/vec4 v0x55eb737af640_0; - %pad/u 22; - %ix/vec4 4; - %load/vec4a v0x55eb737d0fc0, 4; - %assign/vec4 v0x55eb737d0ee0_0, 0; -T_1.0 ; - %jmp T_1; - .thread T_1; - .scope S_0x55eb737b0450; -T_2 ; - %wait E_0x55eb73766ba0; - %load/vec4 v0x55eb737d27b0_0; - %flag_set/vec4 8; - %jmp/0xz T_2.0, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x55eb737d2290_0, 0; - %pushi/vec4 7, 0, 3; - %assign/vec4 v0x55eb737d2ba0_0, 0; - %pushi/vec4 0, 0, 20; - %assign/vec4 v0x55eb737d1990_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d18b0_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x55eb737d1f90_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d17d0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x55eb737d1420_0, 0; - %pushi/vec4 0, 0, 20; - %ix/load 3, 0, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %ix/load 3, 1, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %ix/load 3, 2, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %ix/load 3, 3, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %ix/load 3, 4, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %ix/load 3, 5, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %ix/load 3, 6, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %ix/load 3, 7, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; - %pushi/vec4 0, 0, 20; - %assign/vec4 v0x55eb737d1610_0, 0; - %pushi/vec4 0, 0, 20; - %assign/vec4 v0x55eb737d16f0_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1150_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1250_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1330_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d14e0_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1a70_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1b50_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1c30_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1d10_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x55eb737d1df0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %pushi/vec4 0, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.1; -T_2.0 ; - %load/vec4 v0x55eb737d2c60_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %jmp/0xz T_2.2, 4; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; -T_2.2 ; -T_2.1 ; - %load/vec4 v0x55eb737d2c60_0; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %load/vec4 v0x55eb737d27b0_0; - %inv; - %and; - %flag_set/vec4 8; - %jmp/0xz T_2.4, 8; - %load/vec4 v0x55eb737d1990_0; - %assign/vec4 v0x55eb737d2d40_0, 0; - %load/vec4 v0x55eb737d2290_0; - %flag_set/vec4 8; - %jmp/0 T_2.6, 8; - %pushi/vec4 4474179, 0, 24; draw_string_vec4 - %jmp/1 T_2.7, 8; -T_2.6 ; End of true expr. - %pushi/vec4 4736344, 0, 24; draw_string_vec4 - %jmp/0 T_2.7, 8; - ; End of false expr. - %blend; -T_2.7; - %vpi_call 2 209 "$display", "PC: %05h Carry: %b h: %s rp: %h RSTK7: %05h", v0x55eb737d1990_0, v0x55eb737d1420_0, S<0,vec4,u24>, v0x55eb737d2ba0_0, &A {1 0 0}; - %vpi_call 2 210 "$display", "P: %h HST: %b ST: %b RSTK6: %5h", v0x55eb737d18b0_0, v0x55eb737d17d0_0, v0x55eb737d1f90_0, &A {0 0 0}; - %vpi_call 2 211 "$display", "A: %h R0: %h RSTK5: %5h", v0x55eb737d1150_0, v0x55eb737d1a70_0, &A {0 0 0}; - %vpi_call 2 212 "$display", "B: %h R1: %h RSTK4: %5h", v0x55eb737d1250_0, v0x55eb737d1b50_0, &A {0 0 0}; - %vpi_call 2 213 "$display", "C: %h R2: %h RSTK3: %5h", v0x55eb737d1330_0, v0x55eb737d1c30_0, &A {0 0 0}; - %vpi_call 2 214 "$display", "D: %h R3: %h RSTK2: %5h", v0x55eb737d14e0_0, v0x55eb737d1d10_0, &A {0 0 0}; - %vpi_call 2 215 "$display", "D0: %h D1: %h R4: %h RSTK1: %5h", v0x55eb737d1610_0, v0x55eb737d16f0_0, v0x55eb737d1df0_0, &A {0 0 0}; - %vpi_call 2 216 "$display", " RSTK0: %5h", &A {0 0 0}; -T_2.4 ; - %load/vec4 v0x55eb737d2c60_0; - %pad/u 32; - %cmpi/e 1, 0, 32; - %jmp/0xz T_2.8, 4; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d2a00_0, 0; - %load/vec4 v0x55eb737d1990_0; - %assign/vec4 v0x55eb737d2870_0, 0; - %pushi/vec4 2, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; -T_2.8 ; - %load/vec4 v0x55eb737d2c60_0; - %pad/u 32; - %cmpi/e 2, 0, 32; - %jmp/0xz T_2.10, 4; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d2960_0, 0; - %pushi/vec4 3, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; -T_2.10 ; - %load/vec4 v0x55eb737d2c60_0; - %pad/u 32; - %cmpi/e 3, 0, 32; - %jmp/0xz T_2.12, 4; - %load/vec4 v0x55eb737d2ad0_0; - %assign/vec4 v0x55eb737d26d0_0, 0; - %load/vec4 v0x55eb737d1990_0; - %addi 1, 0, 20; - %assign/vec4 v0x55eb737d1990_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x55eb737d2a00_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x55eb737d2960_0, 0; - %pushi/vec4 4, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; -T_2.12 ; - %load/vec4 v0x55eb737d2c60_0; - %pad/u 32; - %pushi/vec4 4, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %load/vec4 v0x55eb737d2110_0; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; - %flag_set/vec4 8; - %jmp/0xz T_2.14, 8; - %pushi/vec4 15, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %load/vec4 v0x55eb737d26d0_0; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.16, 6; - %dup/vec4; - %pushi/vec4 6, 0, 4; - %cmp/u; - %jmp/1 T_2.17, 6; - %dup/vec4; - %pushi/vec4 8, 0, 4; - %cmp/u; - %jmp/1 T_2.18, 6; - %vpi_call 2 283 "$display", "%05h nibble %h => unimplemented", v0x55eb737d2d40_0, v0x55eb737d26d0_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.20; -T_2.16 ; - %pushi/vec4 32, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.20; -T_2.17 ; - %pushi/vec4 96, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.20; -T_2.18 ; - %pushi/vec4 128, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.20; -T_2.20 ; - %pop/vec4 1; -T_2.14 ; - %load/vec4 v0x55eb737d2110_0; - %cmpi/e 32, 0, 32; - %jmp/0xz T_2.21, 4; - %load/vec4 v0x55eb737d2c60_0; - %dup/vec4; - %pushi/vec4 15, 0, 4; - %cmp/u; - %jmp/1 T_2.23, 6; - %dup/vec4; - %pushi/vec4 1, 0, 4; - %cmp/u; - %jmp/1 T_2.24, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.25, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_2.26, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.27, 6; - %vpi_call 2 432 "$display", "runstate %h", v0x55eb737d2c60_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.29; -T_2.23 ; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.29; -T_2.24 ; - %jmp T_2.29; -T_2.25 ; - %jmp T_2.29; -T_2.26 ; - %jmp T_2.29; -T_2.27 ; - %load/vec4 v0x55eb737d26d0_0; - %assign/vec4 v0x55eb737d18b0_0, 0; - %vpi_call 2 424 "$display", "%05h P=\011%h", v0x55eb737d2d40_0, v0x55eb737d26d0_0 {0 0 0}; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %pushi/vec4 0, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.29; -T_2.29 ; - %pop/vec4 1; -T_2.21 ; - %load/vec4 v0x55eb737d2110_0; - %cmpi/e 96, 0, 32; - %jmp/0xz T_2.30, 4; - %load/vec4 v0x55eb737d2c60_0; - %dup/vec4; - %pushi/vec4 15, 0, 4; - %cmp/u; - %jmp/1 T_2.32, 6; - %dup/vec4; - %pushi/vec4 1, 0, 4; - %cmp/u; - %jmp/1 T_2.33, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.34, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_2.35, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.36, 6; - %dup/vec4; - %pushi/vec4 14, 0, 4; - %cmp/u; - %jmp/1 T_2.37, 6; - %vpi_call 2 524 "$display", "runstate %h", v0x55eb737d2c60_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.39; -T_2.32 ; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %load/vec4 v0x55eb737d1990_0; - %assign/vec4 v0x55eb737d2350_0, 0; - %pushi/vec4 0, 0, 20; - %assign/vec4 v0x55eb737d2430_0, 0; - %pushi/vec4 2, 0, 4; - %assign/vec4 v0x55eb737d2510_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d25f0_0, 0; - %vpi_call 2 496 "$write", "%5h GOTO\011", v0x55eb737d2d40_0 {0 0 0}; - %jmp T_2.39; -T_2.33 ; - %jmp T_2.39; -T_2.34 ; - %jmp T_2.39; -T_2.35 ; - %jmp T_2.39; -T_2.36 ; - %load/vec4 v0x55eb737d26d0_0; - %ix/load 5, 0, 0; - %load/vec4 v0x55eb737d25f0_0; - %pad/u 32; - %muli 4, 0, 32; - %ix/vec4 4; - %assign/vec4/off/d v0x55eb737d2430_0, 4, 5; - %vpi_call 2 504 "$write", "%1h", v0x55eb737d26d0_0 {0 0 0}; - %load/vec4 v0x55eb737d25f0_0; - %load/vec4 v0x55eb737d2510_0; - %cmp/e; - %jmp/0xz T_2.40, 4; - %pushi/vec4 14, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.41; -T_2.40 ; - %load/vec4 v0x55eb737d25f0_0; - %addi 1, 0, 4; - %assign/vec4 v0x55eb737d25f0_0, 0; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; -T_2.41 ; - %jmp T_2.39; -T_2.37 ; - %load/vec4 v0x55eb737d2350_0; - %load/vec4 v0x55eb737d2430_0; - %add; - %vpi_call 2 516 "$display", "\011=> %05h", S<0,vec4,u20> {1 0 0}; - %load/vec4 v0x55eb737d2350_0; - %load/vec4 v0x55eb737d2430_0; - %add; - %assign/vec4 v0x55eb737d1990_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %pushi/vec4 0, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.39; -T_2.39 ; - %pop/vec4 1; -T_2.30 ; - %load/vec4 v0x55eb737d2110_0; - %cmpi/e 128, 0, 32; - %jmp/0xz T_2.42, 4; - %load/vec4 v0x55eb737d2c60_0; - %dup/vec4; - %pushi/vec4 15, 0, 4; - %cmp/u; - %jmp/1 T_2.44, 6; - %dup/vec4; - %pushi/vec4 1, 0, 4; - %cmp/u; - %jmp/1 T_2.45, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.46, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_2.47, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.48, 6; - %vpi_call 2 563 "$display", "runstate %h", v0x55eb737d2c60_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.50; -T_2.44 ; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.50; -T_2.45 ; - %jmp T_2.50; -T_2.46 ; - %jmp T_2.50; -T_2.47 ; - %jmp T_2.50; -T_2.48 ; - %load/vec4 v0x55eb737d26d0_0; - %dup/vec4; - %pushi/vec4 0, 0, 4; - %cmp/u; - %jmp/1 T_2.51, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.52, 6; - %dup/vec4; - %pushi/vec4 5, 0, 4; - %cmp/u; - %jmp/1 T_2.53, 6; - %dup/vec4; - %pushi/vec4 13, 0, 4; - %cmp/u; - %jmp/1 T_2.54, 6; - %vpi_call 2 553 "$display", "unhandled instruction prefix 8%h", v0x55eb737d26d0_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.56; -T_2.51 ; - %pushi/vec4 130, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.56; -T_2.52 ; - %pushi/vec4 1152, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.56; -T_2.53 ; - %pushi/vec4 1408, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.56; -T_2.54 ; - %pushi/vec4 3456, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.56; -T_2.56 ; - %pop/vec4 1; - %pushi/vec4 15, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.50; -T_2.50 ; - %pop/vec4 1; -T_2.42 ; - %load/vec4 v0x55eb737d2110_0; - %cmpi/e 130, 0, 32; - %jmp/0xz T_2.57, 4; - %load/vec4 v0x55eb737d2c60_0; - %dup/vec4; - %pushi/vec4 15, 0, 4; - %cmp/u; - %jmp/1 T_2.59, 6; - %dup/vec4; - %pushi/vec4 1, 0, 4; - %cmp/u; - %jmp/1 T_2.60, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.61, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_2.62, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.63, 6; - %vpi_call 2 599 "$display", "DECODE_80 runstate %h", v0x55eb737d2c60_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.65; -T_2.59 ; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.65; -T_2.60 ; - %jmp T_2.65; -T_2.61 ; - %jmp T_2.65; -T_2.62 ; - %jmp T_2.65; -T_2.63 ; - %load/vec4 v0x55eb737d26d0_0; - %dup/vec4; - %pushi/vec4 12, 0, 4; - %cmp/u; - %jmp/1 T_2.66, 6; - %vpi_call 2 589 "$display", "unhandled instruction prefix 80%h", v0x55eb737d26d0_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.68; -T_2.66 ; - %pushi/vec4 49280, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.68; -T_2.68 ; - %pop/vec4 1; - %pushi/vec4 15, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.65; -T_2.65 ; - %pop/vec4 1; -T_2.57 ; - %load/vec4 v0x55eb737d2110_0; - %pushi/vec4 1152, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %load/vec4 v0x55eb737d2110_0; - %pushi/vec4 1408, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %or; - %flag_set/vec4 8; - %jmp/0xz T_2.69, 8; - %load/vec4 v0x55eb737d2c60_0; - %dup/vec4; - %pushi/vec4 15, 0, 4; - %cmp/u; - %jmp/1 T_2.71, 6; - %dup/vec4; - %pushi/vec4 1, 0, 4; - %cmp/u; - %jmp/1 T_2.72, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.73, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_2.74, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.75, 6; - %vpi_call 2 712 "$display", "decstate %h", v0x55eb737d2110_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.77; -T_2.71 ; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.77; -T_2.72 ; - %jmp T_2.77; -T_2.73 ; - %jmp T_2.77; -T_2.74 ; - %jmp T_2.77; -T_2.75 ; - %load/vec4 v0x55eb737d2110_0; - %dup/vec4; - %pushi/vec4 1152, 0, 32; - %cmp/u; - %jmp/1 T_2.78, 6; - %dup/vec4; - %pushi/vec4 1408, 0, 32; - %cmp/u; - %jmp/1 T_2.79, 6; - %jmp T_2.80; -T_2.78 ; - %vpi_call 2 694 "$display", "%05h ST=0\011%h", v0x55eb737d2d40_0, v0x55eb737d26d0_0 {0 0 0}; - %pushi/vec4 0, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x55eb737d26d0_0; - %assign/vec4/off/d v0x55eb737d1f90_0, 4, 5; - %jmp T_2.80; -T_2.79 ; - %vpi_call 2 701 "$display", "%05h ST=1\011%h", v0x55eb737d2d40_0, v0x55eb737d26d0_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x55eb737d26d0_0; - %assign/vec4/off/d v0x55eb737d1f90_0, 4, 5; - %jmp T_2.80; -T_2.80 ; - %pop/vec4 1; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %pushi/vec4 0, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.77; -T_2.77 ; - %pop/vec4 1; -T_2.69 ; - %load/vec4 v0x55eb737d2110_0; - %pushi/vec4 3456, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %load/vec4 v0x55eb737d2110_0; - %pushi/vec4 3968, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %or; - %flag_set/vec4 8; - %jmp/0xz T_2.81, 8; - %load/vec4 v0x55eb737d2c60_0; - %dup/vec4; - %pushi/vec4 15, 0, 4; - %cmp/u; - %jmp/1 T_2.83, 6; - %dup/vec4; - %pushi/vec4 1, 0, 4; - %cmp/u; - %jmp/1 T_2.84, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.85, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_2.86, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.87, 6; - %dup/vec4; - %pushi/vec4 14, 0, 4; - %cmp/u; - %jmp/1 T_2.88, 6; - %vpi_call 2 771 "$display", "decstate %h", v0x55eb737d2110_0 {0 0 0}; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d21d0_0, 0; - %jmp T_2.90; -T_2.83 ; - %pushi/vec4 0, 0, 20; - %assign/vec4 v0x55eb737d2350_0, 0; - %pushi/vec4 4, 0, 4; - %assign/vec4 v0x55eb737d2510_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d25f0_0, 0; - %load/vec4 v0x55eb737d2110_0; - %dup/vec4; - %pushi/vec4 3456, 0, 32; - %cmp/u; - %jmp/1 T_2.91, 6; - %dup/vec4; - %pushi/vec4 3968, 0, 32; - %cmp/u; - %jmp/1 T_2.92, 6; - %jmp T_2.93; -T_2.91 ; - %vpi_call 2 734 "$write", "%5h GOVLNG\011", v0x55eb737d2d40_0 {0 0 0}; - %jmp T_2.93; -T_2.92 ; - %vpi_call 2 735 "$write", "%5h GOSBVL\011", v0x55eb737d2d40_0 {0 0 0}; - %jmp T_2.93; -T_2.93 ; - %pop/vec4 1; - %load/vec4 v0x55eb737d2110_0; - %cmpi/e 3968, 0, 32; - %jmp/0xz T_2.94, 4; - %load/vec4 v0x55eb737d2ba0_0; - %addi 1, 0, 3; - %assign/vec4 v0x55eb737d2ba0_0, 0; -T_2.94 ; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.90; -T_2.84 ; - %jmp T_2.90; -T_2.85 ; - %jmp T_2.90; -T_2.86 ; - %jmp T_2.90; -T_2.87 ; - %load/vec4 v0x55eb737d26d0_0; - %load/vec4 v0x55eb737d25f0_0; - %pad/u 32; - %muli 4, 0, 32; - %ix/vec4 4; - %store/vec4 v0x55eb737d2350_0, 4, 4; - %vpi_call 2 748 "$write", "%1h", v0x55eb737d26d0_0 {0 0 0}; - %load/vec4 v0x55eb737d25f0_0; - %load/vec4 v0x55eb737d2510_0; - %cmp/e; - %jmp/0xz T_2.96, 4; - %pushi/vec4 14, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %jmp T_2.97; -T_2.96 ; - %load/vec4 v0x55eb737d25f0_0; - %addi 1, 0, 4; - %assign/vec4 v0x55eb737d25f0_0, 0; - %pushi/vec4 1, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; -T_2.97 ; - %jmp T_2.90; -T_2.88 ; - %vpi_call 2 760 "$display", "\011=> %5h", v0x55eb737d2350_0 {0 0 0}; - %load/vec4 v0x55eb737d2110_0; - %cmpi/e 3968, 0, 32; - %jmp/0xz T_2.98, 4; - %load/vec4 v0x55eb737d1990_0; - %load/vec4 v0x55eb737d2ba0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x55eb737d1ed0, 0, 4; -T_2.98 ; - %load/vec4 v0x55eb737d2350_0; - %assign/vec4 v0x55eb737d1990_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x55eb737d2c60_0, 0; - %pushi/vec4 0, 0, 32; - %assign/vec4 v0x55eb737d2110_0, 0; - %jmp T_2.90; -T_2.90 ; - %pop/vec4 1; -T_2.81 ; - %jmp T_2; - .thread T_2; - .scope S_0x55eb737b02d0; -T_3 ; - %delay 10, 0; - %load/vec4 v0x55eb737d2ef0_0; - %pushi/vec4 0, 0, 1; - %cmp/e; - %flag_get/vec4 6; - %store/vec4 v0x55eb737d2ef0_0, 0, 1; - %jmp T_3; - .thread T_3; - .scope S_0x55eb737b02d0; -T_4 ; - %end; - .thread T_4; - .scope S_0x55eb737b02d0; -T_5 ; - %vpi_call 2 869 "$display", "starting the simulation" {0 0 0}; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x55eb737d2ef0_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x55eb737d3170_0, 0; - %wait E_0x55eb73766ba0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x55eb737d3170_0, 0; - %wait E_0x55eb73731d20; - %vpi_call 2 875 "$finish" {0 0 0}; - %end; - .thread T_5; -# The file index is used to find the file name in the following table. -:file_names 3; - "N/A"; - ""; - "saturn_core.v"; diff --git a/saturn_core.v b/saturn_core.v index cd428fe..3a9ee6f 100644 --- a/saturn_core.v +++ b/saturn_core.v @@ -47,7 +47,7 @@ module saturn_core ( `else module saturn_core ( input clk_25mhz, - input [6:0] btn, + input [6:0] btn, output wifi_gpio0 ); wire clk; @@ -280,7 +280,7 @@ begin //$display("READ_ROM_VAL -> instruction decoder"); runstate <= RUN_DECODE; case (nibble) - //4'h0 : decstate <= DECODE_0; + 4'h0 : decstate <= DECODE_0; //4'h1 : decstate <= DECODE_1; 4'h2 : decstate <= DECODE_P_EQ; //4'h3 : decstate <= DECODE_LC; @@ -297,27 +297,34 @@ begin end endcase end -/* -task decode_0; - case (decstate ) - DECODE_START: - begin - decstate <= DECODE_0X; - read_state <= READ_START; - end - DECODE_0X: - if (read_state != READ_VALID) read_rom(); - else decode_0x(); - endcase -endtask -task decode_0x; - case (nibble) - 4'h3: inst_rtncc(); - 4'h4: inst_sethex(); - default: instruction_decoder_unhandled(); - endcase -endtask + if (decstate == DECODE_0) + case (runstate) + RUN_DECODE: runstate <= READ_ROM_STA; + READ_ROM_STA, READ_ROM_CLK, READ_ROM_STR: ; + READ_ROM_VAL: + case (nibble) + //4'h3: inst_rtncc(); + //4'h4: inst_sethex(); + default: + begin +`ifdef SIM + $display("%05h 0%h => unimplemented", saved_PC, nibble); +`endif + halt <= 1; + end + endcase + default: + begin +`ifdef SIM + $display("DECODE_0 runstate %h", runstate); +`endif + halt <= 1; + end + endcase + + +/* // 03 RTNCC task inst_rtncc; @@ -550,7 +557,7 @@ endtask begin case (nibble) 4'h0: decstate <= DECODE_80; - //4'h2: decode_82(); + 4'h2: decstate <= DECODE_82; 4'h4: decstate <= DECODE_ST_EQ_0_N; 4'h5: decstate <= DECODE_ST_EQ_1_N; 4'hd: decstate <= DECODE_GOVLNG; @@ -669,20 +676,14 @@ endtask * */ -/* - -task decode_82; - case (decstate ) - DECODE_8X: - begin - decstate <= DECODE_82; - read_state <= READ_START; - end - DECODE_82: - if (read_state != READ_VALID) read_rom(); - else + if (decstate == DECODE_82) + case (runstate) + RUN_DECODE: runstate <= READ_ROM_STA; + READ_ROM_STA, READ_ROM_CLK, READ_ROM_STR: ; + READ_ROM_VAL: begin HST <= HST & ~nibble; +`ifdef SIM case (nibble) 4'h1: $display("%5h XM=0", saved_PC); 4'h2: $display("%5h SB=0", saved_PC); @@ -691,11 +692,18 @@ task decode_82; 4'hf: $display("%5h CLRHST", saved_PC); default: $display("%5h CLRHST %f", saved_PC, nibble); endcase - end_decode(); +`endif + runstate <= RUN_START; + decstate <= DECODE_START; end - endcase -endtask -*/ + default: + begin +`ifdef SIM + $display("DECODE_82 runstate %h", runstate); +`endif + halt <= 1; + end + endcase /****************************************************************************** * 84n ST=0 n