Update files part 1 Co-authored-by: Anthony Kung <hi@anth.dev>
diff --git a/.gitignore b/.gitignore index 144d6b6..81384c3 100644 --- a/.gitignore +++ b/.gitignore
@@ -7,3 +7,5 @@ *.bin *.vvp *.idx +*.out +*.out1
diff --git a/macros/bm/sram_1rw1r_32_256_8_sky130.v b/macros/bm/sram_1rw1r_32_256_8_sky130.v index 84d7514..dc44912 100644 --- a/macros/bm/sram_1rw1r_32_256_8_sky130.v +++ b/macros/bm/sram_1rw1r_32_256_8_sky130.v
@@ -57,6 +57,8 @@ `ifdef DBG if ( !csb0_reg && web0_reg ) $display($time," Reading %m addr0=%X dout0=%X",addr0_reg,mem[addr0_reg]); +`endif +`ifdef SRAM_LOG if ( !csb0_reg && !web0_reg ) $display($time," Writing %m addr0=%X din0=%X wmask0=%b",addr0_reg,din0_reg,wmask0_reg); `endif
diff --git a/openlane/hs32_core1/config.tcl b/openlane/hs32_core1/config.tcl index 2a6b69a..c137ed3 100644 --- a/openlane/hs32_core1/config.tcl +++ b/openlane/hs32_core1/config.tcl
@@ -33,3 +33,6 @@ set ::env(FP_PDN_CORE_RING) 0 set ::env(DIE_AREA) "0 0 1100 1100" set ::env(PL_TARGET_DENSITY) 0.40 + +set ::env(VDD_NETS) [list {vccd1} {vccd2} {vdda1} {vdda2}] +set ::env(GND_NETS) [list {vssd1} {vssd2} {vssa1} {vssa2}]
diff --git a/openlane/hs32_core1/pin_order.cfg b/openlane/hs32_core1/pin_order.cfg index 3502671..a49940f 100644 --- a/openlane/hs32_core1/pin_order.cfg +++ b/openlane/hs32_core1/pin_order.cfg
@@ -4,6 +4,7 @@ wb_.* wbs_.* la_.* +io_.* #N cpu_mask_n.*
diff --git a/openlane/user_project_wrapper/interactive.tcl b/openlane/user_project_wrapper/interactive.tcl index 9af67f1..a55efd5 100644 --- a/openlane/user_project_wrapper/interactive.tcl +++ b/openlane/user_project_wrapper/interactive.tcl
@@ -24,15 +24,18 @@ add_macro_placement sram4 1550 1600 S; # RX buffer for core1 add_macro_placement sram5 2200 1600 N; # RX buffer for core0 - manual_macro_placement f exec -ignorestderr openroad -exit $script_dir/gen_pdn.tcl set_def $::env(pdn_tmp_file_tag).def global_routing_or +add_route_obs detailed_routing +write_powered_verilog -power vccd1 -ground vssd1 +set_netlist $::env(lvs_result_file_tag).powered.v + run_magic run_magic_spice_export
diff --git a/openlane/user_project_wrapper/pin_order.cfg b/openlane/user_project_wrapper/pin_order.cfg index 0717c4b..6de1406 100644 --- a/openlane/user_project_wrapper/pin_order.cfg +++ b/openlane/user_project_wrapper/pin_order.cfg
@@ -1 +1,157 @@ -../user_project_wrapper_empty/pin_order.cfg \ No newline at end of file +#BUS_SORT +#NR +analog_io\[15\] +io_in\[15\] +io_out\[15\] +io_oeb\[15\] +analog_io\[16\] +io_in\[16\] +io_out\[16\] +io_oeb\[16\] +analog_io\[17\] +io_in\[17\] +io_out\[17\] +io_oeb\[17\] +analog_io\[18\] +io_in\[18\] +io_out\[18\] +io_oeb\[18\] +analog_io\[19\] +io_in\[19\] +io_out\[19\] +io_oeb\[19\] +analog_io\[20\] +io_in\[20\] +io_out\[20\] +io_oeb\[20\] +analog_io\[21\] +io_in\[21\] +io_out\[21\] +io_oeb\[21\] +analog_io\[22\] +io_in\[22\] +io_out\[22\] +io_oeb\[22\] +analog_io\[23\] +io_in\[23\] +io_out\[23\] +io_oeb\[23\] + +#S +wb_.* +wbs_.* +la_.* +user_clock2 + +#E +analog_io\[0\] +io_in\[0\] +io_out\[0\] +io_oeb\[0\] +analog_io\[1\] +io_in\[1\] +io_out\[1\] +io_oeb\[1\] +analog_io\[2\] +io_in\[2\] +io_out\[2\] +io_oeb\[2\] +analog_io\[3\] +io_in\[3\] +io_out\[3\] +io_oeb\[3\] +analog_io\[4\] +io_in\[4\] +io_out\[4\] +io_oeb\[4\] +analog_io\[5\] +io_in\[5\] +io_out\[5\] +io_oeb\[5\] +analog_io\[6\] +io_in\[6\] +io_out\[6\] +io_oeb\[6\] +analog_io\[7\] +io_in\[7\] +io_out\[7\] +io_oeb\[7\] +analog_io\[8\] +io_in\[8\] +io_out\[8\] +io_oeb\[8\] +analog_io\[9\] +io_in\[9\] +io_out\[9\] +io_oeb\[9\] +analog_io\[10\] +io_in\[10\] +io_out\[10\] +io_oeb\[10\] +analog_io\[11\] +io_in\[11\] +io_out\[11\] +io_oeb\[11\] +analog_io\[12\] +io_in\[12\] +io_out\[12\] +io_oeb\[12\] +analog_io\[13\] +io_in\[13\] +io_out\[13\] +io_oeb\[13\] +analog_io\[14\] +io_in\[14\] +io_out\[14\] +io_oeb\[14\] + +#WR +analog_io\[24\] +io_in\[24\] +io_out\[24\] +io_oeb\[24\] +analog_io\[25\] +io_in\[25\] +io_out\[25\] +io_oeb\[25\] +analog_io\[26\] +io_in\[26\] +io_out\[26\] +io_oeb\[26\] +analog_io\[27\] +io_in\[27\] +io_out\[27\] +io_oeb\[27\] +analog_io\[28\] +io_in\[28\] +io_out\[28\] +io_oeb\[28\] +analog_io\[29\] +io_in\[29\] +io_out\[29\] +io_oeb\[29\] +analog_io\[30\] +io_in\[30\] +io_out\[30\] +io_oeb\[30\] +io_in\[31\] +io_out\[31\] +io_oeb\[31\] +io_in\[32\] +io_out\[32\] +io_oeb\[32\] +io_in\[33\] +io_out\[33\] +io_oeb\[33\] +io_in\[34\] +io_out\[34\] +io_oeb\[34\] +io_in\[35\] +io_out\[35\] +io_oeb\[35\] +io_in\[36\] +io_out\[36\] +io_oeb\[36\] +io_in\[37\] +io_out\[37\] +io_oeb\[37\]
diff --git a/verilog/dv/caravel/hs32_soc/Makefile b/verilog/dv/caravel/hs32_soc/Makefile new file mode 100644 index 0000000..8352036 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/Makefile
@@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +# ---- Test patterns for project striVe ---- + +.SUFFIXES: +.SILENT: clean all + +PATTERNS = core1test1 core1test2 core1test3 core1test4 core1test5 core1test6 + +all: ${PATTERNS} + for i in ${PATTERNS}; do \ + ( cd $$i && make &> verify.log && grep Monitor verify.log) ; \ + done + +clean: ${PATTERNS} + for i in ${PATTERNS}; do \ + ( cd $$i && make clean ) ; \ + done + +.PHONY: clean all
diff --git a/verilog/dv/caravel/hs32_soc/core1mem/Makefile b/verilog/dv/caravel/hs32_soc/core1mem/Makefile index e6f909c..271ceb4 100644 --- a/verilog/dv/caravel/hs32_soc/core1mem/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1mem/Makefile
@@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1mem/mem_tb.v b/verilog/dv/caravel/hs32_soc/core1mem/mem_tb.v index ba9d7f1..04405ba 100644 --- a/verilog/dv/caravel/hs32_soc/core1mem/mem_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1mem/mem_tb.v
@@ -66,9 +66,9 @@ initial begin // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); + wait(tb.uut.mprj.core1.core.EXEC.regfile_s.regs[0] == 16'hCAFE); + wait(tb.uut.mprj.core1.core.EXEC.regfile_s.regs[1] == 16'h5); + wait(tb.uut.mprj.core1.core.EXEC.regfile_s.regs[2] == 16'hCAFE); $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); //$finish; end
diff --git a/verilog/dv/caravel/hs32_soc/core1mem/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1mem/tb.gtkw index 361d82b..cd40e11 100644 --- a/verilog/dv/caravel/hs32_soc/core1mem/tb.gtkw +++ b/verilog/dv/caravel/hs32_soc/core1mem/tb.gtkw
@@ -14,8 +14,8 @@ [treeopen] tb.uut. [treeopen] tb.uut.mprj. [treeopen] tb.uut.mprj.core1. -[treeopen] tb.uut.mprj.core1.core1. -[treeopen] tb.uut.mprj.core1.core1.EXEC. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. [treeopen] tb.uut.mprj.sram0. [sst_width] 265 [signals_width] 269 @@ -51,14 +51,14 @@ @c00200 -PQ @22 -tb.uut.mprj.core1.core1.FETCH.\fifo[0][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[1][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[2][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[3][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[4][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[5][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[6][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[7][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] @1401200 -PQ @800200 @@ -104,198 +104,198 @@ @c00200 -Decode @28 -tb.uut.mprj.core1.core1.DECODE.clk -tb.uut.mprj.core1.core1.DECODE.reset +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset @22 -tb.uut.mprj.core1.core1.DECODE.int_line[23:0] +tb.uut.mprj.core1.core.DECODE.int_line[23:0] @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqd +tb.uut.mprj.core1.core.DECODE.reqd [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdyd +tb.uut.mprj.core1.core.DECODE.rdyd @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqe +tb.uut.mprj.core1.core.DECODE.reqe [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdye -tb.uut.mprj.core1.core1.DECODE.full +tb.uut.mprj.core1.core.DECODE.rdye +tb.uut.mprj.core1.core.DECODE.full @200 - @22 -tb.uut.mprj.core1.core1.DECODE.instd[31:0] +tb.uut.mprj.core1.core.DECODE.instd[31:0] @200 - @22 -tb.uut.mprj.core1.core1.DECODE.aluop[3:0] +tb.uut.mprj.core1.core.DECODE.aluop[3:0] @28 -tb.uut.mprj.core1.core1.DECODE.bank[1:0] +tb.uut.mprj.core1.core.DECODE.bank[1:0] @22 -tb.uut.mprj.core1.core1.DECODE.ctlsig[15:0] -tb.uut.mprj.core1.core1.DECODE.imm[15:0] -tb.uut.mprj.core1.core1.DECODE.rd[3:0] -tb.uut.mprj.core1.core1.DECODE.rm[3:0] -tb.uut.mprj.core1.core1.DECODE.rn[3:0] -tb.uut.mprj.core1.core1.DECODE.shift[4:0] +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] @1401200 -Decode @c00200 -Execute @28 -tb.uut.mprj.core1.core1.EXEC.clk +tb.uut.mprj.core1.core.EXEC.clk [color] 3 -tb.uut.mprj.core1.core1.EXEC.req +tb.uut.mprj.core1.core.EXEC.req [color] 3 -tb.uut.mprj.core1.core1.EXEC.rdy +tb.uut.mprj.core1.core.EXEC.rdy @22 -tb.uut.mprj.core1.core1.EXEC.state[3:0] +tb.uut.mprj.core1.core.EXEC.state[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.fault -tb.uut.mprj.core1.core1.EXEC.int_inval +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval @c00200 -Module I/O @28 -tb.uut.mprj.core1.core1.EXEC.flush +tb.uut.mprj.core1.core.EXEC.flush @22 -tb.uut.mprj.core1.core1.EXEC.newpc[31:0] +tb.uut.mprj.core1.core.EXEC.newpc[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.aluop[3:0] -tb.uut.mprj.core1.core1.EXEC.shift[4:0] -tb.uut.mprj.core1.core1.EXEC.imm[15:0] -tb.uut.mprj.core1.core1.EXEC.rd[3:0] -tb.uut.mprj.core1.core1.EXEC.rm[3:0] -tb.uut.mprj.core1.core1.EXEC.rn[3:0] +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.ctlsig[15:0] -tb.uut.mprj.core1.core1.EXEC.bank[1:0] +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.stbm +tb.uut.mprj.core1.core.EXEC.stbm [color] 3 -tb.uut.mprj.core1.core1.EXEC.ackm +tb.uut.mprj.core1.core.EXEC.ackm [color] 3 -tb.uut.mprj.core1.core1.EXEC.stlm +tb.uut.mprj.core1.core.EXEC.stlm @22 -tb.uut.mprj.core1.core1.EXEC.addr[31:0] -tb.uut.mprj.core1.core1.EXEC.dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtwm[31:0] +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.rw_mem +tb.uut.mprj.core1.core.EXEC.rw_mem @200 - @28 -tb.uut.mprj.core1.core1.EXEC.intrq +tb.uut.mprj.core1.core.EXEC.intrq @1401200 -Module I/O @c00200 -Internal Bus @22 -tb.uut.mprj.core1.core1.EXEC.ibus1[31:0] -tb.uut.mprj.core1.core1.EXEC.ibus2[31:0] -tb.uut.mprj.core1.core1.EXEC.obus[31:0] -tb.uut.mprj.core1.core1.EXEC.aluout[31:0] +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] @1401200 -Internal Bus @c00200 -ALU @22 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv[3:0] +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv_out[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.carry +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry @22 -tb.uut.mprj.core1.core1.EXEC.alu.i_a[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_b[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_op[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_r[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] @1401200 -ALU @c00200 -Special Registers @22 -tb.uut.mprj.core1.core1.EXEC.r_dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtw[31:0] -tb.uut.mprj.core1.core1.EXEC.mar[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_s[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_u[31:0] -tb.uut.mprj.core1.core1.EXEC.lr_i[31:0] -tb.uut.mprj.core1.core1.EXEC.sp_i[31:0] -tb.uut.mprj.core1.core1.EXEC.mcr_s[31:0] -tb.uut.mprj.core1.core1.EXEC.flags[31:0] +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +tb.uut.mprj.core1.core.EXEC.flags[31:0] @1401200 -Special Registers @c00200 -Register Control @28 -tb.uut.mprj.core1.core1.EXEC.reg_we -tb.uut.mprj.core1.core1.EXEC.reg_we_s -tb.uut.mprj.core1.core1.EXEC.reg_we_u +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadra[3:0] -tb.uut.mprj.core1.core1.EXEC.regouta[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadrb[3:0] -tb.uut.mprj.core1.core1.EXEC.regoutb[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] @1401200 -Register Control @c00200 -Supervisor Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_s.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] @1401200 -Supervisor Regfile @c00200 -User Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_u.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] @1401200 -User Regfile -Execute
diff --git a/verilog/dv/caravel/hs32_soc/core1test1.no/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test1.no/tb.gtkw deleted file mode 100644 index 62050ed..0000000 --- a/verilog/dv/caravel/hs32_soc/core1test1.no/tb.gtkw +++ /dev/null
@@ -1,285 +0,0 @@ -[*] -[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI -[*] Wed Dec 16 20:43:24 2020 -[*] -[dumpfile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test1/dump.vcd" -[dumpfile_mtime] "Wed Dec 16 20:32:20 2020" -[dumpfile_size] 314705958 -[savefile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test1/tb.gtkw" -[timestart] 227850300 -[size] 1536 801 -[pos] -1 -1 -*-16.106964 227940000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -[treeopen] tb. -[treeopen] tb.uut. -[treeopen] tb.uut.mprj. -[treeopen] tb.uut.mprj.core1. -[treeopen] tb.uut.mprj.core1.core1. -[treeopen] tb.uut.mprj.core1.core1.EXEC. -[sst_width] 265 -[signals_width] 269 -[sst_expanded] 1 -[sst_vpaned_height] 222 -@c00200 --WBS -@28 -tb.uut.mprj.wb_clk_i -tb.uut.mprj.wb_rst_i -tb.uut.mprj.wbs_ack_o -@22 -tb.uut.mprj.wbs_adr_i[31:0] -@28 -tb.uut.mprj.wbs_cyc_i -@22 -tb.uut.mprj.wbs_dat_i[31:0] -tb.uut.mprj.wbs_dat_o[31:0] -tb.uut.mprj.wbs_sel_i[3:0] -@28 -tb.uut.mprj.wbs_stb_i -tb.uut.mprj.wbs_we_i -@1401200 --WBS -@28 -tb.uut.mprj.core1.ram_ce -tb.uut.mprj.core1.bsy -tb.uut.mprj.sram0.csb0 -tb.uut.mprj.sram0.csb0_reg -@c00200 --PQ -@22 -tb.uut.mprj.core1.core1.FETCH.\fifo[0][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[1][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[2][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[3][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[4][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[5][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[6][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[7][31:0] -@1401200 --PQ -@800200 --BRAM CTL -@22 -tb.uut.mprj.core1.bram_ctl.i_addr[11:0] -@28 -tb.uut.mprj.core1.bram_ctl.i_clk -@22 -tb.uut.mprj.core1.bram_ctl.i_dwrite[31:0] -@28 -tb.uut.mprj.core1.bram_ctl.i_reset -tb.uut.mprj.core1.bram_ctl.i_rw -[color] 3 -tb.uut.mprj.core1.bram_ctl.i_stb -[color] 3 -tb.uut.mprj.core1.bram_ctl.o_ack -@22 -tb.uut.mprj.core1.bram_ctl.o_dread[31:0] -@28 -tb.uut.mprj.core1.bram_ctl.r_bsy -@200 -- -@22 -tb.uut.mprj.core1.bram_ctl.r_dread[31:0] -tb.uut.mprj.core1.bram_ctl.dbuf[31:0] -@1000200 --BRAM CTL -@c00200 --Decode -@28 -tb.uut.mprj.core1.core1.DECODE.clk -tb.uut.mprj.core1.core1.DECODE.reset -@22 -tb.uut.mprj.core1.core1.DECODE.int_line[23:0] -@28 -[color] 3 -tb.uut.mprj.core1.core1.DECODE.reqd -[color] 3 -tb.uut.mprj.core1.core1.DECODE.rdyd -@200 -- -@28 -[color] 3 -tb.uut.mprj.core1.core1.DECODE.reqe -[color] 3 -tb.uut.mprj.core1.core1.DECODE.rdye -tb.uut.mprj.core1.core1.DECODE.full -@200 -- -@22 -tb.uut.mprj.core1.core1.DECODE.instd[31:0] -@200 -- -@22 -tb.uut.mprj.core1.core1.DECODE.aluop[3:0] -@28 -tb.uut.mprj.core1.core1.DECODE.bank[1:0] -@22 -tb.uut.mprj.core1.core1.DECODE.ctlsig[15:0] -tb.uut.mprj.core1.core1.DECODE.imm[15:0] -tb.uut.mprj.core1.core1.DECODE.rd[3:0] -tb.uut.mprj.core1.core1.DECODE.rm[3:0] -tb.uut.mprj.core1.core1.DECODE.rn[3:0] -tb.uut.mprj.core1.core1.DECODE.shift[4:0] -@1401200 --Decode -@c00200 --Execute -@28 -tb.uut.mprj.core1.core1.EXEC.clk -[color] 3 -tb.uut.mprj.core1.core1.EXEC.req -[color] 3 -tb.uut.mprj.core1.core1.EXEC.rdy -@22 -tb.uut.mprj.core1.core1.EXEC.state[3:0] -@28 -tb.uut.mprj.core1.core1.EXEC.fault -tb.uut.mprj.core1.core1.EXEC.int_inval -@800200 --Module I/O -@28 -tb.uut.mprj.core1.core1.EXEC.flush -@22 -tb.uut.mprj.core1.core1.EXEC.newpc[31:0] -@200 -- -@22 -tb.uut.mprj.core1.core1.EXEC.aluop[3:0] -tb.uut.mprj.core1.core1.EXEC.shift[4:0] -tb.uut.mprj.core1.core1.EXEC.imm[15:0] -tb.uut.mprj.core1.core1.EXEC.rd[3:0] -tb.uut.mprj.core1.core1.EXEC.rm[3:0] -tb.uut.mprj.core1.core1.EXEC.rn[3:0] -@28 -tb.uut.mprj.core1.core1.EXEC.ctlsig[15:0] -tb.uut.mprj.core1.core1.EXEC.bank[1:0] -@200 -- -@28 -[color] 3 -tb.uut.mprj.core1.core1.EXEC.stbm -[color] 3 -tb.uut.mprj.core1.core1.EXEC.ackm -[color] 3 -tb.uut.mprj.core1.core1.EXEC.stlm -@22 -tb.uut.mprj.core1.core1.EXEC.addr[31:0] -tb.uut.mprj.core1.core1.EXEC.dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtwm[31:0] -@28 -[color] 3 -tb.uut.mprj.core1.core1.EXEC.rw_mem -@200 -- -@28 -tb.uut.mprj.core1.core1.EXEC.intrq -@1000200 --Module I/O -@c00200 --Internal Bus -@22 -tb.uut.mprj.core1.core1.EXEC.ibus1[31:0] -tb.uut.mprj.core1.core1.EXEC.ibus2[31:0] -tb.uut.mprj.core1.core1.EXEC.obus[31:0] -tb.uut.mprj.core1.core1.EXEC.aluout[31:0] -@1401200 --Internal Bus -@c00200 --ALU -@22 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv[3:0] -@28 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv_out[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.carry -@22 -tb.uut.mprj.core1.core1.EXEC.alu.i_a[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_b[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_op[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_r[31:0] -@1401200 --ALU -@c00200 --Special Registers -@22 -tb.uut.mprj.core1.core1.EXEC.r_dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtw[31:0] -tb.uut.mprj.core1.core1.EXEC.mar[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_s[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_u[31:0] -tb.uut.mprj.core1.core1.EXEC.lr_i[31:0] -tb.uut.mprj.core1.core1.EXEC.sp_i[31:0] -tb.uut.mprj.core1.core1.EXEC.mcr_s[31:0] -tb.uut.mprj.core1.core1.EXEC.flags[31:0] -@1401200 --Special Registers -@c00200 --Register Control -@28 -tb.uut.mprj.core1.core1.EXEC.reg_we -tb.uut.mprj.core1.core1.EXEC.reg_we_s -tb.uut.mprj.core1.core1.EXEC.reg_we_u -@200 -- -@22 -tb.uut.mprj.core1.core1.EXEC.regadra[3:0] -tb.uut.mprj.core1.core1.EXEC.regouta[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_u[31:0] -@200 -- -@22 -tb.uut.mprj.core1.core1.EXEC.regadrb[3:0] -tb.uut.mprj.core1.core1.EXEC.regoutb[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_u[31:0] -@1401200 --Register Control -@800200 --Supervisor Regfile -@22 -tb.uut.mprj.core1.core1.EXEC.regfile_s.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[15][31:0] -@1000200 --Supervisor Regfile -@c00200 --User Regfile -@22 -tb.uut.mprj.core1.core1.EXEC.regfile_u.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[15][31:0] -@1401200 --User Regfile --Execute -[pattern_trace] 1 -[pattern_trace] 0
diff --git a/verilog/dv/caravel/hs32_soc/core1test1.no/test1.c b/verilog/dv/caravel/hs32_soc/core1test1.no/test1.c deleted file mode 100644 index 4a9d687..0000000 --- a/verilog/dv/caravel/hs32_soc/core1test1.no/test1.c +++ /dev/null
@@ -1,56 +0,0 @@ -#include "../../defs.h" - -void main() -{ - // Reset - reg_la0_ena = 0x00000000; // [31:0] - reg_la1_ena = 0xFFFFFFFF; // [63:32] - reg_la2_ena = 0xFFFFFFFF; // [95:64] - reg_la3_ena = 0xFFFFFFFF; // [127:96] - - // Reset and control bus - reg_la0_data = 0b01; // [0] is high means reset - reg_la0_data = 0b00; // [0] is low means stop reset - - // Write - ((volatile uint32_t*) 0x30000000)[0] = 0x2400BEEF; - ((volatile uint32_t*) 0x30000000)[1] = 0x24100ADD; - ((volatile uint32_t*) 0x30000000)[2] = 0x20201000; - ((volatile uint32_t*) 0x30000000)[3] = 0x60001000; - ((volatile uint32_t*) 0x30000000)[4] = 0x30020000; - ((volatile uint32_t*) 0x30000000)[5] = 0x10120000; - ((volatile uint32_t*) 0x30000000)[6] = 0x24300BAD; - ((volatile uint32_t*) 0x30000000)[7] = 0x24502262; - ((volatile uint32_t*) 0x30000000)[8] = 0x20505800; - ((volatile uint32_t*) 0x30000000)[9] = 0x24500000; - ((volatile uint32_t*) 0x30000000)[10] = 0x30530000; - ((volatile uint32_t*) 0x30000000)[11] = 0x24400BAD; - ((volatile uint32_t*) 0x30000000)[12] = 0x24502166; - ((volatile uint32_t*) 0x30000000)[13] = 0x20505800; - ((volatile uint32_t*) 0x30000000)[14] = 0x24500000; - ((volatile uint32_t*) 0x30000000)[15] = 0x30540000; - ((volatile uint32_t*) 0x30000000)[16] = 0x68001000; - ((volatile uint32_t*) 0x30000000)[17] = 0x52000BAD; - ((volatile uint32_t*) 0x30000000)[18] = 0x68012000; - ((volatile uint32_t*) 0x30000000)[19] = 0x59000B09; - ((volatile uint32_t*) 0x30000000)[20] = 0x20706800; - - // Release control and reset - reg_la0_data = 0b11; // [1] is high means release control back to hs32 - reg_la0_data = 0b10; - - // Configure lower 8-IOs as user output - // Observe counter value in the testbench - reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT; - reg_mprj_io_1 = GPIO_MODE_USER_STD_OUTPUT; - reg_mprj_io_2 = GPIO_MODE_USER_STD_OUTPUT; - reg_mprj_io_3 = GPIO_MODE_USER_STD_OUTPUT; - reg_mprj_io_4 = GPIO_MODE_USER_STD_OUTPUT; - reg_mprj_io_5 = GPIO_MODE_USER_STD_OUTPUT; - reg_mprj_io_6 = GPIO_MODE_USER_STD_OUTPUT; - reg_mprj_io_7 = GPIO_MODE_USER_STD_OUTPUT; - - // Apply configuration - reg_mprj_xfer = 1; - while (reg_mprj_xfer == 1); -}
diff --git a/verilog/dv/caravel/hs32_soc/core1test1/Makefile b/verilog/dv/caravel/hs32_soc/core1test1/Makefile index 245b54a..3bd8310 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test1/Makefile
@@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test1/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test1/tb.gtkw index 361d82b..cd40e11 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1/tb.gtkw +++ b/verilog/dv/caravel/hs32_soc/core1test1/tb.gtkw
@@ -14,8 +14,8 @@ [treeopen] tb.uut. [treeopen] tb.uut.mprj. [treeopen] tb.uut.mprj.core1. -[treeopen] tb.uut.mprj.core1.core1. -[treeopen] tb.uut.mprj.core1.core1.EXEC. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. [treeopen] tb.uut.mprj.sram0. [sst_width] 265 [signals_width] 269 @@ -51,14 +51,14 @@ @c00200 -PQ @22 -tb.uut.mprj.core1.core1.FETCH.\fifo[0][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[1][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[2][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[3][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[4][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[5][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[6][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[7][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] @1401200 -PQ @800200 @@ -104,198 +104,198 @@ @c00200 -Decode @28 -tb.uut.mprj.core1.core1.DECODE.clk -tb.uut.mprj.core1.core1.DECODE.reset +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset @22 -tb.uut.mprj.core1.core1.DECODE.int_line[23:0] +tb.uut.mprj.core1.core.DECODE.int_line[23:0] @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqd +tb.uut.mprj.core1.core.DECODE.reqd [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdyd +tb.uut.mprj.core1.core.DECODE.rdyd @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqe +tb.uut.mprj.core1.core.DECODE.reqe [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdye -tb.uut.mprj.core1.core1.DECODE.full +tb.uut.mprj.core1.core.DECODE.rdye +tb.uut.mprj.core1.core.DECODE.full @200 - @22 -tb.uut.mprj.core1.core1.DECODE.instd[31:0] +tb.uut.mprj.core1.core.DECODE.instd[31:0] @200 - @22 -tb.uut.mprj.core1.core1.DECODE.aluop[3:0] +tb.uut.mprj.core1.core.DECODE.aluop[3:0] @28 -tb.uut.mprj.core1.core1.DECODE.bank[1:0] +tb.uut.mprj.core1.core.DECODE.bank[1:0] @22 -tb.uut.mprj.core1.core1.DECODE.ctlsig[15:0] -tb.uut.mprj.core1.core1.DECODE.imm[15:0] -tb.uut.mprj.core1.core1.DECODE.rd[3:0] -tb.uut.mprj.core1.core1.DECODE.rm[3:0] -tb.uut.mprj.core1.core1.DECODE.rn[3:0] -tb.uut.mprj.core1.core1.DECODE.shift[4:0] +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] @1401200 -Decode @c00200 -Execute @28 -tb.uut.mprj.core1.core1.EXEC.clk +tb.uut.mprj.core1.core.EXEC.clk [color] 3 -tb.uut.mprj.core1.core1.EXEC.req +tb.uut.mprj.core1.core.EXEC.req [color] 3 -tb.uut.mprj.core1.core1.EXEC.rdy +tb.uut.mprj.core1.core.EXEC.rdy @22 -tb.uut.mprj.core1.core1.EXEC.state[3:0] +tb.uut.mprj.core1.core.EXEC.state[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.fault -tb.uut.mprj.core1.core1.EXEC.int_inval +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval @c00200 -Module I/O @28 -tb.uut.mprj.core1.core1.EXEC.flush +tb.uut.mprj.core1.core.EXEC.flush @22 -tb.uut.mprj.core1.core1.EXEC.newpc[31:0] +tb.uut.mprj.core1.core.EXEC.newpc[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.aluop[3:0] -tb.uut.mprj.core1.core1.EXEC.shift[4:0] -tb.uut.mprj.core1.core1.EXEC.imm[15:0] -tb.uut.mprj.core1.core1.EXEC.rd[3:0] -tb.uut.mprj.core1.core1.EXEC.rm[3:0] -tb.uut.mprj.core1.core1.EXEC.rn[3:0] +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.ctlsig[15:0] -tb.uut.mprj.core1.core1.EXEC.bank[1:0] +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.stbm +tb.uut.mprj.core1.core.EXEC.stbm [color] 3 -tb.uut.mprj.core1.core1.EXEC.ackm +tb.uut.mprj.core1.core.EXEC.ackm [color] 3 -tb.uut.mprj.core1.core1.EXEC.stlm +tb.uut.mprj.core1.core.EXEC.stlm @22 -tb.uut.mprj.core1.core1.EXEC.addr[31:0] -tb.uut.mprj.core1.core1.EXEC.dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtwm[31:0] +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.rw_mem +tb.uut.mprj.core1.core.EXEC.rw_mem @200 - @28 -tb.uut.mprj.core1.core1.EXEC.intrq +tb.uut.mprj.core1.core.EXEC.intrq @1401200 -Module I/O @c00200 -Internal Bus @22 -tb.uut.mprj.core1.core1.EXEC.ibus1[31:0] -tb.uut.mprj.core1.core1.EXEC.ibus2[31:0] -tb.uut.mprj.core1.core1.EXEC.obus[31:0] -tb.uut.mprj.core1.core1.EXEC.aluout[31:0] +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] @1401200 -Internal Bus @c00200 -ALU @22 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv[3:0] +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv_out[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.carry +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry @22 -tb.uut.mprj.core1.core1.EXEC.alu.i_a[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_b[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_op[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_r[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] @1401200 -ALU @c00200 -Special Registers @22 -tb.uut.mprj.core1.core1.EXEC.r_dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtw[31:0] -tb.uut.mprj.core1.core1.EXEC.mar[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_s[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_u[31:0] -tb.uut.mprj.core1.core1.EXEC.lr_i[31:0] -tb.uut.mprj.core1.core1.EXEC.sp_i[31:0] -tb.uut.mprj.core1.core1.EXEC.mcr_s[31:0] -tb.uut.mprj.core1.core1.EXEC.flags[31:0] +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +tb.uut.mprj.core1.core.EXEC.flags[31:0] @1401200 -Special Registers @c00200 -Register Control @28 -tb.uut.mprj.core1.core1.EXEC.reg_we -tb.uut.mprj.core1.core1.EXEC.reg_we_s -tb.uut.mprj.core1.core1.EXEC.reg_we_u +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadra[3:0] -tb.uut.mprj.core1.core1.EXEC.regouta[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadrb[3:0] -tb.uut.mprj.core1.core1.EXEC.regoutb[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] @1401200 -Register Control @c00200 -Supervisor Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_s.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] @1401200 -Supervisor Regfile @c00200 -User Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_u.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] @1401200 -User Regfile -Execute
diff --git a/verilog/dv/caravel/hs32_soc/core1test1/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test1/test1_tb.v index 433d28e..eab77f8 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test1/test1_tb.v
@@ -8,13 +8,15 @@ `include "spiflash.v" module tb(); + parameter TEST_ID = 1; + reg clock; - reg RSTB; + reg RSTB; reg power1, power2; reg power3, power4; - wire gpio; - wire [37:0] mprj_io; + wire gpio; + wire [37:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; @@ -29,6 +31,8 @@ clock = 0; end + reg failed = 1; + initial begin $dumpfile("tb.vcd"); $dumpvars(0, tb); @@ -37,9 +41,11 @@ repeat (1000) @(posedge clock); // $display("+1000 cycles"); end - //$display("%c[1;31m",27); - //$display("Test 1: Failed (timed out)!"); - //$display("%c[0m",27); + if(failed) begin + $display("%c[1;31m",27); + $display("Test 1: Failed (timed out)!"); + $display("%c[0m",27); + end $finish; end @@ -65,12 +71,22 @@ end initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; + // MOV r0 <- 0xCAFE + wait(tb.uut.mprj.core1.core.EXEC.regfile_s.regs[0] == 32'hCAFE); + // MOV r1 <- 5 + wait(tb.uut.mprj.core1.core.EXEC.regfile_s.regs[1] == 32'h5); + // LDR r2 <- [r1+1] + wait(tb.uut.mprj.core1.core.EXEC.regfile_s.regs[2] == 32'hCAFE); + failed = 0; + end + + always @(*) begin + if(tb.uut.mprj.core1.core.EXEC.fault) begin + $display("%c[1;31m",27); + $display("Test %d: Faulted!", TEST_ID); + $display("%c[0m",27); + $finish; + end end always @(mprj_io) begin @@ -125,3 +141,14 @@ ); endmodule `default_nettype wire + +module assert(input clk, input test); + always @(posedge clk) + begin + if (test !== 1) + begin + $display("ASSERTION FAILED in %m"); + $finish; + end + end +endmodule
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/Makefile b/verilog/dv/caravel/hs32_soc/core1test2/Makefile index 245b54a..d3a6346 100644 --- a/verilog/dv/caravel/hs32_soc/core1test2/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test2/Makefile
@@ -9,7 +9,7 @@ .SUFFIXES: -PATTERN = test1 +PATTERN = test2 all: ${PATTERN:=.vcd} @@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test2/tb.gtkw index 361d82b..cd40e11 100644 --- a/verilog/dv/caravel/hs32_soc/core1test2/tb.gtkw +++ b/verilog/dv/caravel/hs32_soc/core1test2/tb.gtkw
@@ -14,8 +14,8 @@ [treeopen] tb.uut. [treeopen] tb.uut.mprj. [treeopen] tb.uut.mprj.core1. -[treeopen] tb.uut.mprj.core1.core1. -[treeopen] tb.uut.mprj.core1.core1.EXEC. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. [treeopen] tb.uut.mprj.sram0. [sst_width] 265 [signals_width] 269 @@ -51,14 +51,14 @@ @c00200 -PQ @22 -tb.uut.mprj.core1.core1.FETCH.\fifo[0][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[1][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[2][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[3][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[4][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[5][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[6][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[7][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] @1401200 -PQ @800200 @@ -104,198 +104,198 @@ @c00200 -Decode @28 -tb.uut.mprj.core1.core1.DECODE.clk -tb.uut.mprj.core1.core1.DECODE.reset +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset @22 -tb.uut.mprj.core1.core1.DECODE.int_line[23:0] +tb.uut.mprj.core1.core.DECODE.int_line[23:0] @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqd +tb.uut.mprj.core1.core.DECODE.reqd [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdyd +tb.uut.mprj.core1.core.DECODE.rdyd @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqe +tb.uut.mprj.core1.core.DECODE.reqe [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdye -tb.uut.mprj.core1.core1.DECODE.full +tb.uut.mprj.core1.core.DECODE.rdye +tb.uut.mprj.core1.core.DECODE.full @200 - @22 -tb.uut.mprj.core1.core1.DECODE.instd[31:0] +tb.uut.mprj.core1.core.DECODE.instd[31:0] @200 - @22 -tb.uut.mprj.core1.core1.DECODE.aluop[3:0] +tb.uut.mprj.core1.core.DECODE.aluop[3:0] @28 -tb.uut.mprj.core1.core1.DECODE.bank[1:0] +tb.uut.mprj.core1.core.DECODE.bank[1:0] @22 -tb.uut.mprj.core1.core1.DECODE.ctlsig[15:0] -tb.uut.mprj.core1.core1.DECODE.imm[15:0] -tb.uut.mprj.core1.core1.DECODE.rd[3:0] -tb.uut.mprj.core1.core1.DECODE.rm[3:0] -tb.uut.mprj.core1.core1.DECODE.rn[3:0] -tb.uut.mprj.core1.core1.DECODE.shift[4:0] +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] @1401200 -Decode @c00200 -Execute @28 -tb.uut.mprj.core1.core1.EXEC.clk +tb.uut.mprj.core1.core.EXEC.clk [color] 3 -tb.uut.mprj.core1.core1.EXEC.req +tb.uut.mprj.core1.core.EXEC.req [color] 3 -tb.uut.mprj.core1.core1.EXEC.rdy +tb.uut.mprj.core1.core.EXEC.rdy @22 -tb.uut.mprj.core1.core1.EXEC.state[3:0] +tb.uut.mprj.core1.core.EXEC.state[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.fault -tb.uut.mprj.core1.core1.EXEC.int_inval +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval @c00200 -Module I/O @28 -tb.uut.mprj.core1.core1.EXEC.flush +tb.uut.mprj.core1.core.EXEC.flush @22 -tb.uut.mprj.core1.core1.EXEC.newpc[31:0] +tb.uut.mprj.core1.core.EXEC.newpc[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.aluop[3:0] -tb.uut.mprj.core1.core1.EXEC.shift[4:0] -tb.uut.mprj.core1.core1.EXEC.imm[15:0] -tb.uut.mprj.core1.core1.EXEC.rd[3:0] -tb.uut.mprj.core1.core1.EXEC.rm[3:0] -tb.uut.mprj.core1.core1.EXEC.rn[3:0] +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.ctlsig[15:0] -tb.uut.mprj.core1.core1.EXEC.bank[1:0] +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.stbm +tb.uut.mprj.core1.core.EXEC.stbm [color] 3 -tb.uut.mprj.core1.core1.EXEC.ackm +tb.uut.mprj.core1.core.EXEC.ackm [color] 3 -tb.uut.mprj.core1.core1.EXEC.stlm +tb.uut.mprj.core1.core.EXEC.stlm @22 -tb.uut.mprj.core1.core1.EXEC.addr[31:0] -tb.uut.mprj.core1.core1.EXEC.dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtwm[31:0] +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.rw_mem +tb.uut.mprj.core1.core.EXEC.rw_mem @200 - @28 -tb.uut.mprj.core1.core1.EXEC.intrq +tb.uut.mprj.core1.core.EXEC.intrq @1401200 -Module I/O @c00200 -Internal Bus @22 -tb.uut.mprj.core1.core1.EXEC.ibus1[31:0] -tb.uut.mprj.core1.core1.EXEC.ibus2[31:0] -tb.uut.mprj.core1.core1.EXEC.obus[31:0] -tb.uut.mprj.core1.core1.EXEC.aluout[31:0] +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] @1401200 -Internal Bus @c00200 -ALU @22 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv[3:0] +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv_out[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.carry +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry @22 -tb.uut.mprj.core1.core1.EXEC.alu.i_a[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_b[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_op[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_r[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] @1401200 -ALU @c00200 -Special Registers @22 -tb.uut.mprj.core1.core1.EXEC.r_dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtw[31:0] -tb.uut.mprj.core1.core1.EXEC.mar[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_s[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_u[31:0] -tb.uut.mprj.core1.core1.EXEC.lr_i[31:0] -tb.uut.mprj.core1.core1.EXEC.sp_i[31:0] -tb.uut.mprj.core1.core1.EXEC.mcr_s[31:0] -tb.uut.mprj.core1.core1.EXEC.flags[31:0] +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +tb.uut.mprj.core1.core.EXEC.flags[31:0] @1401200 -Special Registers @c00200 -Register Control @28 -tb.uut.mprj.core1.core1.EXEC.reg_we -tb.uut.mprj.core1.core1.EXEC.reg_we_s -tb.uut.mprj.core1.core1.EXEC.reg_we_u +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadra[3:0] -tb.uut.mprj.core1.core1.EXEC.regouta[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadrb[3:0] -tb.uut.mprj.core1.core1.EXEC.regoutb[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] @1401200 -Register Control @c00200 -Supervisor Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_s.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] @1401200 -Supervisor Regfile @c00200 -User Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_u.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] @1401200 -User Regfile -Execute
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/test1.c b/verilog/dv/caravel/hs32_soc/core1test2/test2.c similarity index 100% rename from verilog/dv/caravel/hs32_soc/core1test2/test1.c rename to verilog/dv/caravel/hs32_soc/core1test2/test2.c
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test2/test2_tb.v similarity index 84% copy from verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v copy to verilog/dv/caravel/hs32_soc/core1test2/test2_tb.v index 433d28e..4be79dc 100644 --- a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test2/test2_tb.v
@@ -8,13 +8,15 @@ `include "spiflash.v" module tb(); + parameter TEST_ID = 2; + reg clock; - reg RSTB; + reg RSTB; reg power1, power2; reg power3, power4; - wire gpio; - wire [37:0] mprj_io; + wire gpio; + wire [37:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; @@ -65,12 +67,16 @@ end initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; + // Test cases go here + end + + always @(*) begin + if(tb.uut.mprj.core1.core.EXEC.fault) begin + $display("%c[1;31m",27); + $display("Test %d: Faulted!", TEST_ID); + $display("%c[0m",27); + $finish; + end end always @(mprj_io) begin @@ -114,7 +120,7 @@ ); spiflash #( - .FILENAME("test1.hex") + .FILENAME("test2.hex") ) spiflash ( .csb(flash_csb), .clk(flash_clk),
diff --git a/verilog/dv/caravel/hs32_soc/core1test3/Makefile b/verilog/dv/caravel/hs32_soc/core1test3/Makefile index 245b54a..8265b9d 100644 --- a/verilog/dv/caravel/hs32_soc/core1test3/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test3/Makefile
@@ -9,7 +9,7 @@ .SUFFIXES: -PATTERN = test1 +PATTERN = test3 all: ${PATTERN:=.vcd} @@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test3/README.md b/verilog/dv/caravel/hs32_soc/core1test3/README.md index 1f31033..40f7a48 100644 --- a/verilog/dv/caravel/hs32_soc/core1test3/README.md +++ b/verilog/dv/caravel/hs32_soc/core1test3/README.md
@@ -64,8 +64,8 @@ - [x] `R3 = 0x00F0` - [x] `R4 = 0x0F00` - [x] `R5 = 0xF000` -- [x] `R6 = 0xF000` +- [x] `R6 = 0xF001` - [x] `R1_u = 0x000F` - [x] `R2_s = 0x00F0` -- [ ] `R3_i = 0x0F00` +- [x] `R3_i = 0x0F00` - [x] `R5_f = 0xF000`
diff --git a/verilog/dv/caravel/hs32_soc/core1test3/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test3/tb.gtkw index 361d82b..2efb71f 100644 --- a/verilog/dv/caravel/hs32_soc/core1test3/tb.gtkw +++ b/verilog/dv/caravel/hs32_soc/core1test3/tb.gtkw
@@ -1,26 +1,25 @@ [*] [*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI -[*] Thu Dec 17 01:48:51 2020 +[*] Fri Dec 18 02:59:09 2020 [*] -[dumpfile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test2/dump.vcd" -[dumpfile_mtime] "Thu Dec 17 00:46:37 2020" -[dumpfile_size] 322055879 -[savefile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test2/tb.gtkw" -[timestart] 131606720 +[dumpfile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test3/dump.vcd" +[dumpfile_mtime] "Fri Dec 18 02:51:43 2020" +[dumpfile_size] 334713122 +[savefile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test3/tb.gtkw" +[timestart] 177719800 [size] 1536 801 [pos] -9 -33 -*-14.106964 131652000 131484000 131676000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +*-16.106964 177900000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [treeopen] tb. [treeopen] tb.uut. [treeopen] tb.uut.mprj. [treeopen] tb.uut.mprj.core1. -[treeopen] tb.uut.mprj.core1.core1. -[treeopen] tb.uut.mprj.core1.core1.EXEC. +[treeopen] tb.uut.mprj.core1.core. [treeopen] tb.uut.mprj.sram0. [sst_width] 265 [signals_width] 269 [sst_expanded] 1 -[sst_vpaned_height] 222 +[sst_vpaned_height] 301 @c00200 -WBS @28 @@ -51,17 +50,17 @@ @c00200 -PQ @22 -tb.uut.mprj.core1.core1.FETCH.\fifo[0][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[1][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[2][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[3][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[4][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[5][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[6][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[7][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] @1401200 -PQ -@800200 +@c00200 -BRAM CTL @22 tb.uut.mprj.core1.bram_ctl.i_addr[11:0] @@ -99,205 +98,208 @@ tb.uut.mprj.core1.bram_ctl.dbuf1[31:0] tb.uut.mprj.core1.bram_ctl.dbuf2[31:0] tb.uut.mprj.core1.bram_ctl.dbuf3[31:0] -@1000200 +@1401200 -BRAM CTL @c00200 -Decode @28 -tb.uut.mprj.core1.core1.DECODE.clk -tb.uut.mprj.core1.core1.DECODE.reset +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset @22 -tb.uut.mprj.core1.core1.DECODE.int_line[23:0] +tb.uut.mprj.core1.core.DECODE.int_line[23:0] @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqd +tb.uut.mprj.core1.core.DECODE.reqd [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdyd +tb.uut.mprj.core1.core.DECODE.rdyd @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqe +tb.uut.mprj.core1.core.DECODE.reqe [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdye -tb.uut.mprj.core1.core1.DECODE.full +tb.uut.mprj.core1.core.DECODE.rdye +tb.uut.mprj.core1.core.DECODE.full @200 - @22 -tb.uut.mprj.core1.core1.DECODE.instd[31:0] +tb.uut.mprj.core1.core.DECODE.instd[31:0] @200 - @22 -tb.uut.mprj.core1.core1.DECODE.aluop[3:0] +tb.uut.mprj.core1.core.DECODE.aluop[3:0] @28 -tb.uut.mprj.core1.core1.DECODE.bank[1:0] +tb.uut.mprj.core1.core.DECODE.bank[1:0] @22 -tb.uut.mprj.core1.core1.DECODE.ctlsig[15:0] -tb.uut.mprj.core1.core1.DECODE.imm[15:0] -tb.uut.mprj.core1.core1.DECODE.rd[3:0] -tb.uut.mprj.core1.core1.DECODE.rm[3:0] -tb.uut.mprj.core1.core1.DECODE.rn[3:0] -tb.uut.mprj.core1.core1.DECODE.shift[4:0] +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] @1401200 -Decode -@c00200 +@800200 -Execute @28 -tb.uut.mprj.core1.core1.EXEC.clk +tb.uut.mprj.core1.core.EXEC.clk [color] 3 -tb.uut.mprj.core1.core1.EXEC.req +tb.uut.mprj.core1.core.EXEC.req [color] 3 -tb.uut.mprj.core1.core1.EXEC.rdy +tb.uut.mprj.core1.core.EXEC.rdy @22 -tb.uut.mprj.core1.core1.EXEC.state[3:0] +tb.uut.mprj.core1.core.EXEC.state[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.fault -tb.uut.mprj.core1.core1.EXEC.int_inval +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval @c00200 -Module I/O @28 -tb.uut.mprj.core1.core1.EXEC.flush +tb.uut.mprj.core1.core.EXEC.flush @22 -tb.uut.mprj.core1.core1.EXEC.newpc[31:0] +tb.uut.mprj.core1.core.EXEC.newpc[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.aluop[3:0] -tb.uut.mprj.core1.core1.EXEC.shift[4:0] -tb.uut.mprj.core1.core1.EXEC.imm[15:0] -tb.uut.mprj.core1.core1.EXEC.rd[3:0] -tb.uut.mprj.core1.core1.EXEC.rm[3:0] -tb.uut.mprj.core1.core1.EXEC.rn[3:0] +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.ctlsig[15:0] -tb.uut.mprj.core1.core1.EXEC.bank[1:0] +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.stbm +tb.uut.mprj.core1.core.EXEC.stbm [color] 3 -tb.uut.mprj.core1.core1.EXEC.ackm +tb.uut.mprj.core1.core.EXEC.ackm [color] 3 -tb.uut.mprj.core1.core1.EXEC.stlm +tb.uut.mprj.core1.core.EXEC.stlm @22 -tb.uut.mprj.core1.core1.EXEC.addr[31:0] -tb.uut.mprj.core1.core1.EXEC.dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtwm[31:0] +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.rw_mem +tb.uut.mprj.core1.core.EXEC.rw_mem @200 - @28 -tb.uut.mprj.core1.core1.EXEC.intrq +tb.uut.mprj.core1.core.EXEC.intrq @1401200 -Module I/O @c00200 -Internal Bus @22 -tb.uut.mprj.core1.core1.EXEC.ibus1[31:0] -tb.uut.mprj.core1.core1.EXEC.ibus2[31:0] -tb.uut.mprj.core1.core1.EXEC.obus[31:0] -tb.uut.mprj.core1.core1.EXEC.aluout[31:0] +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] @1401200 -Internal Bus -@c00200 +@800200 -ALU @22 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv[3:0] +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] +tb.uut.mprj.core1.core.EXEC.branch_conds[15:0] +@29 +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv_out[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.carry +tb.uut.mprj.core1.core.EXEC.alu.carry @22 -tb.uut.mprj.core1.core1.EXEC.alu.i_a[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_b[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_op[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_r[31:0] -@1401200 +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] +@1000200 -ALU -@c00200 +@800200 -Special Registers @22 -tb.uut.mprj.core1.core1.EXEC.r_dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtw[31:0] -tb.uut.mprj.core1.core1.EXEC.mar[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_s[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_u[31:0] -tb.uut.mprj.core1.core1.EXEC.lr_i[31:0] -tb.uut.mprj.core1.core1.EXEC.sp_i[31:0] -tb.uut.mprj.core1.core1.EXEC.mcr_s[31:0] -tb.uut.mprj.core1.core1.EXEC.flags[31:0] -@1401200 +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +tb.uut.mprj.core1.core.EXEC.flags[31:0] +@1000200 -Special Registers @c00200 -Register Control @28 -tb.uut.mprj.core1.core1.EXEC.reg_we -tb.uut.mprj.core1.core1.EXEC.reg_we_s -tb.uut.mprj.core1.core1.EXEC.reg_we_u +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadra[3:0] -tb.uut.mprj.core1.core1.EXEC.regouta[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadrb[3:0] -tb.uut.mprj.core1.core1.EXEC.regoutb[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] @1401200 -Register Control @c00200 -Supervisor Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_s.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] @1401200 -Supervisor Regfile @c00200 -User Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_u.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] @1401200 -User Regfile +@1000200 -Execute @c00200 -sram0 @@ -330,7 +332,7 @@ tb.uut.mprj.sram1.wmask0[3:0] @1401200 -sram1 -@800200 +@c00200 -sram3 @22 tb.uut.mprj.sram2.addr0[7:0] @@ -343,7 +345,7 @@ @28 tb.uut.mprj.sram2.web0 tb.uut.mprj.sram2.wmask0[3:0] -@1000200 +@1401200 -sram3 [pattern_trace] 1 [pattern_trace] 0
diff --git a/verilog/dv/caravel/hs32_soc/core1test3/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test3/test1_tb.v deleted file mode 100644 index 433d28e..0000000 --- a/verilog/dv/caravel/hs32_soc/core1test3/test1_tb.v +++ /dev/null
@@ -1,127 +0,0 @@ -`define DBG1 - -`default_nettype none - -`timescale 1 ns / 1 ns - -`include "caravel.v" -`include "spiflash.v" - -module tb(); - reg clock; - reg RSTB; - reg power1, power2; - reg power3, power4; - - wire gpio; - wire [37:0] mprj_io; - wire [7:0] mprj_io_0; - - assign mprj_io_0 = mprj_io[7:0]; - - // External clock is used by default. Make this artificially fast for the - // simulation. Normally this would be a slow clock and the digital PLL - // would be the fast clock. - - always #12 clock <= (clock === 1'b0); - - initial begin - clock = 0; - end - - initial begin - $dumpfile("tb.vcd"); - $dumpvars(0, tb); - // Repeat cycles of 1000 clock edges as needed to complete testbench - repeat (25) begin - repeat (1000) @(posedge clock); - // $display("+1000 cycles"); - end - //$display("%c[1;31m",27); - //$display("Test 1: Failed (timed out)!"); - //$display("%c[0m",27); - $finish; - end - - initial begin - RSTB <= 1'b0; - #2000; - RSTB <= 1'b1; // Release reset - end - - initial begin // Power-up sequence - power1 <= 1'b0; - power2 <= 1'b0; - power3 <= 1'b0; - power4 <= 1'b0; - #200; - power1 <= 1'b1; - #200; - power2 <= 1'b1; - #200; - power3 <= 1'b1; - #200; - power4 <= 1'b1; - end - - initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; - end - - always @(mprj_io) begin - #1 $display("MPRJ-IO state = %b ", mprj_io[7:0]); - end - - wire flash_csb; - wire flash_clk; - wire flash_io0; - wire flash_io1; - - wire VDD3V3 = power1; - wire VDD1V8 = power2; - wire USER_VDD3V3 = power3; - wire USER_VDD1V8 = power4; - wire VSS = 1'b0; - - caravel uut ( - .vddio (VDD3V3), - .vssio (VSS), - .vdda (VDD3V3), - .vssa (VSS), - .vccd (VDD1V8), - .vssd (VSS), - .vdda1 (USER_VDD3V3), - .vdda2 (USER_VDD3V3), - .vssa1 (VSS), - .vssa2 (VSS), - .vccd1 (USER_VDD1V8), - .vccd2 (USER_VDD1V8), - .vssd1 (VSS), - .vssd2 (VSS), - .clock (clock), - .gpio (gpio), - .mprj_io (mprj_io), - .flash_csb(flash_csb), - .flash_clk(flash_clk), - .flash_io0(flash_io0), - .flash_io1(flash_io1), - .resetb (RSTB) - ); - - spiflash #( - .FILENAME("test1.hex") - ) spiflash ( - .csb(flash_csb), - .clk(flash_clk), - .io0(flash_io0), - .io1(flash_io1), - .io2(), // not used - .io3() // not used - ); -endmodule -`default_nettype wire
diff --git a/verilog/dv/caravel/hs32_soc/core1test3/test1.c b/verilog/dv/caravel/hs32_soc/core1test3/test3.c similarity index 100% rename from verilog/dv/caravel/hs32_soc/core1test3/test1.c rename to verilog/dv/caravel/hs32_soc/core1test3/test3.c
diff --git a/verilog/dv/caravel/hs32_soc/core1test1.no/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test3/test3_tb.v similarity index 93% rename from verilog/dv/caravel/hs32_soc/core1test1.no/test1_tb.v rename to verilog/dv/caravel/hs32_soc/core1test3/test3_tb.v index d73c543..7e94c3a 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1.no/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test3/test3_tb.v
@@ -32,14 +32,13 @@ initial begin $dumpfile("tb.vcd"); $dumpvars(0, tb); - // Repeat cycles of 1000 clock edges as needed to complete testbench repeat (25) begin repeat (1000) @(posedge clock); // $display("+1000 cycles"); end //$display("%c[1;31m",27); - //$display ("Monitor: Timeout, Test Mega-Project IO Ports (RTL) Failed"); + //$display("Test 1: Failed (timed out)!"); //$display("%c[0m",27); $finish; end @@ -50,7 +49,7 @@ RSTB <= 1'b1; // Release reset end - initial begin // Power-up sequence + initial begin // Power-up sequence power1 <= 1'b0; power2 <= 1'b0; power3 <= 1'b0; @@ -106,7 +105,7 @@ ); spiflash #( - .FILENAME("test1.hex") + .FILENAME("test3.hex") ) spiflash ( .csb(flash_csb), .clk(flash_clk),
diff --git a/verilog/dv/caravel/hs32_soc/core1test4/Makefile b/verilog/dv/caravel/hs32_soc/core1test4/Makefile index 245b54a..a2f250a 100644 --- a/verilog/dv/caravel/hs32_soc/core1test4/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test4/Makefile
@@ -9,7 +9,7 @@ .SUFFIXES: -PATTERN = test1 +PATTERN = test4 all: ${PATTERN:=.vcd} @@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test4/README.md b/verilog/dv/caravel/hs32_soc/core1test4/README.md index 32024b6..fa3ecde 100644 --- a/verilog/dv/caravel/hs32_soc/core1test4/README.md +++ b/verilog/dv/caravel/hs32_soc/core1test4/README.md
@@ -63,4 +63,28 @@ - [x] `R4 = 0x0BAD` - [x] `R5 = 0x0B09` - [x] `R6 = 0x000F` -- [ ] `R7 = 0x0F00` +- [x] `R7 = 0x0F00` + + + +0x 24 00 BE EF +0x 24 10 0A DD +0x 20 20 10 00 +0x 60 00 10 00 +0x 30 02 00 00 +0x 10 12 00 00 +0x 24 30 0B AD +0x 24 50 22 62 +0x 20 50 58 00 +0x 24 50 00 00 +0x 30 53 00 00 +0x 24 40 0B AD +0x 24 50 21 66 +0x 20 50 58 00 +0x 24 50 00 00 +0x 30 54 00 00 +0x 68 00 10 00 +0x 52 00 0B AD +0x 68 01 20 00 +0x 59 00 0B 09 +0x 20 70 68 00 \ No newline at end of file
diff --git a/verilog/dv/caravel/hs32_soc/core1test4/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test4/tb.gtkw index 361d82b..cd40e11 100644 --- a/verilog/dv/caravel/hs32_soc/core1test4/tb.gtkw +++ b/verilog/dv/caravel/hs32_soc/core1test4/tb.gtkw
@@ -14,8 +14,8 @@ [treeopen] tb.uut. [treeopen] tb.uut.mprj. [treeopen] tb.uut.mprj.core1. -[treeopen] tb.uut.mprj.core1.core1. -[treeopen] tb.uut.mprj.core1.core1.EXEC. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. [treeopen] tb.uut.mprj.sram0. [sst_width] 265 [signals_width] 269 @@ -51,14 +51,14 @@ @c00200 -PQ @22 -tb.uut.mprj.core1.core1.FETCH.\fifo[0][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[1][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[2][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[3][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[4][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[5][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[6][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[7][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] @1401200 -PQ @800200 @@ -104,198 +104,198 @@ @c00200 -Decode @28 -tb.uut.mprj.core1.core1.DECODE.clk -tb.uut.mprj.core1.core1.DECODE.reset +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset @22 -tb.uut.mprj.core1.core1.DECODE.int_line[23:0] +tb.uut.mprj.core1.core.DECODE.int_line[23:0] @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqd +tb.uut.mprj.core1.core.DECODE.reqd [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdyd +tb.uut.mprj.core1.core.DECODE.rdyd @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqe +tb.uut.mprj.core1.core.DECODE.reqe [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdye -tb.uut.mprj.core1.core1.DECODE.full +tb.uut.mprj.core1.core.DECODE.rdye +tb.uut.mprj.core1.core.DECODE.full @200 - @22 -tb.uut.mprj.core1.core1.DECODE.instd[31:0] +tb.uut.mprj.core1.core.DECODE.instd[31:0] @200 - @22 -tb.uut.mprj.core1.core1.DECODE.aluop[3:0] +tb.uut.mprj.core1.core.DECODE.aluop[3:0] @28 -tb.uut.mprj.core1.core1.DECODE.bank[1:0] +tb.uut.mprj.core1.core.DECODE.bank[1:0] @22 -tb.uut.mprj.core1.core1.DECODE.ctlsig[15:0] -tb.uut.mprj.core1.core1.DECODE.imm[15:0] -tb.uut.mprj.core1.core1.DECODE.rd[3:0] -tb.uut.mprj.core1.core1.DECODE.rm[3:0] -tb.uut.mprj.core1.core1.DECODE.rn[3:0] -tb.uut.mprj.core1.core1.DECODE.shift[4:0] +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] @1401200 -Decode @c00200 -Execute @28 -tb.uut.mprj.core1.core1.EXEC.clk +tb.uut.mprj.core1.core.EXEC.clk [color] 3 -tb.uut.mprj.core1.core1.EXEC.req +tb.uut.mprj.core1.core.EXEC.req [color] 3 -tb.uut.mprj.core1.core1.EXEC.rdy +tb.uut.mprj.core1.core.EXEC.rdy @22 -tb.uut.mprj.core1.core1.EXEC.state[3:0] +tb.uut.mprj.core1.core.EXEC.state[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.fault -tb.uut.mprj.core1.core1.EXEC.int_inval +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval @c00200 -Module I/O @28 -tb.uut.mprj.core1.core1.EXEC.flush +tb.uut.mprj.core1.core.EXEC.flush @22 -tb.uut.mprj.core1.core1.EXEC.newpc[31:0] +tb.uut.mprj.core1.core.EXEC.newpc[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.aluop[3:0] -tb.uut.mprj.core1.core1.EXEC.shift[4:0] -tb.uut.mprj.core1.core1.EXEC.imm[15:0] -tb.uut.mprj.core1.core1.EXEC.rd[3:0] -tb.uut.mprj.core1.core1.EXEC.rm[3:0] -tb.uut.mprj.core1.core1.EXEC.rn[3:0] +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.ctlsig[15:0] -tb.uut.mprj.core1.core1.EXEC.bank[1:0] +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.stbm +tb.uut.mprj.core1.core.EXEC.stbm [color] 3 -tb.uut.mprj.core1.core1.EXEC.ackm +tb.uut.mprj.core1.core.EXEC.ackm [color] 3 -tb.uut.mprj.core1.core1.EXEC.stlm +tb.uut.mprj.core1.core.EXEC.stlm @22 -tb.uut.mprj.core1.core1.EXEC.addr[31:0] -tb.uut.mprj.core1.core1.EXEC.dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtwm[31:0] +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.rw_mem +tb.uut.mprj.core1.core.EXEC.rw_mem @200 - @28 -tb.uut.mprj.core1.core1.EXEC.intrq +tb.uut.mprj.core1.core.EXEC.intrq @1401200 -Module I/O @c00200 -Internal Bus @22 -tb.uut.mprj.core1.core1.EXEC.ibus1[31:0] -tb.uut.mprj.core1.core1.EXEC.ibus2[31:0] -tb.uut.mprj.core1.core1.EXEC.obus[31:0] -tb.uut.mprj.core1.core1.EXEC.aluout[31:0] +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] @1401200 -Internal Bus @c00200 -ALU @22 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv[3:0] +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv_out[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.carry +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry @22 -tb.uut.mprj.core1.core1.EXEC.alu.i_a[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_b[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_op[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_r[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] @1401200 -ALU @c00200 -Special Registers @22 -tb.uut.mprj.core1.core1.EXEC.r_dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtw[31:0] -tb.uut.mprj.core1.core1.EXEC.mar[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_s[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_u[31:0] -tb.uut.mprj.core1.core1.EXEC.lr_i[31:0] -tb.uut.mprj.core1.core1.EXEC.sp_i[31:0] -tb.uut.mprj.core1.core1.EXEC.mcr_s[31:0] -tb.uut.mprj.core1.core1.EXEC.flags[31:0] +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +tb.uut.mprj.core1.core.EXEC.flags[31:0] @1401200 -Special Registers @c00200 -Register Control @28 -tb.uut.mprj.core1.core1.EXEC.reg_we -tb.uut.mprj.core1.core1.EXEC.reg_we_s -tb.uut.mprj.core1.core1.EXEC.reg_we_u +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadra[3:0] -tb.uut.mprj.core1.core1.EXEC.regouta[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadrb[3:0] -tb.uut.mprj.core1.core1.EXEC.regoutb[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] @1401200 -Register Control @c00200 -Supervisor Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_s.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] @1401200 -Supervisor Regfile @c00200 -User Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_u.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] @1401200 -User Regfile -Execute
diff --git a/verilog/dv/caravel/hs32_soc/core1test4/test1.c b/verilog/dv/caravel/hs32_soc/core1test4/test4.c similarity index 100% rename from verilog/dv/caravel/hs32_soc/core1test4/test1.c rename to verilog/dv/caravel/hs32_soc/core1test4/test4.c
diff --git a/verilog/dv/caravel/hs32_soc/core1test4/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test4/test4_tb.v similarity index 84% rename from verilog/dv/caravel/hs32_soc/core1test4/test1_tb.v rename to verilog/dv/caravel/hs32_soc/core1test4/test4_tb.v index 433d28e..0101ab0 100644 --- a/verilog/dv/caravel/hs32_soc/core1test4/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test4/test4_tb.v
@@ -8,13 +8,15 @@ `include "spiflash.v" module tb(); + parameter TEST_ID = 4; + reg clock; - reg RSTB; + reg RSTB; reg power1, power2; reg power3, power4; - wire gpio; - wire [37:0] mprj_io; + wire gpio; + wire [37:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; @@ -65,12 +67,16 @@ end initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; + // Test cases go here + end + + always @(*) begin + if(tb.uut.mprj.core1.core.EXEC.fault) begin + $display("%c[1;31m",27); + $display("Test %d: Faulted!", TEST_ID); + $display("%c[0m",27); + $finish; + end end always @(mprj_io) begin @@ -114,7 +120,7 @@ ); spiflash #( - .FILENAME("test1.hex") + .FILENAME("test4.hex") ) spiflash ( .csb(flash_csb), .clk(flash_clk),
diff --git a/verilog/dv/caravel/hs32_soc/core1test5/Makefile b/verilog/dv/caravel/hs32_soc/core1test5/Makefile index 245b54a..a635e2a 100644 --- a/verilog/dv/caravel/hs32_soc/core1test5/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test5/Makefile
@@ -9,7 +9,7 @@ .SUFFIXES: -PATTERN = test1 +PATTERN = test5 all: ${PATTERN:=.vcd} @@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test5/README.md b/verilog/dv/caravel/hs32_soc/core1test5/README.md index 32024b6..6621deb 100644 --- a/verilog/dv/caravel/hs32_soc/core1test5/README.md +++ b/verilog/dv/caravel/hs32_soc/core1test5/README.md
@@ -1,6 +1,6 @@ -# HS32 Example Instruction 4 +# HS32 Example Instruction 5 -**LDR and STR Variant 000** +**Interrupts and AICT** The HS32 instruction format looks like this: @@ -19,48 +19,40 @@ ## Assembly ```assembly -MOV R0 <-- 0x000F -MOV R1 <-- 0x00F0 -MOV R2 <-- 0x0F00 -MOV R3 <-- 0xF000 -MOV R4 <-- 0x0BAD -MOV R5 <-- 0x0B09 +MOV R0, 0xFF00 +LDR R1, R0 -STR R0, R4 ; [R4] <-- R0 -LDR R6, R4 ; R6 <-- [R4] +MOV R2, high(COND1) ; 0x5000 +MOV R2, R2, 16 ; R2 <- (R2 << 16) +STR R2, R0, 01 ; STR [Rm + imm] <- Rd -STR R2, R5, R1 ; [R5 + (R1 << 2)] <- R2 -LDR R7, R5, R1 ; R7 <- [R5 + (R1 << 2)] +LDR R3, R0, 0x0010 -BR 0 +INT ``` ## Hexadecimal ```hex -0x 24 00 00 0F -0x 24 10 00 F0 -0x 24 20 0F 00 -0x 24 30 F0 00 -0x 24 40 0B AD -0x 24 50 0B 09 +0x 24 00 FF 00 +0x 10 10 00 00 -0x 30 04 00 00 -0x 10 64 00 00 +0x 24 20 50 00 +0x 20 20 28 00 +0x 34 20 00 10 -0x 31 25 11 00 -0x 11 75 11 00 +0x 14 30 00 10 -0x 50 00 00 00 +0x 90 00 00 10 ``` ## Expected result -- [x] `R0 = 0x000F` -- [x] `R1 = 0x00F0` -- [x] `R2 = 0x0F00` -- [x] `R3 = 0xF000` -- [x] `R4 = 0x0BAD` -- [x] `R5 = 0x0B09` -- [x] `R6 = 0x000F` -- [ ] `R7 = 0x0F00` +- [ ] `R0 = 0x` +- [ ] `R1 = 0x` +- [ ] `R2 = 0x` +- [ ] `R3 = 0x` +- [ ] `R4 = 0x` +- [ ] `R5 = 0x` +- [ ] `R6 = 0x` +- [ ] `R7 = 0x`
diff --git a/verilog/dv/caravel/hs32_soc/core1test5/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test5/tb.gtkw index 361d82b..cd40e11 100644 --- a/verilog/dv/caravel/hs32_soc/core1test5/tb.gtkw +++ b/verilog/dv/caravel/hs32_soc/core1test5/tb.gtkw
@@ -14,8 +14,8 @@ [treeopen] tb.uut. [treeopen] tb.uut.mprj. [treeopen] tb.uut.mprj.core1. -[treeopen] tb.uut.mprj.core1.core1. -[treeopen] tb.uut.mprj.core1.core1.EXEC. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. [treeopen] tb.uut.mprj.sram0. [sst_width] 265 [signals_width] 269 @@ -51,14 +51,14 @@ @c00200 -PQ @22 -tb.uut.mprj.core1.core1.FETCH.\fifo[0][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[1][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[2][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[3][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[4][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[5][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[6][31:0] -tb.uut.mprj.core1.core1.FETCH.\fifo[7][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] @1401200 -PQ @800200 @@ -104,198 +104,198 @@ @c00200 -Decode @28 -tb.uut.mprj.core1.core1.DECODE.clk -tb.uut.mprj.core1.core1.DECODE.reset +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset @22 -tb.uut.mprj.core1.core1.DECODE.int_line[23:0] +tb.uut.mprj.core1.core.DECODE.int_line[23:0] @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqd +tb.uut.mprj.core1.core.DECODE.reqd [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdyd +tb.uut.mprj.core1.core.DECODE.rdyd @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.DECODE.reqe +tb.uut.mprj.core1.core.DECODE.reqe [color] 3 -tb.uut.mprj.core1.core1.DECODE.rdye -tb.uut.mprj.core1.core1.DECODE.full +tb.uut.mprj.core1.core.DECODE.rdye +tb.uut.mprj.core1.core.DECODE.full @200 - @22 -tb.uut.mprj.core1.core1.DECODE.instd[31:0] +tb.uut.mprj.core1.core.DECODE.instd[31:0] @200 - @22 -tb.uut.mprj.core1.core1.DECODE.aluop[3:0] +tb.uut.mprj.core1.core.DECODE.aluop[3:0] @28 -tb.uut.mprj.core1.core1.DECODE.bank[1:0] +tb.uut.mprj.core1.core.DECODE.bank[1:0] @22 -tb.uut.mprj.core1.core1.DECODE.ctlsig[15:0] -tb.uut.mprj.core1.core1.DECODE.imm[15:0] -tb.uut.mprj.core1.core1.DECODE.rd[3:0] -tb.uut.mprj.core1.core1.DECODE.rm[3:0] -tb.uut.mprj.core1.core1.DECODE.rn[3:0] -tb.uut.mprj.core1.core1.DECODE.shift[4:0] +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] @1401200 -Decode @c00200 -Execute @28 -tb.uut.mprj.core1.core1.EXEC.clk +tb.uut.mprj.core1.core.EXEC.clk [color] 3 -tb.uut.mprj.core1.core1.EXEC.req +tb.uut.mprj.core1.core.EXEC.req [color] 3 -tb.uut.mprj.core1.core1.EXEC.rdy +tb.uut.mprj.core1.core.EXEC.rdy @22 -tb.uut.mprj.core1.core1.EXEC.state[3:0] +tb.uut.mprj.core1.core.EXEC.state[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.fault -tb.uut.mprj.core1.core1.EXEC.int_inval +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval @c00200 -Module I/O @28 -tb.uut.mprj.core1.core1.EXEC.flush +tb.uut.mprj.core1.core.EXEC.flush @22 -tb.uut.mprj.core1.core1.EXEC.newpc[31:0] +tb.uut.mprj.core1.core.EXEC.newpc[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.aluop[3:0] -tb.uut.mprj.core1.core1.EXEC.shift[4:0] -tb.uut.mprj.core1.core1.EXEC.imm[15:0] -tb.uut.mprj.core1.core1.EXEC.rd[3:0] -tb.uut.mprj.core1.core1.EXEC.rm[3:0] -tb.uut.mprj.core1.core1.EXEC.rn[3:0] +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.ctlsig[15:0] -tb.uut.mprj.core1.core1.EXEC.bank[1:0] +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] @200 - @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.stbm +tb.uut.mprj.core1.core.EXEC.stbm [color] 3 -tb.uut.mprj.core1.core1.EXEC.ackm +tb.uut.mprj.core1.core.EXEC.ackm [color] 3 -tb.uut.mprj.core1.core1.EXEC.stlm +tb.uut.mprj.core1.core.EXEC.stlm @22 -tb.uut.mprj.core1.core1.EXEC.addr[31:0] -tb.uut.mprj.core1.core1.EXEC.dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtwm[31:0] +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] @28 [color] 3 -tb.uut.mprj.core1.core1.EXEC.rw_mem +tb.uut.mprj.core1.core.EXEC.rw_mem @200 - @28 -tb.uut.mprj.core1.core1.EXEC.intrq +tb.uut.mprj.core1.core.EXEC.intrq @1401200 -Module I/O @c00200 -Internal Bus @22 -tb.uut.mprj.core1.core1.EXEC.ibus1[31:0] -tb.uut.mprj.core1.core1.EXEC.ibus2[31:0] -tb.uut.mprj.core1.core1.EXEC.obus[31:0] -tb.uut.mprj.core1.core1.EXEC.aluout[31:0] +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] @1401200 -Internal Bus @c00200 -ALU @22 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv[3:0] +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] @28 -tb.uut.mprj.core1.core1.EXEC.alu_nzcv_out[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.carry +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry @22 -tb.uut.mprj.core1.core1.EXEC.alu.i_a[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_b[31:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.i_op[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_fl[3:0] -tb.uut.mprj.core1.core1.EXEC.alu.o_r[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] @1401200 -ALU @c00200 -Special Registers @22 -tb.uut.mprj.core1.core1.EXEC.r_dtrm[31:0] -tb.uut.mprj.core1.core1.EXEC.dtw[31:0] -tb.uut.mprj.core1.core1.EXEC.mar[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_s[31:0] -tb.uut.mprj.core1.core1.EXEC.pc_u[31:0] -tb.uut.mprj.core1.core1.EXEC.lr_i[31:0] -tb.uut.mprj.core1.core1.EXEC.sp_i[31:0] -tb.uut.mprj.core1.core1.EXEC.mcr_s[31:0] -tb.uut.mprj.core1.core1.EXEC.flags[31:0] +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +tb.uut.mprj.core1.core.EXEC.flags[31:0] @1401200 -Special Registers @c00200 -Register Control @28 -tb.uut.mprj.core1.core1.EXEC.reg_we -tb.uut.mprj.core1.core1.EXEC.reg_we_s -tb.uut.mprj.core1.core1.EXEC.reg_we_u +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadra[3:0] -tb.uut.mprj.core1.core1.EXEC.regouta[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regouta_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] @200 - @22 -tb.uut.mprj.core1.core1.EXEC.regadrb[3:0] -tb.uut.mprj.core1.core1.EXEC.regoutb[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_s[31:0] -tb.uut.mprj.core1.core1.EXEC.regoutb_u[31:0] +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] @1401200 -Register Control @c00200 -Supervisor Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_s.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_s.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] @1401200 -Supervisor Regfile @c00200 -User Regfile @22 -tb.uut.mprj.core1.core1.EXEC.regfile_u.wadr[3:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[0][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[1][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[2][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[3][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[4][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[5][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[6][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[7][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[8][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[9][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[10][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[11][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[12][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[13][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[14][31:0] -tb.uut.mprj.core1.core1.EXEC.regfile_u.\regs[15][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] @1401200 -User Regfile -Execute
diff --git a/verilog/dv/caravel/hs32_soc/core1test5/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test5/test1_tb.v deleted file mode 100644 index 433d28e..0000000 --- a/verilog/dv/caravel/hs32_soc/core1test5/test1_tb.v +++ /dev/null
@@ -1,127 +0,0 @@ -`define DBG1 - -`default_nettype none - -`timescale 1 ns / 1 ns - -`include "caravel.v" -`include "spiflash.v" - -module tb(); - reg clock; - reg RSTB; - reg power1, power2; - reg power3, power4; - - wire gpio; - wire [37:0] mprj_io; - wire [7:0] mprj_io_0; - - assign mprj_io_0 = mprj_io[7:0]; - - // External clock is used by default. Make this artificially fast for the - // simulation. Normally this would be a slow clock and the digital PLL - // would be the fast clock. - - always #12 clock <= (clock === 1'b0); - - initial begin - clock = 0; - end - - initial begin - $dumpfile("tb.vcd"); - $dumpvars(0, tb); - // Repeat cycles of 1000 clock edges as needed to complete testbench - repeat (25) begin - repeat (1000) @(posedge clock); - // $display("+1000 cycles"); - end - //$display("%c[1;31m",27); - //$display("Test 1: Failed (timed out)!"); - //$display("%c[0m",27); - $finish; - end - - initial begin - RSTB <= 1'b0; - #2000; - RSTB <= 1'b1; // Release reset - end - - initial begin // Power-up sequence - power1 <= 1'b0; - power2 <= 1'b0; - power3 <= 1'b0; - power4 <= 1'b0; - #200; - power1 <= 1'b1; - #200; - power2 <= 1'b1; - #200; - power3 <= 1'b1; - #200; - power4 <= 1'b1; - end - - initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; - end - - always @(mprj_io) begin - #1 $display("MPRJ-IO state = %b ", mprj_io[7:0]); - end - - wire flash_csb; - wire flash_clk; - wire flash_io0; - wire flash_io1; - - wire VDD3V3 = power1; - wire VDD1V8 = power2; - wire USER_VDD3V3 = power3; - wire USER_VDD1V8 = power4; - wire VSS = 1'b0; - - caravel uut ( - .vddio (VDD3V3), - .vssio (VSS), - .vdda (VDD3V3), - .vssa (VSS), - .vccd (VDD1V8), - .vssd (VSS), - .vdda1 (USER_VDD3V3), - .vdda2 (USER_VDD3V3), - .vssa1 (VSS), - .vssa2 (VSS), - .vccd1 (USER_VDD1V8), - .vccd2 (USER_VDD1V8), - .vssd1 (VSS), - .vssd2 (VSS), - .clock (clock), - .gpio (gpio), - .mprj_io (mprj_io), - .flash_csb(flash_csb), - .flash_clk(flash_clk), - .flash_io0(flash_io0), - .flash_io1(flash_io1), - .resetb (RSTB) - ); - - spiflash #( - .FILENAME("test1.hex") - ) spiflash ( - .csb(flash_csb), - .clk(flash_clk), - .io0(flash_io0), - .io1(flash_io1), - .io2(), // not used - .io3() // not used - ); -endmodule -`default_nettype wire
diff --git a/verilog/dv/caravel/hs32_soc/core1test5/test1.c b/verilog/dv/caravel/hs32_soc/core1test5/test5.c similarity index 63% rename from verilog/dv/caravel/hs32_soc/core1test5/test1.c rename to verilog/dv/caravel/hs32_soc/core1test5/test5.c index c8db3ad..184fc9f 100644 --- a/verilog/dv/caravel/hs32_soc/core1test5/test1.c +++ b/verilog/dv/caravel/hs32_soc/core1test5/test5.c
@@ -13,17 +13,13 @@ reg_la0_data = 0b00; // [0] is low means stop reset // Write - ((volatile uint32_t*) 0x30000000)[0] = 0x2400000F; - ((volatile uint32_t*) 0x30000000)[1] = 0x241000F0; - ((volatile uint32_t*) 0x30000000)[2] = 0x24200F00; - ((volatile uint32_t*) 0x30000000)[3] = 0x2430F000; - ((volatile uint32_t*) 0x30000000)[4] = 0x24400BAD; - ((volatile uint32_t*) 0x30000000)[5] = 0x24500B09; - ((volatile uint32_t*) 0x30000000)[6] = 0x30040000; - ((volatile uint32_t*) 0x30000000)[7] = 0x10640000; - ((volatile uint32_t*) 0x30000000)[8] = 0x31251100; - ((volatile uint32_t*) 0x30000000)[9] = 0x11751100; - ((volatile uint32_t*) 0x30000000)[10] = 0x50000000; + ((volatile uint32_t*) 0x30000000)[0] = 0x2400FF00; + ((volatile uint32_t*) 0x30000000)[1] = 0x10100000; + ((volatile uint32_t*) 0x30000000)[2] = 0x24205000; + ((volatile uint32_t*) 0x30000000)[3] = 0x20202800; + ((volatile uint32_t*) 0x30000000)[4] = 0x34200010; + ((volatile uint32_t*) 0x30000000)[5] = 0x14300010; + ((volatile uint32_t*) 0x30000000)[6] = 0x90000010; // Release control and reset reg_la0_data = 0b11; // [1] is high means release control back to hs32
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test5/test5_tb.v similarity index 85% copy from verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v copy to verilog/dv/caravel/hs32_soc/core1test5/test5_tb.v index 433d28e..02e527d 100644 --- a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test5/test5_tb.v
@@ -8,6 +8,8 @@ `include "spiflash.v" module tb(); + parameter TEST_ID = 5; + reg clock; reg RSTB; reg power1, power2; @@ -65,12 +67,16 @@ end initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; + // Test cases go here + end + + always @(*) begin + if(tb.uut.mprj.core1.core.EXEC.fault) begin + $display("%c[1;31m",27); + $display("Test %d: Faulted!", TEST_ID); + $display("%c[0m",27); + $finish; + end end always @(mprj_io) begin @@ -114,7 +120,7 @@ ); spiflash #( - .FILENAME("test1.hex") + .FILENAME("test5.hex") ) spiflash ( .csb(flash_csb), .clk(flash_clk),
diff --git a/verilog/dv/caravel/hs32_soc/core1test1.no/Makefile b/verilog/dv/caravel/hs32_soc/core1test6/Makefile similarity index 93% copy from verilog/dv/caravel/hs32_soc/core1test1.no/Makefile copy to verilog/dv/caravel/hs32_soc/core1test6/Makefile index 245b54a..5488205 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1.no/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test6/Makefile
@@ -9,7 +9,7 @@ .SUFFIXES: -PATTERN = test1 +PATTERN = test6 all: ${PATTERN:=.vcd} @@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test6/README.md b/verilog/dv/caravel/hs32_soc/core1test6/README.md new file mode 100644 index 0000000..8f52b27 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/core1test6/README.md
@@ -0,0 +1,46 @@ +# HS32 Example Instruction 6 + +**Branching Test** + +The HS32 instruction format looks like this: + +| Type | Wire Format | +| ------ | ----------------------------------------- | +| I-Type | `oooo_oooo_dddd_mmmm iiii_iiii_iiii_iiii` | +| R-Type | `oooo_oooo_dddd_mmmm nnnn_ssss_sDDb_bxxx` | + +The hexadecimal format looks like this: + +| Type | bram3.hex | bram2.hex | bram1.hex | bram0.hex | +| ------ | ----------- | ----------- | ----------- | ----------- | +| I-Type | `oooo_oooo` | `dddd_mmmm` | `iiii_iiii` | `iiii_iiii` | +| R-Type | `oooo_oooo` | `dddd_mmmm` | `nnnn_ssss` | `sDDb_bxxx` | + +## Assembly + +```assembly +MOV PC, 0x0008 +LDR R0, PC +``` + +## Hexadecimal + +```hex +0x 24 F0 00 00 + + + +0x 50 00 00 00 +``` + +## Expected result + +- [x] `R0 = 0xB412` +- [x] `R1 = 0xB412` +- [x] `R2 = 0x0ADD` +- [x] `R3 = 0x0BAD` +- [ ] `R4 = 0x0B09` +- [ ] `R5 = 0x21660000` +- [ ] `R6 = 0x0ADD` +- [ ] `R6_u = 0x0ADD` +- [ ] `R7 = 0x0ADD0000`
diff --git a/verilog/dv/caravel/hs32_soc/core1test6/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test6/tb.gtkw new file mode 100644 index 0000000..bcaa546 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/core1test6/tb.gtkw
@@ -0,0 +1,370 @@ +[*] +[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI +[*] Fri Dec 18 19:17:22 2020 +[*] +[dumpfile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test6/dump.vcd" +[dumpfile_mtime] "Fri Dec 18 18:47:04 2020" +[dumpfile_size] 328739070 +[savefile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test6/tb.gtkw" +[timestart] 227809800 +[size] 1536 778 +[pos] -1 -1 +*-16.106964 227916000 230148000 228036000 227460000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[treeopen] tb. +[treeopen] tb.uut. +[treeopen] tb.uut.mprj. +[treeopen] tb.uut.mprj.core1. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. +[treeopen] tb.uut.mprj.sram0. +[sst_width] 261 +[signals_width] 344 +[sst_expanded] 1 +[sst_vpaned_height] 223 +@800200 +-WBS +@28 +tb.uut.mprj.wb_clk_i +tb.uut.mprj.wb_rst_i +tb.uut.mprj.wbs_ack_o +@22 +tb.uut.mprj.wbs_adr_i[31:0] +@28 +tb.uut.mprj.wbs_cyc_i +@22 +tb.uut.mprj.wbs_dat_i[31:0] +tb.uut.mprj.wbs_dat_o[31:0] +tb.uut.mprj.wbs_sel_i[3:0] +@28 +tb.uut.mprj.wbs_stb_i +tb.uut.mprj.wbs_we_i +@1000200 +-WBS +@28 +tb.uut.mprj.core1.ram_ce +tb.uut.mprj.core1.bsy +tb.uut.mprj.sram0.csb0 +tb.uut.mprj.sram0.csb0_reg +@22 +tb.uut.mprj.dtw_e[15:0] +tb.uut.mprj.dtw_n[15:0] +@c00200 +-PQ +@22 +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] +@1401200 +-PQ +@c00200 +-Fetch +@28 +tb.uut.mprj.core1.core.FETCH.clk +@22 +tb.uut.mprj.core1.core.FETCH.addr[31:0] +tb.uut.mprj.core1.core.FETCH.dtr[31:0] +@28 +tb.uut.mprj.core1.core.FETCH.ackm +tb.uut.mprj.core1.core.FETCH.flush +@22 +tb.uut.mprj.core1.core.FETCH.newpc[31:0] +tb.uut.mprj.core1.core.FETCH.instd[31:0] +@1401200 +-Fetch +@c00200 +-BRAM CTL +@22 +tb.uut.mprj.core1.bram_ctl.i_addr[11:0] +@28 +tb.uut.mprj.core1.bram_ctl.i_clk +@22 +tb.uut.mprj.core1.bram_ctl.i_dwrite[31:0] +@28 +tb.uut.mprj.core1.bram_ctl.i_reset +tb.uut.mprj.core1.bram_ctl.i_rw +[color] 3 +tb.uut.mprj.core1.bram_ctl.i_stb +[color] 3 +tb.uut.mprj.core1.bram_ctl.o_ack +@22 +tb.uut.mprj.core1.bram_ctl.o_dread[31:0] +@28 +tb.uut.mprj.core1.bram_ctl.r_bsy +@200 +- +@22 +tb.uut.mprj.core1.bram_ctl.r_dread[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf[31:0] +tb.uut.mprj.core1.bram_ctl.wbuf[31:0] +@200 +- +@22 +tb.uut.mprj.core1.bram_ctl.a0[9:0] +tb.uut.mprj.core1.bram_ctl.a1[9:0] +tb.uut.mprj.core1.bram_ctl.a2[9:0] +tb.uut.mprj.core1.bram_ctl.a3[9:0] +tb.uut.mprj.core1.bram_ctl.cpu_addr_e[15:0] +tb.uut.mprj.core1.bram_ctl.cpu_addr_n[15:0] +tb.uut.mprj.core1.bram_ctl.dbuf0[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf1[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf2[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf3[31:0] +@1401200 +-BRAM CTL +@800200 +-Decode +@28 +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset +@22 +tb.uut.mprj.core1.core.DECODE.int_line[23:0] +@28 +[color] 3 +tb.uut.mprj.core1.core.DECODE.reqd +[color] 3 +tb.uut.mprj.core1.core.DECODE.rdyd +@200 +- +@28 +[color] 3 +tb.uut.mprj.core1.core.DECODE.reqe +[color] 3 +tb.uut.mprj.core1.core.DECODE.rdye +@29 +tb.uut.mprj.core1.core.DECODE.r_hasnext +@200 +- +@22 +tb.uut.mprj.core1.core.DECODE.instd[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.DECODE.aluop[3:0] +@28 +tb.uut.mprj.core1.core.DECODE.bank[1:0] +@22 +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] +@1000200 +-Decode +@800200 +-Execute +@28 +tb.uut.mprj.core1.core.EXEC.clk +[color] 3 +tb.uut.mprj.core1.core.EXEC.req +[color] 3 +tb.uut.mprj.core1.core.EXEC.rdy +@22 +tb.uut.mprj.core1.core.EXEC.state[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval +@22 +tb.uut.mprj.core1.core.EXEC.control[54:0] +tb.uut.mprj.core1.core.EXEC.r_control[54:0] +@800200 +-Module I/O +@28 +tb.uut.mprj.core1.core.EXEC.flush +@22 +tb.uut.mprj.core1.core.EXEC.newpc[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] +@200 +- +@28 +[color] 3 +tb.uut.mprj.core1.core.EXEC.stbm +[color] 3 +tb.uut.mprj.core1.core.EXEC.ackm +[color] 3 +tb.uut.mprj.core1.core.EXEC.stlm +@22 +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] +@28 +[color] 3 +tb.uut.mprj.core1.core.EXEC.rw_mem +@200 +- +@28 +tb.uut.mprj.core1.core.EXEC.intrq +@1000200 +-Module I/O +@c00200 +-Internal Bus +@22 +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] +@1401200 +-Internal Bus +@800200 +-ALU +@22 +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry +@22 +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] +@1000200 +-ALU +@800200 +-Special Registers +@22 +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +@28 +tb.uut.mprj.core1.core.EXEC.flags[31:0] +@1000200 +-Special Registers +@c00200 +-Register Control +@28 +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] +@1401200 +-Register Control +@c00200 +-Supervisor Regfile +@22 +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] +@1401200 +-Supervisor Regfile +@c00200 +-User Regfile +@22 +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] +@1401200 +-User Regfile +@1000200 +-Execute +@c00200 +-sram0 +@22 +tb.uut.mprj.sram0.addr0[7:0] +@28 +tb.uut.mprj.sram0.clk0 +tb.uut.mprj.sram0.csb0 +@22 +tb.uut.mprj.sram0.din0[31:0] +tb.uut.mprj.sram0.dout0[31:0] +@28 +tb.uut.mprj.sram0.web0 +tb.uut.mprj.sram0.wmask0[3:0] +@1401200 +-sram0 +@c00200 +-sram1 +@22 +tb.uut.mprj.sram1.addr0[7:0] +@28 +tb.uut.mprj.sram1.clk0 +tb.uut.mprj.sram1.csb0 +@22 +tb.uut.mprj.sram1.din0[31:0] +tb.uut.mprj.sram1.dout0[31:0] +@28 +tb.uut.mprj.sram1.web0 +@22 +tb.uut.mprj.sram1.wmask0[3:0] +@1401200 +-sram1 +@c00200 +-sram3 +@22 +tb.uut.mprj.sram2.addr0[7:0] +@28 +tb.uut.mprj.sram2.clk0 +tb.uut.mprj.sram2.csb0 +@22 +tb.uut.mprj.sram2.din0[31:0] +tb.uut.mprj.sram2.dout0[31:0] +@28 +tb.uut.mprj.sram2.web0 +tb.uut.mprj.sram2.wmask0[3:0] +@1401200 +-sram3 +[pattern_trace] 1 +[pattern_trace] 0
diff --git a/verilog/dv/caravel/hs32_soc/core1test6/test6.c b/verilog/dv/caravel/hs32_soc/core1test6/test6.c new file mode 100644 index 0000000..3912a79 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/core1test6/test6.c
@@ -0,0 +1,37 @@ +#include "../../defs.h" + +void main() +{ + // Reset + reg_la0_ena = 0x00000000; // [31:0] + reg_la1_ena = 0xFFFFFFFF; // [63:32] + reg_la2_ena = 0xFFFFFFFF; // [95:64] + reg_la3_ena = 0xFFFFFFFF; // [127:96] + + // Reset and control bus + reg_la0_data = 0b01; // [0] is high means reset + reg_la0_data = 0b00; // [0] is low means stop reset + + // Write + ((volatile uint32_t*) 0x30000000)[0] = 0x24F00000; + ((volatile uint32_t*) 0x30000000)[1] = 0x50000000; + + // Release control and reset + reg_la0_data = 0b11; // [1] is high means release control back to hs32 + reg_la0_data = 0b10; + + // Configure lower 8-IOs as user output + // Observe counter value in the testbench + reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_1 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_2 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_3 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_4 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_5 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_6 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_7 = GPIO_MODE_USER_STD_OUTPUT; + + // Apply configuration + reg_mprj_xfer = 1; + while (reg_mprj_xfer == 1); +}
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test6/test6_tb.v similarity index 82% copy from verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v copy to verilog/dv/caravel/hs32_soc/core1test6/test6_tb.v index 433d28e..05b86f2 100644 --- a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test6/test6_tb.v
@@ -8,13 +8,15 @@ `include "spiflash.v" module tb(); + parameter TEST_ID = 6; + reg clock; - reg RSTB; + reg RSTB; reg power1, power2; reg power3, power4; - wire gpio; - wire [37:0] mprj_io; + wire gpio; + wire [37:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; @@ -65,12 +67,16 @@ end initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; + // Test cases go here + end + + always @(*) begin + if(tb.uut.mprj.core1.core.EXEC.fault) begin + $display("%c[1;31m",27); + $display("Test %d: Faulted!", TEST_ID); + $display("%c[0m",27); + $finish; + end end always @(mprj_io) begin @@ -105,7 +111,7 @@ .vssd2 (VSS), .clock (clock), .gpio (gpio), - .mprj_io (mprj_io), + .mprj_io (mprj_io), .flash_csb(flash_csb), .flash_clk(flash_clk), .flash_io0(flash_io0), @@ -114,7 +120,7 @@ ); spiflash #( - .FILENAME("test1.hex") + .FILENAME("test6.hex") ) spiflash ( .csb(flash_csb), .clk(flash_clk),
diff --git a/verilog/dv/caravel/hs32_soc/core1test1.no/Makefile b/verilog/dv/caravel/hs32_soc/core1test7/Makefile similarity index 93% rename from verilog/dv/caravel/hs32_soc/core1test1.no/Makefile rename to verilog/dv/caravel/hs32_soc/core1test7/Makefile index 245b54a..49aa8c1 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1.no/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test7/Makefile
@@ -9,7 +9,7 @@ .SUFFIXES: -PATTERN = test1 +PATTERN = test7 all: ${PATTERN:=.vcd} @@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test7/README.md b/verilog/dv/caravel/hs32_soc/core1test7/README.md new file mode 100644 index 0000000..21f94d2 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/core1test7/README.md
@@ -0,0 +1,64 @@ +# HS32 Example Instruction 5 + +**Interrupts and AICT** + +The HS32 instruction format looks like this: + +| Type | Wire Format | +| ------ | ----------------------------------------- | +| I-Type | `oooo_oooo_dddd_mmmm iiii_iiii_iiii_iiii` | +| R-Type | `oooo_oooo_dddd_mmmm nnnn_ssss_sDDb_bxxx` | + +The hexadecimal format looks like this: + +| Type | bram3.hex | bram2.hex | bram1.hex | bram0.hex | +| ------ | ----------- | ----------- | ----------- | ----------- | +| I-Type | `oooo_oooo` | `dddd_mmmm` | `iiii_iiii` | `iiii_iiii` | +| R-Type | `oooo_oooo` | `dddd_mmmm` | `nnnn_ssss` | `sDDb_bxxx` | + +## Assembly + +```assembly +MOV R0, 0xFF00 +LDR R1, R0 + +MOV R2, 0x0BA0 +MOV R3, high(COND1) ; 0x5000 +MOV R3, R3, 16 ; R3 <- (R3 << 16) +STR R3, R2 ; [R2] <-- R3 +MOV R4, 0x0BA1 +STR R4, R0, 0x0010 ; STR [Rm + imm] <- Rd + +LDR R5, R0, 0x0010 + +INT 0x0003 +``` + +## Hexadecimal + +```hex +0x 24 00 FF 00 +0x 10 10 00 00 + +0x 24 20 0B A0 +0x 24 30 50 00 +0x 20 30 38 00 +0x 30 23 00 00 +0x 24 40 0B A1 +0x 34 40 00 10 + +0x 14 50 00 10 + +0x 90 00 00 03 +``` + +## Expected result + +- [ ] `R0 = 0x` +- [ ] `R1 = 0x` +- [ ] `R2 = 0x` +- [ ] `R3 = 0x` +- [ ] `R4 = 0x` +- [ ] `R5 = 0x` +- [ ] `R6 = 0x` +- [ ] `R7 = 0x`
diff --git a/verilog/dv/caravel/hs32_soc/core1test7/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test7/tb.gtkw new file mode 100644 index 0000000..831f9e2 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/core1test7/tb.gtkw
@@ -0,0 +1,369 @@ +[*] +[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI +[*] Sat Dec 19 06:57:44 2020 +[*] +[dumpfile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test7/dump.vcd" +[dumpfile_mtime] "Sat Dec 19 06:49:49 2020" +[dumpfile_size] 309579312 +[savefile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test7/tb.gtkw" +[timestart] 160515500 +[size] 1536 801 +[pos] -9 -33 +*-16.106964 160668000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[treeopen] tb. +[treeopen] tb.uut. +[treeopen] tb.uut.mprj. +[treeopen] tb.uut.mprj.core1. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. +[treeopen] tb.uut.mprj.sram0. +[sst_width] 265 +[signals_width] 269 +[sst_expanded] 1 +[sst_vpaned_height] 222 +@c00200 +-WBS +@28 +tb.uut.mprj.wb_clk_i +tb.uut.mprj.wb_rst_i +tb.uut.mprj.wbs_ack_o +@22 +tb.uut.mprj.wbs_adr_i[31:0] +@28 +tb.uut.mprj.wbs_cyc_i +@22 +tb.uut.mprj.wbs_dat_i[31:0] +tb.uut.mprj.wbs_dat_o[31:0] +tb.uut.mprj.wbs_sel_i[3:0] +@28 +tb.uut.mprj.wbs_stb_i +tb.uut.mprj.wbs_we_i +@1401200 +-WBS +@28 +tb.uut.mprj.core1.mmio_conn.clk +tb.uut.mprj.core1.mmio_conn.in_aict +tb.uut.mprj.core1.mmio_conn.none +@22 +tb.uut.mprj.core1.mmio_conn.aict_base[31:0] +@28 +tb.uut.mprj.core1.mmio_conn.o_ack +@22 +tb.uut.mprj.core1.mmio_conn.o_stb[3:0] +tb.uut.mprj.core1.mmio_conn.i_addr[31:0] +tb.uut.mprj.core1.mmio_conn.i_ack[3:0] +@23 +tb.uut.mprj.core1.mmio_conn.sel[3:0] +@200 +- +@c00200 +-SRAM +@28 +tb.uut.mprj.core1.ram_ce +tb.uut.mprj.core1.bsy +tb.uut.mprj.sram0.csb0 +tb.uut.mprj.sram0.csb0_reg +@22 +tb.uut.mprj.dtw_e[15:0] +tb.uut.mprj.dtw_n[15:0] +@1401200 +-SRAM +@c00200 +-PQ +@22 +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] +@1401200 +-PQ +@c00200 +-BRAM CTL +@22 +tb.uut.mprj.core1.bram_ctl.i_addr[11:0] +@28 +tb.uut.mprj.core1.bram_ctl.i_clk +@22 +tb.uut.mprj.core1.bram_ctl.i_dwrite[31:0] +@28 +tb.uut.mprj.core1.bram_ctl.i_reset +tb.uut.mprj.core1.bram_ctl.i_rw +[color] 3 +tb.uut.mprj.core1.bram_ctl.i_stb +[color] 3 +tb.uut.mprj.core1.bram_ctl.o_ack +@22 +tb.uut.mprj.core1.bram_ctl.o_dread[31:0] +@28 +tb.uut.mprj.core1.bram_ctl.r_bsy +@200 +- +@22 +tb.uut.mprj.core1.bram_ctl.r_dread[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf[31:0] +tb.uut.mprj.core1.bram_ctl.wbuf[31:0] +@200 +- +@22 +tb.uut.mprj.core1.bram_ctl.a0[9:0] +tb.uut.mprj.core1.bram_ctl.a1[9:0] +tb.uut.mprj.core1.bram_ctl.a2[9:0] +tb.uut.mprj.core1.bram_ctl.a3[9:0] +tb.uut.mprj.core1.bram_ctl.cpu_addr_e[15:0] +tb.uut.mprj.core1.bram_ctl.cpu_addr_n[15:0] +tb.uut.mprj.core1.bram_ctl.dbuf0[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf1[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf2[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf3[31:0] +@1401200 +-BRAM CTL +@c00200 +-Decode +@28 +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset +@22 +tb.uut.mprj.core1.core.DECODE.int_line[23:0] +@28 +[color] 3 +tb.uut.mprj.core1.core.DECODE.reqd +[color] 3 +tb.uut.mprj.core1.core.DECODE.rdyd +@200 +- +@28 +[color] 3 +tb.uut.mprj.core1.core.DECODE.reqe +[color] 3 +tb.uut.mprj.core1.core.DECODE.rdye +@200 +- +@22 +tb.uut.mprj.core1.core.DECODE.instd[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.DECODE.aluop[3:0] +@28 +tb.uut.mprj.core1.core.DECODE.bank[1:0] +@22 +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] +@1401200 +-Decode +@800200 +-Execute +@28 +tb.uut.mprj.core1.core.EXEC.clk +[color] 3 +tb.uut.mprj.core1.core.EXEC.req +[color] 3 +tb.uut.mprj.core1.core.EXEC.rdy +@22 +tb.uut.mprj.core1.core.EXEC.state[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval +@800200 +-Module I/O +@28 +tb.uut.mprj.core1.core.EXEC.flush +@22 +tb.uut.mprj.core1.core.EXEC.newpc[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] +@200 +- +@28 +[color] 3 +tb.uut.mprj.core1.core.EXEC.stbm +[color] 3 +tb.uut.mprj.core1.core.EXEC.ackm +[color] 3 +tb.uut.mprj.core1.core.EXEC.stlm +@22 +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] +@28 +[color] 3 +tb.uut.mprj.core1.core.EXEC.rw_mem +@200 +- +@28 +tb.uut.mprj.core1.core.EXEC.intrq +@1000200 +-Module I/O +@c00200 +-Internal Bus +@22 +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] +@1401200 +-Internal Bus +@c00200 +-ALU +@22 +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry +@22 +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] +@1401200 +-ALU +@c00200 +-Special Registers +@22 +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +tb.uut.mprj.core1.core.EXEC.flags[31:0] +@1401200 +-Special Registers +@c00200 +-Register Control +@28 +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] +@1401200 +-Register Control +@c00200 +-Supervisor Regfile +@22 +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] +@1401200 +-Supervisor Regfile +@c00200 +-User Regfile +@22 +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] +@1401200 +-User Regfile +@1000200 +-Execute +@c00200 +-sram0 +@22 +tb.uut.mprj.sram0.addr0[7:0] +@28 +tb.uut.mprj.sram0.clk0 +tb.uut.mprj.sram0.csb0 +@22 +tb.uut.mprj.sram0.din0[31:0] +tb.uut.mprj.sram0.dout0[31:0] +@28 +tb.uut.mprj.sram0.web0 +tb.uut.mprj.sram0.wmask0[3:0] +@1401200 +-sram0 +@c00200 +-sram1 +@22 +tb.uut.mprj.sram1.addr0[7:0] +@28 +tb.uut.mprj.sram1.clk0 +tb.uut.mprj.sram1.csb0 +@22 +tb.uut.mprj.sram1.din0[31:0] +tb.uut.mprj.sram1.dout0[31:0] +@28 +tb.uut.mprj.sram1.web0 +@22 +tb.uut.mprj.sram1.wmask0[3:0] +@1401200 +-sram1 +@c00200 +-sram3 +@22 +tb.uut.mprj.sram2.addr0[7:0] +@28 +tb.uut.mprj.sram2.clk0 +tb.uut.mprj.sram2.csb0 +@22 +tb.uut.mprj.sram2.din0[31:0] +tb.uut.mprj.sram2.dout0[31:0] +@28 +tb.uut.mprj.sram2.web0 +tb.uut.mprj.sram2.wmask0[3:0] +@1401200 +-sram3 +[pattern_trace] 1 +[pattern_trace] 0
diff --git a/verilog/dv/caravel/hs32_soc/core1test5/test1.c b/verilog/dv/caravel/hs32_soc/core1test7/test7.c similarity index 63% copy from verilog/dv/caravel/hs32_soc/core1test5/test1.c copy to verilog/dv/caravel/hs32_soc/core1test7/test7.c index c8db3ad..b7158b6 100644 --- a/verilog/dv/caravel/hs32_soc/core1test5/test1.c +++ b/verilog/dv/caravel/hs32_soc/core1test7/test7.c
@@ -13,17 +13,16 @@ reg_la0_data = 0b00; // [0] is low means stop reset // Write - ((volatile uint32_t*) 0x30000000)[0] = 0x2400000F; - ((volatile uint32_t*) 0x30000000)[1] = 0x241000F0; - ((volatile uint32_t*) 0x30000000)[2] = 0x24200F00; - ((volatile uint32_t*) 0x30000000)[3] = 0x2430F000; - ((volatile uint32_t*) 0x30000000)[4] = 0x24400BAD; - ((volatile uint32_t*) 0x30000000)[5] = 0x24500B09; - ((volatile uint32_t*) 0x30000000)[6] = 0x30040000; - ((volatile uint32_t*) 0x30000000)[7] = 0x10640000; - ((volatile uint32_t*) 0x30000000)[8] = 0x31251100; - ((volatile uint32_t*) 0x30000000)[9] = 0x11751100; - ((volatile uint32_t*) 0x30000000)[10] = 0x50000000; + ((volatile uint32_t*) 0x30000000)[0] = 0x2400FF00; + ((volatile uint32_t*) 0x30000000)[1] = 0x10100000; + ((volatile uint32_t*) 0x30000000)[2] = 0x24200BA0; + ((volatile uint32_t*) 0x30000000)[3] = 0x24305000; + ((volatile uint32_t*) 0x30000000)[4] = 0x20303800; + ((volatile uint32_t*) 0x30000000)[5] = 0x30320000; + ((volatile uint32_t*) 0x30000000)[6] = 0x24400BA1; + ((volatile uint32_t*) 0x30000000)[7] = 0x34400010; + ((volatile uint32_t*) 0x30000000)[8] = 0x14500010; + ((volatile uint32_t*) 0x30000000)[9] = 0x90000003; // Release control and reset reg_la0_data = 0b11; // [1] is high means release control back to hs32
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test7/test7_tb.v similarity index 85% rename from verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v rename to verilog/dv/caravel/hs32_soc/core1test7/test7_tb.v index 433d28e..7952d1a 100644 --- a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test7/test7_tb.v
@@ -1,4 +1,5 @@ `define DBG1 +`define LOG_MEMORY_WRITE `default_nettype none @@ -8,6 +9,8 @@ `include "spiflash.v" module tb(); + parameter TEST_ID = 5; + reg clock; reg RSTB; reg power1, power2; @@ -65,12 +68,16 @@ end initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; + // Test cases go here + end + + always @(*) begin + if(tb.uut.mprj.core1.core.EXEC.fault) begin + $display("%c[1;31m",27); + $display("Test %d: Faulted!", TEST_ID); + $display("%c[0m",27); + $finish; + end end always @(mprj_io) begin @@ -114,7 +121,7 @@ ); spiflash #( - .FILENAME("test1.hex") + .FILENAME("test7.hex") ) spiflash ( .csb(flash_csb), .clk(flash_clk),
diff --git a/verilog/dv/caravel/hs32_soc/core1test1.no/Makefile b/verilog/dv/caravel/hs32_soc/core1test8/Makefile similarity index 93% copy from verilog/dv/caravel/hs32_soc/core1test1.no/Makefile copy to verilog/dv/caravel/hs32_soc/core1test8/Makefile index 245b54a..5488205 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1.no/Makefile +++ b/verilog/dv/caravel/hs32_soc/core1test8/Makefile
@@ -9,7 +9,7 @@ .SUFFIXES: -PATTERN = test1 +PATTERN = test6 all: ${PATTERN:=.vcd} @@ -37,6 +37,6 @@ # ---- Clean ---- clean: - rm -f *.elf *.hex *.bin *.vvp *.vcd *.log + rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.idx .PHONY: clean hex all
diff --git a/verilog/dv/caravel/hs32_soc/core1test1.no/README.md b/verilog/dv/caravel/hs32_soc/core1test8/README.md similarity index 71% rename from verilog/dv/caravel/hs32_soc/core1test1.no/README.md rename to verilog/dv/caravel/hs32_soc/core1test8/README.md index 4c5d2b2..7e554a4 100644 --- a/verilog/dv/caravel/hs32_soc/core1test1.no/README.md +++ b/verilog/dv/caravel/hs32_soc/core1test8/README.md
@@ -1,4 +1,6 @@ -# HS32 Test Instruction 1 +# HS32 Example Instruction 6 + +**General Test 1** The HS32 instruction format looks like this: @@ -34,10 +36,10 @@ MOV R6_u, R2 ; R6_u = 0x0ADD MOV R4, 0x0B09 ; Branch Address -MOV R5, high(COND1) ; 0x2166 -MOV R5, R5, 16 ; R5 <- (R5 << 16) -MOV R5, low(COND1) ; 0x0000 -STR R4, R5 ; [R4] <- R5 +MOV R8, high(COND1) ; 0x2166 +MOV R8, R8, 16 ; R8 <- (R8 << 16) +MOV R8, low(COND1) ; 0x0000 +STR R4, R8 ; [R4] <- R8 COND2: MOV R6, R6_u ; R6 <- R6_u @@ -56,28 +58,42 @@ ```hex 0x 24 00 BE EF 0x 24 10 0A DD -0x 20 20 10 00 -0x 60 00 10 00 +0x 20 21 00 00 +0x 60 01 10 00 0x 30 02 00 00 0x 10 12 00 00 0x 24 30 0B AD 0x 24 50 22 62 -0x 20 50 58 00 +0x 20 50 51 00 0x 24 50 00 00 0x 30 53 00 00 -0x 24 40 0B AD -0x 24 50 21 66 -0x 20 50 58 00 -0x 24 50 00 00 -0x 30 54 00 00 +0x 24 40 0B 09 +0x 24 80 21 66 +0x 20 80 81 00 +0x 24 80 00 00 +0x 30 84 00 00 0x 68 00 10 00 -0x 52 00 0B AD +0x 72 00 0B AD 0x 68 01 20 00 -0x 59 00 0B 09 +0x 79 00 0B 09 -0x 20 70 68 00 +0x 20 70 61 00 + +0x 50 00 00 00 ``` + +## Expected result + +- [x] `R0 = 0xB412` +- [x] `R1 = 0xB412` +- [x] `R2 = 0x0ADD` +- [x] `R3 = 0x0BAD` +- [ ] `R4 = 0x0B09` +- [ ] `R5 = 0x21660000` +- [ ] `R6 = 0x0ADD` +- [ ] `R6_u = 0x0ADD` +- [ ] `R7 = 0x0ADD0000`
diff --git a/verilog/dv/caravel/hs32_soc/core1test8/tb.gtkw b/verilog/dv/caravel/hs32_soc/core1test8/tb.gtkw new file mode 100644 index 0000000..bcaa546 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/core1test8/tb.gtkw
@@ -0,0 +1,370 @@ +[*] +[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI +[*] Fri Dec 18 19:17:22 2020 +[*] +[dumpfile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test6/dump.vcd" +[dumpfile_mtime] "Fri Dec 18 18:47:04 2020" +[dumpfile_size] 328739070 +[savefile] "/data/caravel-hs32core/verilog/dv/caravel/hs32_soc/core1test6/tb.gtkw" +[timestart] 227809800 +[size] 1536 778 +[pos] -1 -1 +*-16.106964 227916000 230148000 228036000 227460000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[treeopen] tb. +[treeopen] tb.uut. +[treeopen] tb.uut.mprj. +[treeopen] tb.uut.mprj.core1. +[treeopen] tb.uut.mprj.core1.core. +[treeopen] tb.uut.mprj.core1.core.EXEC. +[treeopen] tb.uut.mprj.sram0. +[sst_width] 261 +[signals_width] 344 +[sst_expanded] 1 +[sst_vpaned_height] 223 +@800200 +-WBS +@28 +tb.uut.mprj.wb_clk_i +tb.uut.mprj.wb_rst_i +tb.uut.mprj.wbs_ack_o +@22 +tb.uut.mprj.wbs_adr_i[31:0] +@28 +tb.uut.mprj.wbs_cyc_i +@22 +tb.uut.mprj.wbs_dat_i[31:0] +tb.uut.mprj.wbs_dat_o[31:0] +tb.uut.mprj.wbs_sel_i[3:0] +@28 +tb.uut.mprj.wbs_stb_i +tb.uut.mprj.wbs_we_i +@1000200 +-WBS +@28 +tb.uut.mprj.core1.ram_ce +tb.uut.mprj.core1.bsy +tb.uut.mprj.sram0.csb0 +tb.uut.mprj.sram0.csb0_reg +@22 +tb.uut.mprj.dtw_e[15:0] +tb.uut.mprj.dtw_n[15:0] +@c00200 +-PQ +@22 +tb.uut.mprj.core1.core.FETCH.\fifo[0][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[1][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[2][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[3][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[4][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[5][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[6][31:0] +tb.uut.mprj.core1.core.FETCH.\fifo[7][31:0] +@1401200 +-PQ +@c00200 +-Fetch +@28 +tb.uut.mprj.core1.core.FETCH.clk +@22 +tb.uut.mprj.core1.core.FETCH.addr[31:0] +tb.uut.mprj.core1.core.FETCH.dtr[31:0] +@28 +tb.uut.mprj.core1.core.FETCH.ackm +tb.uut.mprj.core1.core.FETCH.flush +@22 +tb.uut.mprj.core1.core.FETCH.newpc[31:0] +tb.uut.mprj.core1.core.FETCH.instd[31:0] +@1401200 +-Fetch +@c00200 +-BRAM CTL +@22 +tb.uut.mprj.core1.bram_ctl.i_addr[11:0] +@28 +tb.uut.mprj.core1.bram_ctl.i_clk +@22 +tb.uut.mprj.core1.bram_ctl.i_dwrite[31:0] +@28 +tb.uut.mprj.core1.bram_ctl.i_reset +tb.uut.mprj.core1.bram_ctl.i_rw +[color] 3 +tb.uut.mprj.core1.bram_ctl.i_stb +[color] 3 +tb.uut.mprj.core1.bram_ctl.o_ack +@22 +tb.uut.mprj.core1.bram_ctl.o_dread[31:0] +@28 +tb.uut.mprj.core1.bram_ctl.r_bsy +@200 +- +@22 +tb.uut.mprj.core1.bram_ctl.r_dread[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf[31:0] +tb.uut.mprj.core1.bram_ctl.wbuf[31:0] +@200 +- +@22 +tb.uut.mprj.core1.bram_ctl.a0[9:0] +tb.uut.mprj.core1.bram_ctl.a1[9:0] +tb.uut.mprj.core1.bram_ctl.a2[9:0] +tb.uut.mprj.core1.bram_ctl.a3[9:0] +tb.uut.mprj.core1.bram_ctl.cpu_addr_e[15:0] +tb.uut.mprj.core1.bram_ctl.cpu_addr_n[15:0] +tb.uut.mprj.core1.bram_ctl.dbuf0[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf1[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf2[31:0] +tb.uut.mprj.core1.bram_ctl.dbuf3[31:0] +@1401200 +-BRAM CTL +@800200 +-Decode +@28 +tb.uut.mprj.core1.core.DECODE.clk +tb.uut.mprj.core1.core.DECODE.reset +@22 +tb.uut.mprj.core1.core.DECODE.int_line[23:0] +@28 +[color] 3 +tb.uut.mprj.core1.core.DECODE.reqd +[color] 3 +tb.uut.mprj.core1.core.DECODE.rdyd +@200 +- +@28 +[color] 3 +tb.uut.mprj.core1.core.DECODE.reqe +[color] 3 +tb.uut.mprj.core1.core.DECODE.rdye +@29 +tb.uut.mprj.core1.core.DECODE.r_hasnext +@200 +- +@22 +tb.uut.mprj.core1.core.DECODE.instd[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.DECODE.aluop[3:0] +@28 +tb.uut.mprj.core1.core.DECODE.bank[1:0] +@22 +tb.uut.mprj.core1.core.DECODE.ctlsig[15:0] +tb.uut.mprj.core1.core.DECODE.imm[15:0] +tb.uut.mprj.core1.core.DECODE.rd[3:0] +tb.uut.mprj.core1.core.DECODE.rm[3:0] +tb.uut.mprj.core1.core.DECODE.rn[3:0] +tb.uut.mprj.core1.core.DECODE.shift[4:0] +@1000200 +-Decode +@800200 +-Execute +@28 +tb.uut.mprj.core1.core.EXEC.clk +[color] 3 +tb.uut.mprj.core1.core.EXEC.req +[color] 3 +tb.uut.mprj.core1.core.EXEC.rdy +@22 +tb.uut.mprj.core1.core.EXEC.state[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.fault +tb.uut.mprj.core1.core.EXEC.int_inval +@22 +tb.uut.mprj.core1.core.EXEC.control[54:0] +tb.uut.mprj.core1.core.EXEC.r_control[54:0] +@800200 +-Module I/O +@28 +tb.uut.mprj.core1.core.EXEC.flush +@22 +tb.uut.mprj.core1.core.EXEC.newpc[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.aluop[3:0] +tb.uut.mprj.core1.core.EXEC.shift[4:0] +tb.uut.mprj.core1.core.EXEC.imm[15:0] +tb.uut.mprj.core1.core.EXEC.rd[3:0] +tb.uut.mprj.core1.core.EXEC.rm[3:0] +tb.uut.mprj.core1.core.EXEC.rn[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.ctlsig[15:0] +tb.uut.mprj.core1.core.EXEC.bank[1:0] +@200 +- +@28 +[color] 3 +tb.uut.mprj.core1.core.EXEC.stbm +[color] 3 +tb.uut.mprj.core1.core.EXEC.ackm +[color] 3 +tb.uut.mprj.core1.core.EXEC.stlm +@22 +tb.uut.mprj.core1.core.EXEC.addr[31:0] +tb.uut.mprj.core1.core.EXEC.dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtwm[31:0] +@28 +[color] 3 +tb.uut.mprj.core1.core.EXEC.rw_mem +@200 +- +@28 +tb.uut.mprj.core1.core.EXEC.intrq +@1000200 +-Module I/O +@c00200 +-Internal Bus +@22 +tb.uut.mprj.core1.core.EXEC.ibus1[31:0] +tb.uut.mprj.core1.core.EXEC.ibus2[31:0] +tb.uut.mprj.core1.core.EXEC.obus[31:0] +tb.uut.mprj.core1.core.EXEC.aluout[31:0] +@1401200 +-Internal Bus +@800200 +-ALU +@22 +tb.uut.mprj.core1.core.EXEC.alu_nzcv[3:0] +@28 +tb.uut.mprj.core1.core.EXEC.alu_nzcv_out[3:0] +tb.uut.mprj.core1.core.EXEC.alu.carry +@22 +tb.uut.mprj.core1.core.EXEC.alu.i_a[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_b[31:0] +tb.uut.mprj.core1.core.EXEC.alu.i_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.i_op[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_fl[3:0] +tb.uut.mprj.core1.core.EXEC.alu.o_r[31:0] +@1000200 +-ALU +@800200 +-Special Registers +@22 +tb.uut.mprj.core1.core.EXEC.r_dtrm[31:0] +tb.uut.mprj.core1.core.EXEC.dtw[31:0] +tb.uut.mprj.core1.core.EXEC.mar[31:0] +tb.uut.mprj.core1.core.EXEC.pc_s[31:0] +tb.uut.mprj.core1.core.EXEC.pc_u[31:0] +tb.uut.mprj.core1.core.EXEC.lr_i[31:0] +tb.uut.mprj.core1.core.EXEC.sp_i[31:0] +tb.uut.mprj.core1.core.EXEC.mcr_s[31:0] +@28 +tb.uut.mprj.core1.core.EXEC.flags[31:0] +@1000200 +-Special Registers +@c00200 +-Register Control +@28 +tb.uut.mprj.core1.core.EXEC.reg_we +tb.uut.mprj.core1.core.EXEC.reg_we_s +tb.uut.mprj.core1.core.EXEC.reg_we_u +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.regadra[3:0] +tb.uut.mprj.core1.core.EXEC.regouta[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_s[31:0] +tb.uut.mprj.core1.core.EXEC.regouta_u[31:0] +@200 +- +@22 +tb.uut.mprj.core1.core.EXEC.regadrb[3:0] +tb.uut.mprj.core1.core.EXEC.regoutb[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_s[31:0] +tb.uut.mprj.core1.core.EXEC.regoutb_u[31:0] +@1401200 +-Register Control +@c00200 +-Supervisor Regfile +@22 +tb.uut.mprj.core1.core.EXEC.regfile_s.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_s.\regs[15][31:0] +@1401200 +-Supervisor Regfile +@c00200 +-User Regfile +@22 +tb.uut.mprj.core1.core.EXEC.regfile_u.wadr[3:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[0][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[1][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[2][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[3][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[4][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[5][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[6][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[7][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[8][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[9][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[10][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[11][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[12][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[13][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[14][31:0] +tb.uut.mprj.core1.core.EXEC.regfile_u.\regs[15][31:0] +@1401200 +-User Regfile +@1000200 +-Execute +@c00200 +-sram0 +@22 +tb.uut.mprj.sram0.addr0[7:0] +@28 +tb.uut.mprj.sram0.clk0 +tb.uut.mprj.sram0.csb0 +@22 +tb.uut.mprj.sram0.din0[31:0] +tb.uut.mprj.sram0.dout0[31:0] +@28 +tb.uut.mprj.sram0.web0 +tb.uut.mprj.sram0.wmask0[3:0] +@1401200 +-sram0 +@c00200 +-sram1 +@22 +tb.uut.mprj.sram1.addr0[7:0] +@28 +tb.uut.mprj.sram1.clk0 +tb.uut.mprj.sram1.csb0 +@22 +tb.uut.mprj.sram1.din0[31:0] +tb.uut.mprj.sram1.dout0[31:0] +@28 +tb.uut.mprj.sram1.web0 +@22 +tb.uut.mprj.sram1.wmask0[3:0] +@1401200 +-sram1 +@c00200 +-sram3 +@22 +tb.uut.mprj.sram2.addr0[7:0] +@28 +tb.uut.mprj.sram2.clk0 +tb.uut.mprj.sram2.csb0 +@22 +tb.uut.mprj.sram2.din0[31:0] +tb.uut.mprj.sram2.dout0[31:0] +@28 +tb.uut.mprj.sram2.web0 +tb.uut.mprj.sram2.wmask0[3:0] +@1401200 +-sram3 +[pattern_trace] 1 +[pattern_trace] 0
diff --git a/verilog/dv/caravel/hs32_soc/core1test8/test6.c b/verilog/dv/caravel/hs32_soc/core1test8/test6.c new file mode 100644 index 0000000..f02cd94 --- /dev/null +++ b/verilog/dv/caravel/hs32_soc/core1test8/test6.c
@@ -0,0 +1,56 @@ +#include "../../defs.h" + +void main() +{ + // Reset + reg_la0_ena = 0x00000000; // [31:0] + reg_la1_ena = 0xFFFFFFFF; // [63:32] + reg_la2_ena = 0xFFFFFFFF; // [95:64] + reg_la3_ena = 0xFFFFFFFF; // [127:96] + + // Reset and control bus + reg_la0_data = 0b01; // [0] is high means reset + reg_la0_data = 0b00; // [0] is low means stop reset + + // Write + ((volatile uint32_t*) 0x30000000)[0] = 0x2400BEEF; + ((volatile uint32_t*) 0x30000000)[1] = 0x24100ADD; + ((volatile uint32_t*) 0x30000000)[2] = 0x20210000; + ((volatile uint32_t*) 0x30000000)[3] = 0x60011000; + ((volatile uint32_t*) 0x30000000)[4] = 0x30020000; + ((volatile uint32_t*) 0x30000000)[5] = 0x10120000; + ((volatile uint32_t*) 0x30000000)[6] = 0x24300BAD; + ((volatile uint32_t*) 0x30000000)[7] = 0x24502262; + ((volatile uint32_t*) 0x30000000)[8] = 0x20505100; + ((volatile uint32_t*) 0x30000000)[9] = 0x24500000; + ((volatile uint32_t*) 0x30000000)[10] = 0x30530000; + ((volatile uint32_t*) 0x30000000)[11] = 0x24400B09; + ((volatile uint32_t*) 0x30000000)[12] = 0x24802166; + ((volatile uint32_t*) 0x30000000)[13] = 0x20808100; + ((volatile uint32_t*) 0x30000000)[14] = 0x24800000; + ((volatile uint32_t*) 0x30000000)[15] = 0x30840000; + ((volatile uint32_t*) 0x30000000)[16] = 0x68001000; + ((volatile uint32_t*) 0x30000000)[17] = 0x72000BAD; + ((volatile uint32_t*) 0x30000000)[18] = 0x68012000; + ((volatile uint32_t*) 0x30000000)[19] = 0x79000B09; + ((volatile uint32_t*) 0x30000000)[20] = 0x20706100; + + // Release control and reset + reg_la0_data = 0b11; // [1] is high means release control back to hs32 + reg_la0_data = 0b10; + + // Configure lower 8-IOs as user output + // Observe counter value in the testbench + reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_1 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_2 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_3 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_4 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_5 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_6 = GPIO_MODE_USER_STD_OUTPUT; + reg_mprj_io_7 = GPIO_MODE_USER_STD_OUTPUT; + + // Apply configuration + reg_mprj_xfer = 1; + while (reg_mprj_xfer == 1); +}
diff --git a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v b/verilog/dv/caravel/hs32_soc/core1test8/test6_tb.v similarity index 82% copy from verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v copy to verilog/dv/caravel/hs32_soc/core1test8/test6_tb.v index 433d28e..05b86f2 100644 --- a/verilog/dv/caravel/hs32_soc/core1test2/test1_tb.v +++ b/verilog/dv/caravel/hs32_soc/core1test8/test6_tb.v
@@ -8,13 +8,15 @@ `include "spiflash.v" module tb(); + parameter TEST_ID = 6; + reg clock; - reg RSTB; + reg RSTB; reg power1, power2; reg power3, power4; - wire gpio; - wire [37:0] mprj_io; + wire gpio; + wire [37:0] mprj_io; wire [7:0] mprj_io_0; assign mprj_io_0 = mprj_io[7:0]; @@ -65,12 +67,16 @@ end initial begin - // Some weak test cases - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[0] == 16'hCAFE); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[1] == 16'h5); - wait(tb.uut.mprj.core1.core1.EXEC.regfile_s.regs[2] == 16'hCAFE); - $display("Test 1 [MOV, LDR, STR Variant 1] Passed Weak Cases"); - //$finish; + // Test cases go here + end + + always @(*) begin + if(tb.uut.mprj.core1.core.EXEC.fault) begin + $display("%c[1;31m",27); + $display("Test %d: Faulted!", TEST_ID); + $display("%c[0m",27); + $finish; + end end always @(mprj_io) begin @@ -105,7 +111,7 @@ .vssd2 (VSS), .clock (clock), .gpio (gpio), - .mprj_io (mprj_io), + .mprj_io (mprj_io), .flash_csb(flash_csb), .flash_clk(flash_clk), .flash_io0(flash_io0), @@ -114,7 +120,7 @@ ); spiflash #( - .FILENAME("test1.hex") + .FILENAME("test6.hex") ) spiflash ( .csb(flash_csb), .clk(flash_clk),
diff --git a/verilog/rtl/hs32_user_proj/dev_filter.v b/verilog/rtl/hs32_user_proj/dev_filter.v new file mode 100644 index 0000000..6713925 --- /dev/null +++ b/verilog/rtl/hs32_user_proj/dev_filter.v
@@ -0,0 +1,26 @@ +// TODO: Hahaha too lazy to do it +module dev_filter ( + input wire clk, + input wire rst, + input wire a, + output wire b, + output reg rise, + output reg fall +); + reg[1:0] sync; + assign b = sync[1]; + + always @(posedge clk) if(rst) begin + sync <= 0; + end else begin + sync <= { sync[0], a }; + end + + always @(posedge clk) if(rst) begin + rise <= 0; + fall <= 0; + end else begin + rise <= sync == 2'b01; + fall <= sync == 2'b10; + end +endmodule \ No newline at end of file
diff --git a/verilog/rtl/hs32_user_proj/dev_intercon.v b/verilog/rtl/hs32_user_proj/dev_intercon.v new file mode 100644 index 0000000..f3a6c15 --- /dev/null +++ b/verilog/rtl/hs32_user_proj/dev_intercon.v
@@ -0,0 +1,98 @@ +// SPDX-FileCopyrightText: 2020 Efabless Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// SPDX-License-Identifier: Apache-2.0 + +`default_nettype none +module dev_intercon ( + input wire clk, + input wire reset, + + // Controller interface + // rw and dtw are connected to all devices + input wire i_stb, + output wire o_ack, + input wire[31:0] i_addr, + output wire[31:0] o_dtr, + input wire[31:0] i_dtw, + input wire i_rw, + + // Devices interface + input wire[32*NS-1:0] i_dtr, + input wire[NS-1:0] i_ack, + output wire[NS-1:0] o_stb, + output wire[MASK_LEN-1:0] o_addr, + + // SRAM Interface + output wire sstb, + input wire sack, + input wire[31:0] sdtr +); + parameter NS = 4; + parameter[MASK_LEN*NS-1:0] BASE = { + { 2'b00, 8'b0 }, + { 2'b01, 8'b0 }, + { 2'b10, 8'b0 }, + { 2'b11, 8'b0 } + }; + parameter[MASK_LEN*NS-1:0] MASK = { + { 2'b11, 8'b0 }, + { 2'b11, 8'b0 }, + { 2'b11, 8'b0 }, + { 2'b11, 8'b0 } + }; + parameter MASK_LEN = 10; + + reg[31:0] aict_base; + reg[31:0] r_dtr; + wire[NS-1:0] sel; + wire none = ~(|sel); + wire in_aict = aict_base[31:MASK_LEN] == i_addr[31:MASK_LEN]; + + // Address decoder + genvar i; + generate + for(i = 0; i < NS; i = i+1) begin + assign sel[i] = + in_aict && + ((i_addr[0+:MASK_LEN] & MASK[i*MASK_LEN+:MASK_LEN]) + == BASE[i*MASK_LEN+:MASK_LEN]); + end + endgenerate + + assign o_addr = i_addr[0+:MASK_LEN]; + + // Data selector + integer j; + always @(*) begin + r_dtr = 32'b0; + for(j = 0; j < 32 * NS; j = j+1) + r_dtr[j%32] = r_dtr[j%32] | (sel[j/32] & i_dtr[j]); + end + assign o_dtr = none ? sdtr : i_addr == aict_base ? aict_base : r_dtr; + + // Other signals + assign o_ack = none ? sack : |(i_ack & sel); + assign o_stb = { NS{ i_stb } } & sel; + assign sstb = none & i_stb; + + // AICT base register + always @(posedge clk) if(reset) begin + aict_base <= 32'h0000_FF00; + end else if(i_addr == aict_base && i_stb && i_rw) begin + aict_base <= i_dtw; + `ifdef SIM + $display($time, " AICT moved to %X", i_dtw); + `endif + end +endmodule
diff --git a/verilog/rtl/hs32_user_proj/dev_timer.v b/verilog/rtl/hs32_user_proj/dev_timer.v new file mode 100644 index 0000000..3d9e09a --- /dev/null +++ b/verilog/rtl/hs32_user_proj/dev_timer.v
@@ -0,0 +1,122 @@ +module dev_timer ( + input wire clk, + input wire reset, + + // Config + input wire[2:0] clk_source, + input wire[1:0] timer_mode, + input wire[1:0] output_mode, + + // Registers + input wire[TIMER_BITS-1:0] match, + + // Outputs + output reg int_match, + output wire io, + + // Pulse for 1T if I/O risen/fallen + input wire io_risen, + input wire io_fallen +); + parameter TIMER_BITS = 16; + +`define TIMER_MODE_CTC 1 +`define TIMER_MODE_SPWM 2 // Single edge PWM +`define TIMER_MODE_DPWM 3 // Dual edge PWM (rise/fall) +`define TIMER_OUTPUT_TOGGLE 1 +`define TIMER_OUTPUT_INV 3 + + reg[TIMER_BITS-1:0] counter; + reg[9:0] divider; + reg direction; // 1 is ++ + + wire scale_clk = + clk_source == 1 ? 1 : + clk_source == 2 ? divider[2] : // scale clk 8 + clk_source == 3 ? divider[5] : // scale clk 64 + clk_source == 4 ? divider[7] : // scale clk 256 + clk_source == 5 ? divider[9] : // scale clk 1024 + clk_source == 6 ? io_risen : + clk_source == 7 ? io_fallen : 0; + wire timer_match = match == counter; + wire timer_ovf = & counter; + + reg io_normal, io_spwm, io_dpwm; + wire io_output = + timer_mode == `TIMER_MODE_SPWM ? io_spwm : + timer_mode == `TIMER_MODE_DPWM ? io_dpwm : io_normal; + assign io = output_mode == `TIMER_OUTPUT_INV ? ~io_output : io_output; + + // Clock divider, drives: divider + always @(posedge clk) if(reset) begin + divider <= 0; + end else begin + divider <= divider + 1; + end + + // Counter, drives: counter + always @(posedge clk) if(reset) begin + counter <= 0; + end else if(scale_clk) begin + if(timer_match && timer_mode == `TIMER_MODE_CTC) begin + counter <= 0; + end else begin + counter <= + timer_mode == `TIMER_MODE_DPWM && (counter == {TIMER_BITS{1'b1}} || !direction) ? + counter - 1 : counter + 1; + end + end + + // Counter direction, drives: direction + always @(posedge clk) if(reset) begin + direction <= 1; + end else if(scale_clk) begin + if(timer_ovf && timer_mode == `TIMER_MODE_DPWM) begin + direction <= ~direction; + end else if(counter == 1) begin + direction <= 1; + end + end + + // Timer output, drives: io_normal + always @(posedge clk) if(reset) begin + io_normal <= 0; + end else begin + if(timer_match) begin + io_normal <= output_mode == `TIMER_OUTPUT_TOGGLE ? ~io_normal : 1; + end + end + + // Timer output, drives: io_spwm + always @(posedge clk) if(reset) begin + io_spwm <= 0; + end else begin + if(timer_match) begin + io_spwm <= 1; + end else if(timer_ovf) begin + io_spwm <= 0; + end + end + + // Timer output, drives: io_dpwm + always @(posedge clk) if(reset) begin + io_dpwm <= 0; + end else begin + if(timer_match && direction) begin + io_dpwm <= 1; + end else if(timer_match && !direction) begin + io_dpwm <= 0; + end + end + + // Interrupts, drive: int_match + always @(posedge clk) if(reset) begin + int_match <= 0; + end else begin + if(timer_match) begin + int_match <= 1; + end else begin + int_match <= 0; + end + end +endmodule \ No newline at end of file
diff --git a/verilog/rtl/hs32_user_proj/hs32_aic.v b/verilog/rtl/hs32_user_proj/hs32_aic.v index 8a7fee8..f3a9e95 100644 --- a/verilog/rtl/hs32_user_proj/hs32_aic.v +++ b/verilog/rtl/hs32_user_proj/hs32_aic.v
@@ -27,7 +27,7 @@ // Memory interface in input wire stb, output wire ack, - input wire[31:0] addr, + input wire[9:0] addr, input wire[31:0] dtw, output wire[31:0] dtr, input wire rw, @@ -39,6 +39,7 @@ output wire[4:0] vec, // Interrupt vector output wire nmi // Non maskable interrupt ); + assign ack = 1; // Advanced Interrupt Controller Table reg[31:0] aict[23:0]; @@ -78,10 +79,10 @@ assign handler = aict[vec] & (~32'b1111); // Calculate table index - wire[4:0] aict_idx = addr[4:0]-1; + wire[4:0] aict_idx = addr[6:2]-1; // 1 clock cycle - assign ack = stb; + // assign ack = stb; assign dtr = aict[aict_idx]; // Reset and write @@ -91,5 +92,8 @@ aict[i] <= 0; end else if(stb && rw) begin aict[aict_idx] <= dtw; + `ifdef SIM + $display($time, " AICT write %X <- %X", aict_idx, dtw); + `endif end endmodule
diff --git a/verilog/rtl/hs32_user_proj/hs32_core1.v b/verilog/rtl/hs32_user_proj/hs32_core1.v index 498fc20..83f0405 100644 --- a/verilog/rtl/hs32_user_proj/hs32_core1.v +++ b/verilog/rtl/hs32_user_proj/hs32_core1.v
@@ -1,8 +1,32 @@ +/** + * Copyright (c) 2020 The HSC Core Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. SPDX-License-Identifier: Apache-2.0 + * + * @file hs32_core1.v + * @author Kevin Dai <kevindai02@outlook.com> + * @date Created on December 16 2020, 12:25 AM + */ + `ifdef verilator `include "defines.v" `include "cpu/hs32_cpu.v" + + `include "hs32_user_proj/hs32_aic.v" `include "hs32_user_proj/hs32_bram_ctl.v" - `include "frontend/mmio.v" + `include "hs32_user_proj/dev_filter.v" + `include "hs32_user_proj/dev_timer.v" + `include "hs32_user_proj/dev_intercon.v" `endif `default_nettype none @@ -32,14 +56,14 @@ output wire [31:0] wbs_dat_o, // Logic Analyzer Signals - input wire [127:0] la_data_in, - output wire [127:0] la_data_out, - input wire [127:0] la_oen, + input wire [1:0] la_data_in, + // output wire [127:0] la_data_out, + input wire [1:0] la_oen, // IOs - /*input wire [`MPRJ_IO_PADS-1:0] io_in, - output wire [`MPRJ_IO_PADS-1:0] io_out, - output wire [`MPRJ_IO_PADS-1:0] io_oeb,*/ + input wire [`MPRJ_IO_PADS-1:0] io_in, + output reg [`MPRJ_IO_PADS-1:0] io_out, + output reg [`MPRJ_IO_PADS-1:0] io_oeb, // Output (north and east faces) output wire [7:0] cpu_mask_n, @@ -70,11 +94,6 @@ // wire clk = (~la_oen[64])? la_data_in[64] : wb_clk_i; wire clk = wb_clk_i; wire rst = (~la_oen[0]) ? la_data_in[0] : wb_rst_i; - wire bus_hold = !(~la_oen[1] & la_data_in[1]); - - // Wishbone logic - wire wb_stb = wbs_cyc_i && wbs_stb_i; - wire wb_rw = |wbs_sel_i & wbs_we_i; //===============================// // Main CPU core @@ -85,7 +104,7 @@ hs32_cpu #( .IMUL(1), .BARREL_SHIFTER(1), .PREFETCH_SIZE(3) - ) core1 ( + ) core ( .i_clk(clk), .reset(rst), .addr(cpu_addr), .rw(cpu_rw), @@ -104,6 +123,12 @@ // Caravel + CPU Memory Bus //===============================// + // Wishbone logic + wire bus_hold = !(~la_oen[1] & la_data_in[1]); + wire wb_stb = wbs_cyc_i && wbs_stb_i; + wire wb_rw = |wbs_sel_i & wbs_we_i; + + // Bus multiplexer (caravel and main core) wire[31:0] addr, dread, dwrite; wire rw, stb, ack; assign stb = bus_hold ? wb_stb : cpu_stb; @@ -115,27 +140,67 @@ assign wbs_ack_o = bus_hold ? ack : 0; assign cpu_ack = bus_hold ? 0: ack; - reg bsy; - assign ram_ce = ~(stb | bsy); + reg ram_bsy; + assign ram_ce = ~(ram_stb | ram_bsy); always @(posedge clk) if(rst) - bsy <= 0; + ram_bsy <= 0; else begin - if(stb && !bsy) begin - bsy <= 1; - end else if(ack && bsy) begin - bsy <= 0; -`ifndef DBG1 - if(rw) begin - $display($time, " Writing %X %X", addr, dwrite); - end else begin - $display($time, " Reading %X %X", addr, dread); - end -`endif + if(ram_stb && !ram_bsy) begin + ram_bsy <= 1; + end else if(ram_ack && ram_bsy) begin + ram_bsy <= 0; end end + `ifdef SIM + reg bsy; + always @(posedge clk) if(rst) + bsy <= 0; + else if(stb && !bsy) begin + bsy <= 1; + end else if(ack && bsy) begin + bsy <= 0; + `ifdef LOG_MEMORY_WRITE + if(rw) $display($time, " Writing [%X] <- %X", addr, dwrite); + `endif + `ifdef LOG_MEMORY_READ + if(!rw) $display($time, " Reading [%X] -> %X", addr, dread); + `endif + end + `endif + //===============================// - // MMIO and Interrupts + // Memory bus interconnect + //===============================// + + wire [31:0] aic_dtr, sr0_dtr, sr1_dtr; + reg [31:0] gpt_dtr; + wire aic_ack, gpt_ack, sr0_ack, sr1_ack; + wire aic_stb, gpt_stb, sr0_stb, sr1_stb; + wire[9:0] mmio_addr; + dev_intercon mmio_conn ( + .clk(clk), .reset(rst), + + // Input + .i_stb(stb), .o_ack(ack), + .i_addr(addr), .o_dtr(dread), + .i_rw(rw), .i_dtw(dwrite), + + // Devices + .i_dtr({ sr1_dtr, sr0_dtr, gpt_dtr, aic_dtr }), + .i_ack({ sr1_ack, sr0_ack, gpt_ack, aic_ack }), + .o_stb({ sr1_stb, sr0_stb, gpt_stb, aic_stb }), + .o_addr(mmio_addr), + + // SRAM + .sstb(ram_stb), .sack(ram_ack), .sdtr(ram_dread) + ); + assign ram_rw = rw; + assign ram_addr = addr; + assign ram_dwrite = dwrite; + + //===============================// + // Interrupts //===============================// wire [23:0] inte; @@ -143,23 +208,139 @@ wire [31:0] isr; wire irq, nmi; - mmio #( - .AICT_NUM_RE(1), .AICT_NUM_RI(1) - ) mmio_unit ( + hs32_aic aict ( .clk(clk), .reset(rst), - // CPU - .stb(stb), .ack(ack), - .addr(addr), .dtw(dwrite), .dtr(dread), .rw(rw), - // RAM - .sstb(ram_stb), .sack(ram_ack), .srw(ram_rw), - .saddr(ram_addr), .sdtw(ram_dwrite), .sdtr(ram_dread), + // Bus + .stb(aic_stb), .ack(aic_ack), + .addr(mmio_addr), .dtw(dwrite), + .dtr(aic_dtr), .rw(rw), // Interrupt controller - .interrupts(inte), .handler(isr), .intrq(irq), .vec(ivec), .nmi(nmi), - // More registers - .aict_r(), .aict_w() + .interrupts(inte), .handler(isr), + .intrq(irq), .vec(ivec), .nmi(nmi) ); //===============================// + // GPIO + //===============================// + + localparam NUM_IO = `MPRJ_IO_PADS; + wire[NUM_IO-1:0] io_in_sync, io_in_rise, io_in_fall; + + // Generate filter block + dev_filter filter[NUM_IO-1:0]( + .clk(clk), + .rst(rst), + .a(io_in), + .b(io_in_sync), + .rise(io_in_rise), + .fall(io_in_fall) + ); + + assign gpt_ack = 1; + reg[75:0] io_int; + always @(posedge clk) if(rst) begin + io_out <= 0; + io_oeb <= 0; + io_int <= 0; + end else begin + if(gpt_stb && rw) case(mmio_addr) + 0: begin end + 1: io_out[31:0] <= dwrite; + 2: io_out[37:32] <= dwrite[5:0]; + 3: io_oeb[31:0] <= dwrite; + 4: io_oeb[37:32] <= dwrite[5:0]; + 5: io_int[31:0] <= dwrite; + 6: io_int[63:32] <= dwrite; + 7: io_int[75:64] <= dwrite[11:0]; + default: begin end + endcase + end + always @(*) begin + case(mmio_addr) + 0: begin end + 1: gpt_dtr = io_out[31:0]; + 2: gpt_dtr = { 26'b0, io_out[37:32] }; + 3: gpt_dtr = io_oeb[31:0]; + 4: gpt_dtr = { 26'b0, io_oeb[37:32] }; + 5: gpt_dtr = io_int[31:0]; + 6: gpt_dtr = io_int[63:32]; + 7: gpt_dtr = { 20'b0, io_int[75:64] }; + default: begin end + endcase + end + + //===============================// + // Timer + //===============================// + + localparam T0_IO_NUM = 15; + localparam T1_IO_NUM = 16; + localparam T2_IO_NUM = 17; + + // Timer 0 (there has to be a better way to do this) + wire t0_match_int; + wire t0_io_out; + reg[7:0] t0_config; + reg[15:0] t0_match; + dev_timer #( + .TIMER_BITS(16) + ) dev_timer0 ( + .clk(clk), .reset(rst), + .clk_source(t0_config[2:0]), + .timer_mode(t0_config[4:3]), + .output_mode(t0_config[6:5]), + .match(t0_match), + .int_match(t0_match_int), + .io(t0_io_out), + .io_risen(io_in_rise[T0_IO_NUM]), + .io_fallen(io_in_fall[T0_IO_NUM]) + ); + + // Timer 1 + wire t1_match_int; + wire t1_io_out; + reg[7:0] t1_config; + reg[15:0] t1_match; + dev_timer #( + .TIMER_BITS(16) + ) dev_timer1 ( + .clk(clk), .reset(rst), + .clk_source(t1_config[2:0]), + .timer_mode(t1_config[4:3]), + .output_mode(t1_config[6:5]), + .match(t1_match), + .int_match(t1_match_int), + .io(t1_io_out), + .io_risen(io_in_rise[T1_IO_NUM]), + .io_fallen(io_in_fall[T1_IO_NUM]) + ); + + // Timer 2 + wire t2_match_int; + wire t2_io_out; + reg[7:0] t2_config; + reg[31:0] t2_match; + dev_timer #( + .TIMER_BITS(32) + ) dev_timer2 ( + .clk(clk), .reset(rst), + .clk_source(t2_config[2:0]), + .timer_mode(t2_config[4:3]), + .output_mode(t2_config[6:5]), + .match(t2_match), + .int_match(t2_match_int), + .io(t2_io_out), + .io_risen(io_in_rise[T2_IO_NUM]), + .io_fallen(io_in_fall[T2_IO_NUM]) + ); + + //===============================// + // UART + //===============================// + + + + //===============================// // Internal SRAM controller //===============================// @@ -186,4 +367,4 @@ .dbuf1(cpu_dtr_e0), .dbuf0(cpu_dtr_e1) ); -endmodule \ No newline at end of file +endmodule
diff --git a/verilog/rtl/hs32_user_proj/hs32_intercon.v b/verilog/rtl/hs32_user_proj/hs32_intercon.v deleted file mode 100644 index 291efc4..0000000 --- a/verilog/rtl/hs32_user_proj/hs32_intercon.v +++ /dev/null
@@ -1,36 +0,0 @@ -module hs32_intercon ( - input wire clk, - input wire reset, - - // Controller interface - input wire stb, - output wire ack, - input wire[31:0] addr, - input wire[31:0] dtw, - input wire rw, - - // Devices interface - input wire[32*NS-1:0] dtr, - input wire[NS-1:0] i_ack, - output wire[NS-1:0] o_stb -); - parameter NS = 4; - parameter[32*NS-1:0] MASK = { - { 27'b0, 5'b11111 }, - { 27'b0, 5'b01111 }, - { 24'b0, 8'hFF }, - { 24'b0, 8'hFF } - }; - parameter [32*NS-1:0] LIMITS = { - { 27'b0, 5'd25 }, // 24 + 1 base - { 27'b0, 5'd12 }, - { 24'b0, 8'hFF }, - { 24'b0, 8'hFF } - }; - parameter BASE_MASK = - - reg[31:0] aict_base; - - - -endmodule
diff --git a/verilog/rtl/hs32_user_proj/hs32_filter.v b/verilog/rtl/hs32_user_proj/hs32_mpi.v similarity index 100% rename from verilog/rtl/hs32_user_proj/hs32_filter.v rename to verilog/rtl/hs32_user_proj/hs32_mpi.v
diff --git a/verilog/rtl/hs32_user_proj/hs32_timer.v b/verilog/rtl/hs32_user_proj/hs32_timer.v deleted file mode 100644 index 5aec73f..0000000 --- a/verilog/rtl/hs32_user_proj/hs32_timer.v +++ /dev/null
@@ -1,36 +0,0 @@ -module hs32_timer( - input wire clk, - input wire reset, - - // Config - input wire[2:0] clk_source, - input wire[1:0] timer_mode, - input wire[1:0] output_mode, - - // Registers - input wire[31:0] match, - - // Outputs - output wire int_match, - output wire io -); - reg[31:0] counter; - reg[9:0] divider; - - wire scale_clk8 = divider[2]; - wire scale_clk64 = divider[5]; - wire scale_clk256 = divider[7]; - wire scale_clk1024 = divider[9]; - - always @(posedge clk) if(reset) begin - divider <= 0; - end else begin - divider <= divider + 1; - end - - always @(posedge clk) if(reset) begin - counter <= 0; - end else begin - - end -endmodule \ No newline at end of file
diff --git a/verilog/rtl/hs32_user_proj/hs32_wrapper.v b/verilog/rtl/hs32_user_proj/hs32_wrapper.v index 9ef652f..c631fef 100644 --- a/verilog/rtl/hs32_user_proj/hs32_wrapper.v +++ b/verilog/rtl/hs32_user_proj/hs32_wrapper.v
@@ -104,9 +104,8 @@ // Logic Analyzer - .la_data_in(la_data_in), - .la_data_out(la_data_out), - .la_oen (la_oen), + .la_data_in(la_data_in[1:0]), + .la_oen (la_oen[1:0]), // SRAM meme :3 .cpu_mask_n(mask_n),
diff --git a/verilog/rtl/hs32cpu b/verilog/rtl/hs32cpu index ac451b2..48b1fe4 160000 --- a/verilog/rtl/hs32cpu +++ b/verilog/rtl/hs32cpu
@@ -1 +1 @@ -Subproject commit ac451b2df2641a39ed52cb5c19752b8fe71eec0c +Subproject commit 48b1fe43a14ee29dd3334086fa5f09c4318fcf53
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v index 44e8eda..c30ea37 100644 --- a/verilog/rtl/user_proj_example.v +++ b/verilog/rtl/user_proj_example.v
@@ -14,6 +14,19 @@ // SPDX-License-Identifier: Apache-2.0 `default_nettype none + +`ifdef SIM + `include "cpu/hs32_cpu.v" + + `include "hs32_user_proj/hs32_core1.v" + + `include "hs32_user_proj/hs32_aic.v" + `include "hs32_user_proj/hs32_bram_ctl.v" + `include "hs32_user_proj/dev_filter.v" + `include "hs32_user_proj/dev_timer.v" + `include "hs32_user_proj/dev_intercon.v" +`endif + /* *------------------------------------------------------------- * @@ -34,7 +47,8 @@ * *------------------------------------------------------------- */ - +`ifndef SIM +`ifndef verilator module user_proj_example #( parameter BITS = 32 )( @@ -170,3 +184,5 @@ endmodule `default_nettype wire +`endif +`endif
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v index 47d92f4..2a1e347 100644 --- a/verilog/rtl/user_project_wrapper.v +++ b/verilog/rtl/user_project_wrapper.v
@@ -29,7 +29,9 @@ *------------------------------------------------------------- */ -module user_project_wrapper #( +`include "hs32_user_proj/hs32_wrapper.v" + +/*module user_project_wrapper #( parameter BITS = 32 )( `ifdef USE_POWER_PINS @@ -75,9 +77,9 @@ input user_clock2 ); - /*--------------------------------------*/ - /* User project is instantiated here */ - /*--------------------------------------*/ + //--------------------------------------// + // User project is instantiated here // + //--------------------------------------// user_proj_example mprj ( `ifdef USE_POWER_PINS @@ -121,4 +123,6 @@ ); endmodule // user_project_wrapper +*/ + `default_nettype wire