statistic updated
diff --git a/README.md b/README.md
index 5a02926..995e370 100644
--- a/README.md
+++ b/README.md
@@ -206,6 +206,15 @@
<tr align="center"> <td> usb1.1 </td> <td> usb_dp </td> <td> </td> <td> digital_io[36] </td></tr>
<tr align="center"> <td> usb1.1 </td> <td> usb_dn </td> <td> </td> <td> digital_io[37] </td></tr>
</table>
+
+
+# Riscduino documentation
+* Riscduino documentation available at : <https://riscduino.readthedocs.io/en/latest/>
+
+# Arduino ide integration
+* We are in initial phase of Riscduino board integration into arduino and integration details are available at : <https://github.com/dineshannayya/riscduino_board/>
+
+
# Sub IP features
## RISC V Core
@@ -342,18 +351,16 @@
# SOC Size
-| Block | Total Cell | Seq | Combo |
-| ------ | --------- | -------- | ----- |
-| RISC | 20982 | 3164 | 17818 |
-| PINMUX | 5693 | 1022 | 4671 |
-| SPI | 7120 | 1281 | 5839 |
-| UART_I2C_USB_SPI | 11196 | 2448 | 8748 |
-| WB_HOST | 2796 | 588 | 2208 |
-| WB_INTC | 1878 | 108 | 1770 |
-| SAR_ADC | 118 | 18 | 100 |
-| MBIST | 3125 | 543 | 2582 |
-| | | | |
-| TOTAL | 52908 | 9172 | 43736 |
+| Block | Total Cell | Combo | Seq |
+| ------ | --------- | ----- | -------- |
+| RISC | 52527 | 46858 | 5669 |
+| QSPI | 8654 | 7149 | 1505 |
+| UART_I2C_USB_SPI | 15926 | 13061 | 2865 |
+| WB_HOST | 5800 | 4701 | 1099 |
+| WB_INTC | 11477 | 10081 | 1396 |
+| PINMUX | 6746 | 5574 | 1172 |
+| | | | |
+| TOTAL | 120381 | 103826 | 16555 |
@@ -753,14 +760,9 @@
3. `Netgen` - Performs LVS Checks
4. `CVC` - Performs Circuit Validity Checks
-# Riscduino documentation
- Riscduino documentation available at <https://riscduino.readthedocs.io/en/latest/>
-
-# Arduino ide integration
- We are in initial phase of Riscduino board integration into arduino and integration details are available at <https://github.com/dineshannayya/riscduino_board/>
# News
-* **Riscduino Aim** - https://www.youtube.com/watch?v=lFVnicPhTI0
+* **Riscduino Aim** - <https://www.youtube.com/watch?v=lFVnicPhTI0>
# How To Contribute
diff --git a/sta/scripts/riscdunio.tcl b/sta/scripts/riscdunio.tcl
new file mode 100644
index 0000000..7fe97c6
--- /dev/null
+++ b/sta/scripts/riscdunio.tcl
@@ -0,0 +1,142 @@
+
+ set ::env(USER_ROOT) ".."
+ set ::env(CARAVEL_ROOT) "/home/dinesha/workarea/efabless/MPW-6/caravel"
+ set ::env(CARAVEL_PDK_ROOT) "/opt/pdk_mpw6"
+
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_sram_macros/lib/sky130_sram_1kbyte_1rw1r_32x256_8_TT_1p8V_25C.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hvl/lib/sky130_fd_sc_hvl__tt_025C_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_sc_hvl/lib/sky130_fd_sc_hvl__tt_025C_3v30_lv1v80.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_gpiov2_tt_tt_025C_1v80_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_hvc_wpad_tt_025C_1v80_3v30_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_tt_025C_1v80_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_tt_100C_1v80_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_lvc_wpad_tt_025C_1v80_3v30_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_tt_tt_025C_1v80_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_tt_tt_025C_1v80_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_tt_025C_1v80_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_tt_025C_1v80_3v30_3v30.lib
+ read_liberty $::env(CARAVEL_PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_tt_025C_1v80_3v30.lib
+
+ source scripts/statistic.tcl
+ set c_seq_cnt 0
+ set c_comb_cnt 0
+ set c_total_cnt 0
+
+ read_verilog $::env(USER_ROOT)/verilog/gl/qspim_top.v
+ link_design qspim_top
+ puts "IP :: Total Cell :: Total Combo :: Total Sequential"
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "qspim_top :: $tcell :: $tregs "
+ lassign [get_statistic qspim_top] a b c
+ set c_total_cnt [expr {$c_total_cnt + $a }]
+ set c_comb_cnt [expr {$c_comb_cnt + $b }]
+ set c_seq_cnt [expr {$c_seq_cnt + $c }]
+
+ #Variable for Risc Area
+ set r_seq_cnt 0
+ set r_comb_cnt 0
+ set r_total_cnt 0
+ read_verilog $::env(USER_ROOT)/verilog/gl/ycr2_iconnect.v
+ link_design ycr2_iconnect
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "ycr_iconnect :: $tcell :: $tregs "
+ lassign [get_statistic ycr2_iconnect] a b c
+ set c_total_cnt [expr {$c_total_cnt + $a }]
+ set c_comb_cnt [expr {$c_comb_cnt + $b }]
+ set c_seq_cnt [expr {$c_seq_cnt + $c }]
+ set r_total_cnt [expr {$r_total_cnt + $a }]
+ set r_comb_cnt [expr {$r_comb_cnt + $b }]
+ set r_seq_cnt [expr {$r_seq_cnt + $c }]
+
+ read_verilog $::env(USER_ROOT)/verilog/gl/ycr_intf.v
+ link_design ycr_intf
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "ycr_intf :: $tcell :: $tregs "
+ lassign [get_statistic ycr_intf] a b c
+ set c_total_cnt [expr {$c_total_cnt + $a }]
+ set c_comb_cnt [expr {$c_comb_cnt + $b }]
+ set c_seq_cnt [expr {$c_seq_cnt + $c }]
+
+ read_verilog $::env(USER_ROOT)/verilog/gl/ycr_core_top.v
+ link_design ycr_core_top
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "ycr_intf :: $tcell :: $tregs "
+ lassign [get_statistic ycr_core_top] a b c
+ #2 core in riscduino_dcore
+ set c_total_cnt [expr {$c_total_cnt + ($a *2) }]
+ set c_comb_cnt [expr {$c_comb_cnt + ($b *2) }]
+ set c_seq_cnt [expr {$c_seq_cnt + ($c *2) }]
+ set r_total_cnt [expr {$r_total_cnt + ($a *2) }]
+ set r_comb_cnt [expr {$r_comb_cnt + ($b *2) }]
+ set r_seq_cnt [expr {$r_seq_cnt + ($c *2) }]
+ puts "RISC :: $r_total_cnt :: $r_comb_cnt :: $r_seq_cnt"
+
+ read_verilog $::env(USER_ROOT)/verilog/gl/uart_i2c_usb_spi_top.v
+ link_design uart_i2c_usb_spi_top
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "ycr_intf :: $tcell :: $tregs "
+ lassign [get_statistic uart_i2c_usb_spi_top] a b c
+ set c_total_cnt [expr {$c_total_cnt + $a }]
+ set c_comb_cnt [expr {$c_comb_cnt + $b }]
+ set c_seq_cnt [expr {$c_seq_cnt + $c }]
+
+ read_verilog $::env(USER_ROOT)/verilog/gl/wb_host.v
+ link_design wb_host
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "ycr_intf :: $tcell :: $tregs "
+ lassign [get_statistic wb_host] a b c
+ set c_total_cnt [expr {$c_total_cnt + $a }]
+ set c_comb_cnt [expr {$c_comb_cnt + $b }]
+ set c_seq_cnt [expr {$c_seq_cnt + $c }]
+
+ read_verilog $::env(USER_ROOT)/verilog/gl/wb_interconnect.v
+ link_design wb_interconnect
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "ycr_intf :: $tcell :: $tregs "
+ lassign [get_statistic wb_interconnect] a b c
+ set c_total_cnt [expr {$c_total_cnt + $a }]
+ set c_comb_cnt [expr {$c_comb_cnt + $b }]
+ set c_seq_cnt [expr {$c_seq_cnt + $c }]
+
+ read_verilog $::env(USER_ROOT)/verilog/gl/pinmux.v
+ link_design pinmux
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "ycr_intf :: $tcell :: $tregs "
+ lassign [get_statistic pinmux] a b c
+ set c_total_cnt [expr {$c_total_cnt + $a }]
+ set c_comb_cnt [expr {$c_comb_cnt + $b }]
+ set c_seq_cnt [expr {$c_seq_cnt + $c }]
+
+ puts "digital_top :: $c_total_cnt :: $c_comb_cnt :: $c_seq_cnt"
+ # read_verilog $::env(USER_ROOT)/verilog/gl/user_project_wrapper.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/qspim.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/DFFRAM.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/pinmux.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/wb_interconnect.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/wb_host.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/uart_i2cm_usb_spi.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/qspim.v
+ # read_verilog $::env(USER_ROOT)/verilog/gl/yifive.v
+
+ #link_design user_project_wrapper
+ #set tcell [llength [get_cell -hier *]]
+ #set tregs [llength [all_registers]]
+ #puts "user_project_wrapper :: $tcell :: $tregs "
+
+
+
+
+
diff --git a/sta/scripts/statistic.tcl b/sta/scripts/statistic.tcl
new file mode 100644
index 0000000..343a4e1
--- /dev/null
+++ b/sta/scripts/statistic.tcl
@@ -0,0 +1,86 @@
+########################################
+# Get the Cell wise statistic
+#########################################
+
+proc get_statistic {design_name } {
+
+ #puts "Analysising the Statistic ..."
+
+ #To get all the lib cells and initialise the counter
+ array set libArray {}
+ set mylist [get_lib_cells *]
+ set lib_cnt 0
+ foreach elem $mylist {
+ #puts [get_full_name $elem]
+ #set libArray($lib_cnt,0) [get_full_name $elem]
+ set libArray($lib_cnt) 0
+ #puts "$libArray($lib_cnt)"
+ set lib_cnt [expr {$lib_cnt + 1}]
+ }
+
+
+ #################################################
+ # Accumlate the lib count
+ ################################################
+ set mylist1 [get_cells]
+ foreach elem1 $mylist1 {
+ set Inst [get_full_name $elem1]
+ #puts "Searching: ..:: $Inst .."
+ if ([string match "*ANTENNA*" $Inst]) {
+ continue
+ }
+ if ([string match "*FILLER*" $Inst]) {
+ continue
+ }
+ if ([string match "*TAP_*" $Inst]) {
+ continue
+ }
+ set lib [get_lib_cells -of_objects [get_cells $Inst]]
+ set lib_name [get_full_name $lib]
+ #puts "Searching: ..:: $lib_name .."
+
+ if ([string match "*decap*" $lib_name]) {
+ continue
+ }
+ set lib_cnt 0
+ set mylist2 [get_lib_cells *]
+ foreach elem2 $mylist2 {
+ set ref_lib_name [get_full_name $elem2]
+ if { [expr {$ref_lib_name eq $lib_name}] == 1 } {
+ set c_lib_cnt $libArray($lib_cnt)
+ set libArray($lib_cnt) [expr {$c_lib_cnt + 1}]
+ #puts "Lib Matched : $Inst: $lib_name :: $ref_lib_name :: cnt: $libArray($lib_cnt)"
+ break
+ }
+ set lib_cnt [expr {$lib_cnt + 1}]
+ }
+ }
+
+
+ ##################################################
+ ## lib count > 0
+ #################################################
+ set mylist [get_lib_cells *]
+ set lib_cnt 0
+ set seq_cnt 0
+ set comb_cnt 0
+ set total_cnt 0
+ foreach elem $mylist {
+ set ref_lib_name [get_full_name $elem]
+ if {$libArray($lib_cnt) > 0} {
+ #puts "Lib Name: $ref_lib_name :: Count: $libArray($lib_cnt)"
+ }
+ # Check cell is Sequential OR Combo
+ if ([string match "*__df*" $ref_lib_name]) {
+ set seq_cnt [expr {$seq_cnt + $libArray($lib_cnt) }]
+ } else {
+ set comb_cnt [expr {$comb_cnt + $libArray($lib_cnt) }]
+ }
+
+ set total_cnt [expr {$total_cnt + $libArray($lib_cnt) }]
+ set lib_cnt [expr {$lib_cnt + 1}]
+ }
+ puts "$design_name :: $total_cnt :: $comb_cnt :: $seq_cnt"
+ return "$total_cnt $comb_cnt $seq_cnt"
+}
+