latest version of the code
diff --git a/caravel b/caravel index 793bf63..ff960da 160000 --- a/caravel +++ b/caravel
@@ -1 +1 @@ -Subproject commit 793bf634c2c1b1af90be95fcd85688e869bfb667 +Subproject commit ff960da6e06dd9097e7e1152e90f5998235a7882
diff --git a/openlane/user_proj_example/config.tcl b/openlane/user_proj_example/config.tcl index 30f4576..f7f5671 100755 --- a/openlane/user_proj_example/config.tcl +++ b/openlane/user_proj_example/config.tcl
@@ -36,15 +36,15 @@ set ::env(DESIGN_IS_CORE) 0 set ::env(CLOCK_PORT) "wb_clk_i" -set ::env(CLOCK_NET) "wb_clk_i" +set ::env(CLOCK_NET) "main_module.PMU_inst_1.clk " set ::env(CLOCK_PERIOD) "10" set ::env(FP_SIZING) absolute -set ::env(DIE_AREA) "0 0 900 900" +set ::env(DIE_AREA) "0 0 1600 1600" set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg -set ::env(PL_BASIC_PLACEMENT) 1 +set ::env(PL_BASIC_PLACEMENT) 0 set ::env(PL_TARGET_DENSITY) 0.45 # Maximum layer used for routing is metal 4. @@ -60,3 +60,5 @@ set ::env(DIODE_INSERTION_STRATEGY) 4 # If you're going to use multiple power domains, then disable cvc run. set ::env(RUN_CVC) 1 + +set ::env(ROUTING_CORES) 4
diff --git a/verilog/rtl/controller/main_module.v b/verilog/rtl/controller/main_module.v index 9f18648..09a1c97 100644 --- a/verilog/rtl/controller/main_module.v +++ b/verilog/rtl/controller/main_module.v
@@ -117,6 +117,13 @@ assign xor_reduce_2_out_io = |xor_2_out_io; assign xor_reduce_3_out_io = |xor_3_out_io; // end output_io + wire ready_pmu; // wire to connect to the PMU + wire ready_pmu_backup; // wire to connect to the PMU + wire [WORD_SIZE - 1 : 0] rdata_pmu; // wire that carries the data form de pmu + wire [WORD_SIZE - 1 : 0] rdata_pmu_backup; // wire that carries the data form de pmu backup + + assign ready_o = ready_pmu | ready_pmu_backup | ready_pmu_backup; + assign rdata_o = ready_pmu ? rdata_pmu : rdata_pmu_backup; control_module #( .WORD_SIZE(WORD_SIZE), @@ -184,18 +191,41 @@ PMU#( .WORD_SIZE(WORD_SIZE), .OUTPUTS(OUTPUTS), - .INPUTS(INPUTS) + .INPUTS(INPUTS), + .ADDRBASE (20'h3000_0) ) PMU_inst_1( .clk(clk), .rst(rst), .wstrb_i(wstrb_i), .wdata_i(wdata_i), + .output_io_error({xor_reduce_3_out_io,xor_reduce_2_out_io,xor_reduce_1_out_io}), + .trx_error({xor_reduce_3_trx,xor_reduce_2_trx, xor_reduce_1_trx}), .wbs_adr_i(wbs_adr_i), .valid_i(valid_i), .wbs_we_i(wbs_we_i), - .ready_o(ready_o), - .rdata_o(rdata_o) + .ready_o(ready_pmu), + .rdata_o(rdata_pmu) + ); + + PMU#( + .WORD_SIZE(WORD_SIZE), + .OUTPUTS(OUTPUTS), + .INPUTS(INPUTS), + .ADDRBASE (20'h3001_0) + ) + PMU_inst_2( + .clk(clk), + .rst(rst), + .wstrb_i(wstrb_i), + .output_io_error({xor_reduce_3_out_io,xor_reduce_2_out_io,xor_reduce_1_out_io}), + .trx_error({xor_reduce_3_trx,xor_reduce_2_trx, xor_reduce_1_trx}), + .wdata_i(wdata_i), + .wbs_adr_i(wbs_adr_i), + .valid_i(valid_i), + .wbs_we_i(wbs_we_i), + .ready_o(ready_pmu_backup), + .rdata_o(rdata_pmu_backup) ); endmodule
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v index 02a52cf..1702266 100644 --- a/verilog/rtl/user_proj_example.v +++ b/verilog/rtl/user_proj_example.v
@@ -114,22 +114,22 @@ // IO // IO MODE IO port connected to the 16 last - assign io_out = {io_port_out,1'bx,trx,20'b0}; - assign io_in = {io_port_in,rtx,1'bx,20'b0}; + assign io_out = {12'b0,io_port_out,1'bx,trx,8'b0}; + assign io_in = {12'b0,io_port_in,rtx,1'bx,8'b0}; assign io_oeb = {(`MPRJ_IO_PADS-1){1'b0}}; // IRQ - //assign irq = 3'b000; // Unused + assign irq = 3'b000; // Unused // LA assign la_data_out = {{(127-15){1'b0}}, la_out_value}; // Assuming LA probes [63:32] are for controlling the count register //assign la_write = ~la_oenb[63:32] & ~{WORD_SIZE{valid}}; // Assuming LA probes [65:64] are for controlling the count clk & reset - assign clk = wb_clk_i; - assign rst = wb_rst_i; - //assign clk = (~la_oenb[64]) ? la_data_in[64]: wb_clk_i; - //assign rst = (~la_oenb[65]) ? la_data_in[65]: wb_rst_i; + //assign clk = wb_clk_i; + //assign rst = wb_rst_i; + assign clk = (~la_oenb[64]) ? la_data_in[64]: wb_clk_i; + assign rst = (~la_oenb[65]) ? la_data_in[65]: wb_rst_i; main_module #( .WORD_SIZE (WORD_SIZE),