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),