test bench clean-up
diff --git a/Makefile b/Makefile
index f898ec3..aac51a9 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,8 @@
CARAVEL_ROOT?=$(PWD)/caravel
PRECHECK_ROOT?=${HOME}/open_mpw_precheck
-SIM ?= RTL
+SIM?=RTL
+DUMP?=OFF
# Install lite version of caravel, (1): caravel-lite, (0): caravel
CARAVEL_LITE?=1
@@ -43,7 +44,7 @@
.PHONY: verify
verify:
cd ./verilog/dv/ && \
- export SIM=${SIM} && \
+ export SIM=${SIM} DUMP=${DUMP} && \
$(MAKE) -j$(THREADS)
# Install DV setup
@@ -55,7 +56,7 @@
DV_PATTERNS = $(foreach dv, $(PATTERNS), verify-$(dv))
TARGET_PATH=$(shell pwd)
PDK_PATH=${PDK_ROOT}/sky130A
-VERIFY_COMMAND="cd ${TARGET_PATH}/verilog/dv/$* && export SIM=${SIM} && make"
+VERIFY_COMMAND="cd ${TARGET_PATH}/verilog/dv/$* && export SIM=${SIM} DUMP=${DUMP} && make"
$(DV_PATTERNS): verify-% : ./verilog/dv/%
@if [ ! -d "$(PDK_ROOT)" ]; then \
docker run -v ${TARGET_PATH}:${TARGET_PATH} \
diff --git a/README.md b/README.md
index 1d4882e..aaa083d 100644
--- a/README.md
+++ b/README.md
@@ -314,105 +314,53 @@
# SOC Pin Mapping
-Carvel SOC provides 38 GPIO pins for user functionality. Riscduino SOC GPIO Pin Mapping as follows
+Carvel SOC provides 38 GPIO pins for user functionality. Riscduino SOC GPIO Pin Mapping as follows vs ATMEGA328 and Arudino
<table>
- <tr>
- <td align="center"> GPIO Pin Number</td>
- <td align="center"> Direction</td>
- <td align="center"> Pad Name</td>
- <td align="center"> Block Name</td>
- </tr>
- <tr>
- <td align="center"> gpio[7:0]</td>
- <td align="center"> Inout</td>
- <td align="center"> SDRAM Data [7:0]</td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[20:8]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM Address [12:0]</td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[22:21]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM Bank Select [1:0]</td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[23]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM Byte Mask</td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[24]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM Write Enable</td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[25]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM CAS </td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[26]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM RAS </td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[27]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM Chip Select </td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[28]</td>
- <td align="center"> Output</td>
- <td align="center"> SDRAM CKE </td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[29]</td>
- <td align="center"> Inout</td>
- <td align="center"> SDRAM Clock</td>
- <td align="center"> SDRAM</td>
- </tr>
- <tr>
- <td align="center"> gpio[30]</td>
- <td align="center"> Output</td>
- <td align="center"> SPI Clock</td>
- <td align="center"> SPI</td>
- </tr>
- <tr>
- <td align="center"> gpio[31]</td>
- <td align="center"> Output</td>
- <td align="center"> SPI Chip Select</td>
- <td align="center"> SPI</td>
- </tr>
- <tr>
- <td align="center"> gpio[35:32]</td>
- <td align="center"> Inout</td>
- <td align="center"> SPI Data</td>
- <td align="center"> SPI</td>
- </tr>
- <tr>
- <td align="center"> gpio[36]</td>
- <td align="center"> Inout</td>
- <td align="center"> Uart TX/I2C CLK</td>
- <td align="center"> UART/I2C</td>
- </tr>
- <tr>
- <td align="center"> gpio[37]</td>
- <td align="center"> Inout</td>
- <td align="center"> Uart RX/I2C Data</td>
- <td align="center"> UART/I2C</td>
- </tr>
+ <tr align="center"> <td> ATMGA328 Pin No</td> <td> Functionality </td> <td> Arudino Pin Name</td> <td> Carvel Pin Mapping </td></tr>
+ <tr align="center"> <td> Pin-1 </td> <td> PC6/RESET </td> <td> </td> <td> digital_io[0] </td></tr>
+ <tr align="center"> <td> Pin-2 </td> <td> PD0/RXD </td> <td> D0 </td> <td> digital_io[1] </td></tr>
+ <tr align="center"> <td> Pin-3 </td> <td> PD1/TXD </td> <td> D1 </td> <td> digital_io[2] </td></tr>
+ <tr align="center"> <td> Pin-4 </td> <td> PD2/INT0 </td> <td> D2 </td> <td> digital_io[3] </td></tr>
+ <tr align="center"> <td> Pin-5 </td> <td> PD3/INT1/OC2B(PWM0) </td> <td> D3 </td> <td> digital_io[4] </td></tr>
+ <tr align="center"> <td> Pin-6 </td> <td> PD4 </td> <td> D4 </td> <td> digital_io[5] </td></tr>
+ <tr align="center"> <td> Pin-7 </td> <td> VCC </td> <td> </td> <td> - </td></tr>
+ <tr align="center"> <td> Pin-8 </td> <td> GND </td> <td> </td> <td> - </td></tr>
+ <tr align="center"> <td> Pin-9 </td> <td> PB6/XTAL1/TOSC1 </td> <td> </td> <td> digital_io[6] </td></tr>
+ <tr align="center"> <td> Pin-10 </td> <td> PB7/XTAL2/TOSC2 </td> <td> </td> <td> digital_io[7] </td></tr>
+ <tr align="center"> <td> Pin-11 </td> <td> PD5/OC0B(PWM1)/T1 </td> <td> D5 </td> <td> digital_io[8] </td></tr>
+ <tr align="center"> <td> Pin-12 </td> <td> PD6/OC0A(PWM2)/AIN0 </td> <td> D6 </td> <td> digital_io[9] /analog_io[2] </td></tr>
+ <tr align="center"> <td> Pin-13 </td> <td> PD7/A1N1 </td> <td> D7 </td> <td> digital_io[10]/analog_io[3] </td></tr>
+ <tr align="center"> <td> Pin-14 </td> <td> PB0/CLKO/ICP1 </td> <td> D8 </td> <td> digital_io[11] </td></tr>
+ <tr align="center"> <td> Pin-15 </td> <td> PB1/OC1A(PWM3) </td> <td> D9 </td> <td> digital_io[12] </td></tr>
+ <tr align="center"> <td> Pin-16 </td> <td> PB2/SS/OC1B(PWM4) </td> <td> D10 </td> <td> digital_io[13] </td></tr>
+ <tr align="center"> <td> Pin-17 </td> <td> PB3/MOSI/OC2A(PWM5) </td> <td> D11 </td> <td> digital_io[14] </td></tr>
+ <tr align="center"> <td> Pin-18 </td> <td> PB4/MISO </td> <td> D12 </td> <td> digital_io[15] </td></tr>
+ <tr align="center"> <td> Pin-19 </td> <td> PB5/SCK </td> <td> D13 </td> <td> digital_io[16] </td></tr>
+ <tr align="center"> <td> Pin-20 </td> <td> AVCC </td> <td> </td> <td> - </td></tr>
+ <tr align="center"> <td> Pin-21 </td> <td> AREF </td> <td> </td> <td> analog_io[10] </td></tr>
+ <tr align="center"> <td> Pin-22 </td> <td> GND </td> <td> </td> <td> - </td></tr>
+ <tr align="center"> <td> Pin-23 </td> <td> PC0/ADC0 </td> <td> A0 </td> <td> digital_io[18]/analog_io[11] </td></tr>
+ <tr align="center"> <td> Pin-24 </td> <td> PC1/ADC1 </td> <td> A1 </td> <td> digital_io[19]/analog_io[12] </td></tr>
+ <tr align="center"> <td> Pin-25 </td> <td> PC2/ADC2 </td> <td> A2 </td> <td> digital_io[20]/analog_io[13] </td></tr>
+ <tr align="center"> <td> Pin-26 </td> <td> PC3/ADC3 </td> <td> A3 </td> <td> digital_io[21]/analog_io[14] </td></tr>
+ <tr align="center"> <td> Pin-27 </td> <td> PC4/ADC4/SDA </td> <td> A4 </td> <td> digital_io[22]/analog_io[15] </td></tr>
+ <tr align="center"> <td> Pin-28 </td> <td> PC5/ADC5/SCL </td> <td> A5 </td> <td> digital_io[23]/analog_io[16] </td></tr>
+ <tr align="center"> <td colspan="4"> Additional Pad used for Externam ROM/RAM/USB </td></tr>
+ <tr align="center"> <td> Sflash </td> <td> sflash_sck </td> <td> </td> <td> digital_io[24] </td></tr>
+ <tr align="center"> <td> SFlash </td> <td> sflash_ss </td> <td> </td> <td> digital_io[25] </td></tr>
+ <tr align="center"> <td> SFlash </td> <td> sflash_io0 </td> <td> </td> <td> digital_io[26] </td></tr>
+ <tr align="center"> <td> SFlash </td> <td> sflash_io1 </td> <td> </td> <td> digital_io[27] </td></tr>
+ <tr align="center"> <td> SFlash </td> <td> sflash_io2 </td> <td> </td> <td> digital_io[28] </td></tr>
+ <tr align="center"> <td> SFlash </td> <td> sflash_io3 </td> <td> </td> <td> digital_io[29] </td></tr>
+ <tr align="center"> <td> SSRAM </td> <td> ssram_sck </td> <td> </td> <td> digital_io[30] </td></tr>
+ <tr align="center"> <td> SSRAM </td> <td> ssram_ss </td> <td> </td> <td> digital_io[31] </td></tr>
+ <tr align="center"> <td> SSRAM </td> <td> ssram_io0 </td> <td> </td> <td> digital_io[32] </td></tr>
+ <tr align="center"> <td> SSRAM </td> <td> ssram_io1 </td> <td> </td> <td> digital_io[33] </td></tr>
+ <tr align="center"> <td> SSRAM </td> <td> ssram_io2 </td> <td> </td> <td> digital_io[34] </td></tr>
+ <tr align="center"> <td> SSRAM </td> <td> ssram_io3 </td> <td> </td> <td> digital_io[35] </td></tr>
+ <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>
@@ -464,15 +412,45 @@
# Prerequisites
- Docker (ensure docker daemon is running) -- tested with version 19.03.12, but any recent version should suffice.
+## Step-1: Docker in ubuntu 20.04 version
+```bash
+ sudo apt update
+ sudo apt-get install apt-transport-https curl rtificates -agent software-properties-common
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
+ sudo apt update
+ apt-cache policy docker-ce
+ sudo apt install docker-ce
-## Environment setting
+ #Add User Name to docker
+ sudo usermod -aG docker <your user name>
+ # Reboot the system to enable the docker setup
+```
+## Step-2: Update the Submodule, To to project area
+```bash
+ git submodule init
+ git submodule update
+```
+## Step-3: clone Openlane scripts under workarea
+```bash
+ git clone https://github.com/dineshannayya/OpenLane.git
+```
+## Step-4: Environment setting
- Note: PDK alreay installed inside the docker, no need to define the PDK_ROOT, This will be point to /opt/pdk path inside the docker
- if user define the PDK_ROOT path, then flow will use the user defined PDK PATH
+ if user define the PDK_ROOT path, then flow will use the user defined PDK PATH. Set these enviornmental variable in .bashrc file
```bash
export CARAVEL_ROOT=<Carvel Installed Path>
export OPENLANE_ROOT=<OpenLane Installed Path>
export IMAGE_NAME=dineshannayya/openlane:rc7
+ export PDK_ROOT=<PDK Installed PATH>
+ export PDK_PATH=<PDK Install Path>/sky130A
+```
+## Step-5: To install the PDK
+```bash
+ source ~/.bashrc
+ cd OpenLane
+ make pdk
```
# Tests preparation
@@ -494,6 +472,8 @@
make verify-user_spi
make verify-user_i2cm
make verify-user_risc_boot
+ make verify-wb_port SIM=RTL DUMP=OFF
+ make verify-wb_port SIM=RTL DUMP=ON
```
# Tool Sets
diff --git a/openlane/uart_i2cm_usb/base.sdc b/openlane/uart_i2cm_usb/base.sdc
index e5db97c..3d3a783 100644
--- a/openlane/uart_i2cm_usb/base.sdc
+++ b/openlane/uart_i2cm_usb/base.sdc
@@ -50,7 +50,6 @@
set_input_delay 2.0 -clock [get_clocks $::env(CORE_CLOCK_NAME)] {uart_rstn}
set_input_delay 2.0 -clock [get_clocks $::env(CORE_CLOCK_NAME)] {i2c_rstn}
set_input_delay 2.0 -clock [get_clocks $::env(CORE_CLOCK_NAME)] {usb_rstn}
-set_input_delay 2.0 -clock [get_clocks $::env(CORE_CLOCK_NAME)] {uart_i2c_usb_sel*}
set_input_delay $core_input_delay_value -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_cs*]
set_input_delay $core_input_delay_value -clock [get_clocks $::env(CORE_CLOCK_NAME)] [get_port reg_addr*]
diff --git a/openlane/uart_i2cm_usb/pin_order.cfg b/openlane/uart_i2cm_usb/pin_order.cfg
index 36b397b..cd4e00c 100644
--- a/openlane/uart_i2cm_usb/pin_order.cfg
+++ b/openlane/uart_i2cm_usb/pin_order.cfg
@@ -7,6 +7,10 @@
reg_cs
reg_wr
+reg_addr\[7\]
+reg_addr\[6\]
+reg_addr\[5\]
+reg_addr\[4\]
reg_addr\[3\]
reg_addr\[2\]
reg_addr\[1\]
@@ -83,8 +87,6 @@
uart_rstn
i2c_rstn
usb_rstn
-uart_i2c_usb_sel\[1\]
-uart_i2c_usb_sel\[0\]
scl_pad_i
scl_pad_o
scl_pad_oen_o
diff --git a/run_regress b/run_regress
new file mode 100644
index 0000000..a18199a
--- /dev/null
+++ b/run_regress
@@ -0,0 +1,6 @@
+make verify-wb_port
+make verify-user_spi
+make verify-user_i2cm
+make verify-user_uart
+make verify-user_risc_boot
+make verify-risc_boot
diff --git a/signoff/spi_master/OPENLANE_VERSION b/signoff/spi_master/OPENLANE_VERSION
index ad796aa..bab6e84 100644
--- a/signoff/spi_master/OPENLANE_VERSION
+++ b/signoff/spi_master/OPENLANE_VERSION
@@ -1 +1 @@
-openlane v0.21-6-gbc3b032
+openlane v0.21-9-g94fe743
diff --git a/signoff/spi_master/final_summary_report.csv b/signoff/spi_master/final_summary_report.csv
index 1c8a281..1349a9e 100644
--- a/signoff/spi_master/final_summary_report.csv
+++ b/signoff/spi_master/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/spi_master,spim_top,spi_master,Flow_completed,0h29m40s,0h16m11s,58500.0,0.26,29250.0,47,675.88,7605,0,0,0,0,0,0,0,0,1,-1,0,389393,66138,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,305945143,0.0,32.37,39.92,0.14,-1,-1,7541,7681,1272,1412,0,0,0,7605,245,0,169,100,1051,209,33,2443,1353,1292,24,460,3132,0,3592,100.0,10.0,10,AREA 0,4,50,1,100,100,0.45,0,sky130_fd_sc_hd,4,5
+0,/project/openlane/spi_master,spim_top,spi_master,Flow_completed,0h15m27s,0h6m28s,49784.61538461538,0.26,24892.30769230769,40,642.45,6472,0,0,0,0,0,0,0,0,2,-1,0,302442,55080,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,228497488,0.0,25.86,30.21,0.29,-1,-1,6415,6548,1120,1253,0,0,0,6472,243,0,125,93,756,212,32,1957,1213,1151,25,460,3132,0,3592,100.0,10.0,10,AREA 0,4,50,1,100,100,0.45,0,sky130_fd_sc_hd,4,5
diff --git a/signoff/uart_i2cm_usb/OPENLANE_VERSION b/signoff/uart_i2cm_usb/OPENLANE_VERSION
index ad796aa..bab6e84 100644
--- a/signoff/uart_i2cm_usb/OPENLANE_VERSION
+++ b/signoff/uart_i2cm_usb/OPENLANE_VERSION
@@ -1 +1 @@
-openlane v0.21-6-gbc3b032
+openlane v0.21-9-g94fe743
diff --git a/signoff/uart_i2cm_usb/final_summary_report.csv b/signoff/uart_i2cm_usb/final_summary_report.csv
index 4829488..ea00f72 100644
--- a/signoff/uart_i2cm_usb/final_summary_report.csv
+++ b/signoff/uart_i2cm_usb/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/uart_i2cm_usb,uart_i2c_usb_top,uart_i2cm_usb,Flow_completed,0h42m9s,0h23m0s,59219.047619047626,0.42,29609.523809523813,45,765.19,12436,0,0,0,0,0,0,0,0,0,-1,0,538778,100542,-2.99,-2.99,-2.96,-2.96,-3.03,-2.99,-2.99,-2.96,-2.96,-3.03,402935829,0.0,31.48,31.11,0.41,-1,-1,12415,12484,2256,2325,0,0,0,12436,363,10,209,250,2102,323,80,2681,2216,2171,28,498,5146,0,5644,76.74597083653109,13.03,10,AREA 0,4,50,1,100,100,0.45,0,sky130_fd_sc_hd,4,5
+0,/project/openlane/uart_i2cm_usb,uart_i2c_usb_top,uart_i2cm_usb,Flow_completed,0h27m5s,0h11m4s,59157.14285714286,0.42,29578.57142857143,45,751.94,12423,0,0,0,0,0,0,0,0,0,-1,0,522443,99881,-3.16,-3.16,-3.07,-3.07,-3.11,-91.08,-91.08,-91.67,-91.67,-91.56,390283627,0.0,31.24,29.46,0.31,-1,-1,12407,12476,2262,2331,0,0,0,12423,364,10,202,244,2118,325,79,2692,2224,2170,26,498,5146,0,5644,76.27765064836004,13.11,10,AREA 0,4,50,1,100,100,0.45,0,sky130_fd_sc_hd,4,5
diff --git a/signoff/user_project_wrapper/final_summary_report.csv b/signoff/user_project_wrapper/final_summary_report.csv
index ef20129..bc98a12 100644
--- a/signoff/user_project_wrapper/final_summary_report.csv
+++ b/signoff/user_project_wrapper/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/user_project_wrapper,user_project_wrapper,user_project_wrapper,Flow_completed,0h46m33s,0h5m18s,3.3079078455790785,10.2784,1.6539539227895392,0,531.62,17,0,0,0,0,0,0,0,0,1,-1,-1,1233053,4238,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1,0.0,1.29,4.44,0.96,2.45,-1,902,1520,902,1520,0,0,0,17,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,100.0,10.0,10,AREA 0,5,50,1,80,80,0.55,0,sky130_fd_sc_hd,4,0
+0,/project/openlane/user_project_wrapper,user_project_wrapper,user_project_wrapper,Flow_completed,0h45m28s,0h6m19s,1.5566625155666252,10.2784,0.7783312577833126,0,530.74,8,0,0,0,0,0,0,0,0,3,-1,-1,1147543,4266,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1,0.0,1.2,4.73,0.78,1.3,-1,870,1488,867,1485,0,0,0,8,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,100.0,10.0,10,AREA 0,5,50,1,120,120,0.55,0,sky130_fd_sc_hd,4,0
diff --git a/signoff/wb_interconnect/final_summary_report.csv b/signoff/wb_interconnect/final_summary_report.csv
index d183141..897ae64 100644
--- a/signoff/wb_interconnect/final_summary_report.csv
+++ b/signoff/wb_interconnect/final_summary_report.csv
@@ -1,2 +1,2 @@
,design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Peak_Memory_Usage_MB,cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,EndCaps,TapCells,Diodes,Total_Physical_Cells,suggested_clock_frequency,suggested_clock_period,CLOCK_PERIOD,SYNTH_STRATEGY,SYNTH_MAX_FANOUT,FP_CORE_UTIL,FP_ASPECT_RATIO,FP_PDN_VPITCH,FP_PDN_HPITCH,PL_TARGET_DENSITY,GLB_RT_ADJUSTMENT,STD_CELL_LIBRARY,CELL_PAD,DIODE_INSERTION_STRATEGY
-0,/project/openlane/wb_interconnect,wb_interconnect,wb_interconnect,Flow_completed,0h24m29s,0h4m56s,8169.69696969697,0.33,4084.848484848485,7,559.88,1348,0,0,0,0,0,0,0,0,0,-1,0,417538,17849,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,375201274,0.0,39.41,7.47,21.49,-1,-1,1074,1695,202,823,0,0,0,1348,240,0,73,15,135,0,0,176,447,428,11,94,3794,0,3888,100.0,10.0,10,AREA 0,4,50,1,180,180,0.5,0,sky130_fd_sc_hd,4,5
+0,/project/openlane/wb_interconnect,wb_interconnect,wb_interconnect,Flow_completed,0h28m1s,0h5m22s,8218.181818181818,0.33,4109.090909090909,7,563.42,1356,0,0,0,0,0,0,0,0,0,-1,0,423449,18327,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,378093628,0.0,39.98,7.52,21.72,-1,-1,1079,1703,202,826,0,0,0,1356,240,0,73,15,135,0,0,176,447,431,11,94,3794,0,3888,100.0,10.0,10,AREA 0,4,50,1,180,180,0.5,0,sky130_fd_sc_hd,4,5
diff --git a/verilog/dv/risc_boot/Makefile b/verilog/dv/risc_boot/Makefile
index dcb19ed..bd7c2e7 100644
--- a/verilog/dv/risc_boot/Makefile
+++ b/verilog/dv/risc_boot/Makefile
@@ -63,6 +63,7 @@
${GCC64_PREFIX}-objdump -D user_uart.elf > user_uart.dump
rm crt_tcm.o user_uart.o
ifeq ($(SIM),RTL)
+ ifeq ($(DUMP),OFF)
iverilog -g2012 -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
@@ -70,6 +71,15 @@
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
-I $(UPRJ_INCLUDE_PATH4) \
$< -o $@
+ else
+ iverilog -g2012 -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+ -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_AGENTS) \
+ -I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
+ -I $(UPRJ_INCLUDE_PATH4) \
+ $< -o $@
+ endif
else
iverilog -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
diff --git a/verilog/dv/risc_boot/risc_boot.c b/verilog/dv/risc_boot/risc_boot.c
index e5253b2..3921642 100644
--- a/verilog/dv/risc_boot/risc_boot.c
+++ b/verilog/dv/risc_boot/risc_boot.c
@@ -23,22 +23,22 @@
#define reg_mprj_wbhost_reg0 (*(volatile uint32_t*)0x30800000)
-#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30000000)
-#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30000004)
-#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30000008)
-#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3000000C)
-#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30000010)
-#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30000014)
-#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30000018)
-#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3000001C)
-#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30000020)
-#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30000024)
-#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30000028)
-#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3000002C)
-#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30000030)
-#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30000034)
-#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30000038)
-#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3000003C)
+#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30030000)
+#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30030004)
+#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30030008)
+#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3003000C)
+#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30030010)
+#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30030014)
+#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30030018)
+#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3003001C)
+#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30030020)
+#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30030024)
+#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30030028)
+#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3003002C)
+#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30030030)
+#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30030034)
+#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30030038)
+#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3003003C)
#define reg_mprj_uart_reg0 (*(volatile uint32_t*)0x30010000)
#define reg_mprj_uart_reg1 (*(volatile uint32_t*)0x30010004)
@@ -172,16 +172,13 @@
// Remove Wishbone Reset
reg_mprj_wbhost_reg0 = 0x1;
- // SDRAM Config-2
- reg_mprj_globl_reg5 = 0x100019E;
-
-
- // SDRAM Config-1
- reg_mprj_globl_reg4 = 0x2F172242;
// Remove All Reset
reg_mprj_wbhost_reg0 = 0x1F;
+ // Enable UART Multi Functional Ports
+
+ reg_mprj_globl_reg14 = 0x100;
// configure the user uart
reg_mprj_uart_reg0 = 0x7;
diff --git a/verilog/dv/risc_boot/risc_boot_tb.v b/verilog/dv/risc_boot/risc_boot_tb.v
index fca35ca..0d59657 100644
--- a/verilog/dv/risc_boot/risc_boot_tb.v
+++ b/verilog/dv/risc_boot/risc_boot_tb.v
@@ -297,12 +297,12 @@
// Connect Quad Flash to for usr Risc Core
//-----------------------------------------
- wire user_flash_clk = mprj_io[30];
- wire user_flash_csb = mprj_io[31];
- //tri user_flash_io0 = mprj_io[33];
- //tri user_flash_io1 = mprj_io[34];
- //tri user_flash_io2 = mprj_io[35];
- //tri user_flash_io3 = mprj_io[36];
+ wire user_flash_clk = mprj_io[24];
+ wire user_flash_csb = mprj_io[25];
+ //tri user_flash_io0 = mprj_io[26];
+ //tri user_flash_io1 = mprj_io[27];
+ //tri user_flash_io2 = mprj_io[28];
+ //tri user_flash_io3 = mprj_io[29];
// Quard flash
@@ -311,68 +311,24 @@
.TimingModel("S25FL512SAGMFI010_F_30pF"))
u_spi_flash_256mb (
// Data Inputs/Outputs
- .SI (mprj_io[32]),
- .SO (mprj_io[33]),
+ .SI (mprj_io[26]),
+ .SO (mprj_io[27]),
// Controls
.SCK (user_flash_clk),
.CSNeg (user_flash_csb),
- .WPNeg (mprj_io[34]),
- .HOLDNeg (mprj_io[35]),
+ .WPNeg (mprj_io[28]),
+ .HOLDNeg (mprj_io[29]),
.RSTNeg (RSTB)
);
-//------------------------------------------------
-// Integrate the SDRAM 8 BIT Memory
-// -----------------------------------------------
-
-tri [7:0] Dq ; // SDRAM Read/Write Data Bus
-wire [0:0] sdr_dqm ; // SDRAM DATA Mask
-wire [1:0] sdr_ba ; // SDRAM Bank Select
-wire [12:0] sdr_addr ; // SDRAM ADRESS
-wire sdr_cs_n ; // chip select
-wire sdr_cke ; // clock gate
-wire sdr_ras_n ; // ras
-wire sdr_cas_n ; // cas
-wire sdr_we_n ; // write enable
-wire sdram_clk ;
-
-//assign Dq[7:0] = mprj_io [7:0];
-assign sdr_addr[12:0] = mprj_io [20:8] ;
-assign sdr_ba[1:0] = mprj_io [22:21] ;
-assign sdr_dqm[0] = mprj_io [23] ;
-assign sdr_we_n = mprj_io [24] ;
-assign sdr_cas_n = mprj_io [25] ;
-assign sdr_ras_n = mprj_io [26] ;
-assign sdr_cs_n = mprj_io [27] ;
-assign sdr_cke = mprj_io [28] ;
-assign sdram_clk = mprj_io [29] ;
-
-// to fix the sdram interface timing issue
-wire #(2.0) sdram_clk_d = sdram_clk;
-
- // SDRAM 8bit
-mt48lc8m8a2 #(.data_bits(8)) u_sdram8 (
- .Dq (mprj_io [7:0] ) ,
- .Addr (sdr_addr[11:0] ),
- .Ba (sdr_ba ),
- .Clk (sdram_clk_d ),
- .Cke (sdr_cke ),
- .Cs_n (sdr_cs_n ),
- .Ras_n (sdr_ras_n ),
- .Cas_n (sdr_cas_n ),
- .We_n (sdr_we_n ),
- .Dqm (sdr_dqm )
- );
-
-
//---------------------------
// UART Agent integration
// --------------------------
wire uart_txd,uart_rxd;
-assign uart_txd = mprj_io[37];
-assign mprj_io[36] = uart_rxd ;
+assign uart_txd = mprj_io[2];
+assign mprj_io[1] = uart_rxd ;
uart_agent tb_uart(
.mclk (clock ),
diff --git a/verilog/dv/risc_boot/user_uart.c b/verilog/dv/risc_boot/user_uart.c
index b60311c..29805f7 100644
--- a/verilog/dv/risc_boot/user_uart.c
+++ b/verilog/dv/risc_boot/user_uart.c
@@ -35,15 +35,15 @@
#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30000038)
#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3000003C)
-#define reg_mprj_uart_reg0 (*(volatile uint32_t*)0x30010000)
-#define reg_mprj_uart_reg1 (*(volatile uint32_t*)0x30010004)
-#define reg_mprj_uart_reg2 (*(volatile uint32_t*)0x30010008)
-#define reg_mprj_uart_reg3 (*(volatile uint32_t*)0x3001000C)
-#define reg_mprj_uart_reg4 (*(volatile uint32_t*)0x30010010)
-#define reg_mprj_uart_reg5 (*(volatile uint32_t*)0x30010014)
-#define reg_mprj_uart_reg6 (*(volatile uint32_t*)0x30010018)
-#define reg_mprj_uart_reg7 (*(volatile uint32_t*)0x3001001C)
-#define reg_mprj_uart_reg8 (*(volatile uint32_t*)0x30010020)
+#define reg_mprj_uart_reg0 (*(volatile uint32_t*)0x10010000)
+#define reg_mprj_uart_reg1 (*(volatile uint32_t*)0x10010004)
+#define reg_mprj_uart_reg2 (*(volatile uint32_t*)0x10010008)
+#define reg_mprj_uart_reg3 (*(volatile uint32_t*)0x1001000C)
+#define reg_mprj_uart_reg4 (*(volatile uint32_t*)0x10010010)
+#define reg_mprj_uart_reg5 (*(volatile uint32_t*)0x10010014)
+#define reg_mprj_uart_reg6 (*(volatile uint32_t*)0x10010018)
+#define reg_mprj_uart_reg7 (*(volatile uint32_t*)0x1001001C)
+#define reg_mprj_uart_reg8 (*(volatile uint32_t*)0x10010020)
int main()
{
diff --git a/verilog/dv/user_i2cm/Makefile b/verilog/dv/user_i2cm/Makefile
index 089a877..c1654ac 100644
--- a/verilog/dv/user_i2cm/Makefile
+++ b/verilog/dv/user_i2cm/Makefile
@@ -64,6 +64,7 @@
${GCC64_PREFIX}-objdump -D user_uart.elf > user_uart.dump
rm crt_tcm.o user_uart.o
ifeq ($(SIM),RTL)
+ ifeq ($(DUMP),OFF)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
@@ -71,6 +72,15 @@
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
-I $(UPRJ_INCLUDE_PATH4) \
$< -o $@
+ else
+ iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+ -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_AGENTS) \
+ -I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
+ -I $(UPRJ_INCLUDE_PATH4) \
+ $< -o $@
+ endif
else
iverilog -g2005-sv -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
diff --git a/verilog/dv/user_i2cm/uprj_netlists.v b/verilog/dv/user_i2cm/uprj_netlists.v
index 647e7c5..0c7d867 100644
--- a/verilog/dv/user_i2cm/uprj_netlists.v
+++ b/verilog/dv/user_i2cm/uprj_netlists.v
@@ -28,7 +28,7 @@
`include "glbl_cfg.v"
`include "sdram.v"
`include "spi_master.v"
- `include "uart_i2cm.v"
+ `include "uart_i2cm_usb.v"
`include "wb_interconnect.v"
`include "user_project_wrapper.v"
`include "syntacore.v"
@@ -42,6 +42,19 @@
`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
`include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+ `include"sar_adc/SAR.sv"
+ `include"sar_adc/ACMP.sv"
+ `include"sar_adc/sar_adc.sv"
+ `include"sar_adc/adc_reg.sv"
+ `include"sar_adc/DAC_8BIT.v"
+
+ `include "sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v"
+ `include "pinmux/src/pinmux.sv"
+ `include "pinmux/src/pinmux_reg.sv"
+ `include "pinmux/src/gpio_intr.sv"
+ `include "pinmux/src/pwm.sv"
+ `include "lib/pulse_gen_type1.sv"
+ `include "lib/pulse_gen_type2.sv"
`include "spi_master/src/spim_top.sv"
`include "spi_master/src/spim_if.sv"
@@ -76,18 +89,9 @@
`include "uart_i2c_usb/src/uart_i2c_usb.sv"
- `include "sdram_ctrl/src/top/sdrc_top.v"
- `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v"
- `include "lib/async_fifo.sv"
- `include "sdram_ctrl/src/core/sdrc_core.v"
- `include "sdram_ctrl/src/core/sdrc_bank_ctl.v"
- `include "sdram_ctrl/src/core/sdrc_bank_fsm.v"
- `include "sdram_ctrl/src/core/sdrc_bs_convert.v"
- `include "sdram_ctrl/src/core/sdrc_req_gen.v"
- `include "sdram_ctrl/src/core/sdrc_xfr_ctl.v"
-
`include "lib/registers.v"
`include "lib/clk_ctl.v"
+ `include "lib/async_fifo.sv"
`include "digital_core/src/glbl_cfg.sv"
`include "wb_host/src/wb_host.sv"
@@ -122,6 +126,7 @@
`include "syntacore/scr1/src/core/scr1_dmi.sv"
`include "syntacore/scr1/src/core/scr1_scu.sv"
+ `include "syntacore/scr1/src/top/scr1_imem_router.sv"
`include "syntacore/scr1/src/top/scr1_dmem_router.sv"
`include "syntacore/scr1/src/top/scr1_dp_memory.sv"
`include "syntacore/scr1/src/top/scr1_tcm.sv"
diff --git a/verilog/dv/user_i2cm/user_i2cm_tb.v b/verilog/dv/user_i2cm/user_i2cm_tb.v
index 650c9de..825dfc2 100644
--- a/verilog/dv/user_i2cm/user_i2cm_tb.v
+++ b/verilog/dv/user_i2cm/user_i2cm_tb.v
@@ -72,7 +72,7 @@
`define ADDR_SPACE_UART 32'h3001_0000
-`define ADDR_SPACE_I2CM 32'h3001_0000
+`define ADDR_SPACE_I2CM 32'h3001_0040
module tb_top;
@@ -152,6 +152,9 @@
// Enable I2M Block & WB Reset and Enable I2CM Mux Select
wb_user_core_write('h3080_0000,'hA1);
+ // Enable I2C Multi Functional Ports
+ wb_user_core_write('h3003_0038,'h200);
+
repeat (100) @(posedge clock);
@(posedge clock);
@@ -460,22 +463,22 @@
// user core using the gpio pads
// ----------------------------------------------------
- wire flash_clk = io_out[30];
- wire flash_csb = io_out[31];
+ wire flash_clk = io_out[24];
+ wire flash_csb = io_out[25];
// Creating Pad Delay
- wire #1 io_oeb_32 = io_oeb[32];
- wire #1 io_oeb_33 = io_oeb[33];
- wire #1 io_oeb_34 = io_oeb[34];
- wire #1 io_oeb_35 = io_oeb[35];
- tri flash_io0 = (io_oeb_32== 1'b0) ? io_out[32] : 1'bz;
- tri flash_io1 = (io_oeb_33== 1'b0) ? io_out[33] : 1'bz;
- tri flash_io2 = (io_oeb_34== 1'b0) ? io_out[34] : 1'bz;
- tri flash_io3 = (io_oeb_35== 1'b0) ? io_out[35] : 1'bz;
+ wire #1 io_oeb_26 = io_oeb[26];
+ wire #1 io_oeb_27 = io_oeb[27];
+ wire #1 io_oeb_28 = io_oeb[28];
+ wire #1 io_oeb_29 = io_oeb[29];
+ tri flash_io0 = (io_oeb_26== 1'b0) ? io_out[26] : 1'bz;
+ tri flash_io1 = (io_oeb_27== 1'b0) ? io_out[27] : 1'bz;
+ tri flash_io2 = (io_oeb_28== 1'b0) ? io_out[28] : 1'bz;
+ tri flash_io3 = (io_oeb_29== 1'b0) ? io_out[29] : 1'bz;
- assign io_in[32] = flash_io0;
- assign io_in[33] = flash_io1;
- assign io_in[34] = flash_io2;
- assign io_in[35] = flash_io3;
+ assign io_in[26] = flash_io0;
+ assign io_in[27] = flash_io1;
+ assign io_in[28] = flash_io2;
+ assign io_in[29] = flash_io3;
// Quard flash
@@ -498,61 +501,15 @@
-//------------------------------------------------
-// Integrate the SDRAM 8 BIT Memory
-// -----------------------------------------------
-
-wire [7:0] Dq ; // SDRAM Read/Write Data Bus
-wire [0:0] sdr_dqm ; // SDRAM DATA Mask
-wire [1:0] sdr_ba ; // SDRAM Bank Select
-wire [12:0] sdr_addr ; // SDRAM ADRESS
-wire sdr_cs_n ; // chip select
-wire sdr_cke ; // clock gate
-wire sdr_ras_n ; // ras
-wire sdr_cas_n ; // cas
-wire sdr_we_n ; // write enable
-wire sdram_clk ;
-
-assign Dq[7:0] = (io_oeb[7:0] == 8'h0) ? io_out [7:0] : 8'hZZ;
-assign sdr_addr[12:0] = io_out [20:8] ;
-assign sdr_ba[1:0] = io_out [22:21] ;
-assign sdr_dqm[0] = io_out [23] ;
-assign sdr_we_n = io_out [24] ;
-assign sdr_cas_n = io_out [25] ;
-assign sdr_ras_n = io_out [26] ;
-assign sdr_cs_n = io_out [27] ;
-assign sdr_cke = io_out [28] ;
-assign sdram_clk = io_out [29] ;
-assign io_in[29] = sdram_clk;
-assign #(1) io_in[7:0] = Dq;
-
-// to fix the sdram interface timing issue
-wire #(1) sdram_clk_d = sdram_clk;
-
- // SDRAM 8bit
-mt48lc8m8a2 #(.data_bits(8)) u_sdram8 (
- .Dq (Dq ) ,
- .Addr (sdr_addr[11:0] ),
- .Ba (sdr_ba ),
- .Clk (sdram_clk_d ),
- .Cke (sdr_cke ),
- .Cs_n (sdr_cs_n ),
- .Ras_n (sdr_ras_n ),
- .Cas_n (sdr_cas_n ),
- .We_n (sdr_we_n ),
- .Dqm (sdr_dqm )
- );
-
-
//---------------------------
-// UART Agent integration
+// I2C
// --------------------------
tri scl,sda;
-assign scl = (io_oeb[36] == 1'b0) ? io_out[36]: 1'bz;
-assign sda = (io_oeb[37] == 1'b0) ? io_out[37] : 1'bz;
-assign io_in[37] = sda;
-assign io_in[36] = scl;
+assign sda = (io_oeb[22] == 1'b0) ? io_out[22] : 1'bz;
+assign scl = (io_oeb[23] == 1'b0) ? io_out[23]: 1'bz;
+assign io_in[22] = sda;
+assign io_in[23] = scl;
pullup p1(scl); // pullup scl line
pullup p2(sda); // pullup sda line
diff --git a/verilog/dv/user_i2cm/user_uart.c b/verilog/dv/user_i2cm/user_uart.c
index b60311c..b86f23b 100644
--- a/verilog/dv/user_i2cm/user_uart.c
+++ b/verilog/dv/user_i2cm/user_uart.c
@@ -18,23 +18,6 @@
#define SC_SIM_OUTPORT (0xf0000000)
#define uint32_t long
-#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30000000)
-#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30000004)
-#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30000008)
-#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3000000C)
-#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30000010)
-#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30000014)
-#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30000018)
-#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3000001C)
-#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30000020)
-#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30000024)
-#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30000028)
-#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3000002C)
-#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30000030)
-#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30000034)
-#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30000038)
-#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3000003C)
-
#define reg_mprj_uart_reg0 (*(volatile uint32_t*)0x30010000)
#define reg_mprj_uart_reg1 (*(volatile uint32_t*)0x30010004)
#define reg_mprj_uart_reg2 (*(volatile uint32_t*)0x30010008)
diff --git a/verilog/dv/user_risc_boot/Makefile b/verilog/dv/user_risc_boot/Makefile
index c01b1ed..3a03931 100644
--- a/verilog/dv/user_risc_boot/Makefile
+++ b/verilog/dv/user_risc_boot/Makefile
@@ -64,6 +64,7 @@
${GCC64_PREFIX}-objdump -D user_risc_boot.elf > user_risc_boot.dump
rm crt_tcm.o user_risc_boot.o
ifeq ($(SIM),RTL)
+ ifeq ($(DUMP),OFF)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
@@ -71,6 +72,15 @@
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
-I $(UPRJ_INCLUDE_PATH4) \
$< -o $@
+ else
+ iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+ -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_AGENTS) \
+ -I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
+ -I $(UPRJ_INCLUDE_PATH4) \
+ $< -o $@
+ endif
else
iverilog -g2005-sv -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
diff --git a/verilog/dv/user_risc_boot/uprj_netlists.v b/verilog/dv/user_risc_boot/uprj_netlists.v
index e53865f..0c7d867 100644
--- a/verilog/dv/user_risc_boot/uprj_netlists.v
+++ b/verilog/dv/user_risc_boot/uprj_netlists.v
@@ -34,6 +34,7 @@
`include "syntacore.v"
`include "wb_host.v"
`include "clk_skew_adjust.v"
+ `include "clk_buf.v"
`else
`include "libs.ref/sky130_fd_sc_hd/verilog/primitives.v"
@@ -41,6 +42,19 @@
`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
`include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+ `include"sar_adc/SAR.sv"
+ `include"sar_adc/ACMP.sv"
+ `include"sar_adc/sar_adc.sv"
+ `include"sar_adc/adc_reg.sv"
+ `include"sar_adc/DAC_8BIT.v"
+
+ `include "sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v"
+ `include "pinmux/src/pinmux.sv"
+ `include "pinmux/src/pinmux_reg.sv"
+ `include "pinmux/src/gpio_intr.sv"
+ `include "pinmux/src/pwm.sv"
+ `include "lib/pulse_gen_type1.sv"
+ `include "lib/pulse_gen_type2.sv"
`include "spi_master/src/spim_top.sv"
`include "spi_master/src/spim_if.sv"
@@ -75,18 +89,9 @@
`include "uart_i2c_usb/src/uart_i2c_usb.sv"
- `include "sdram_ctrl/src/top/sdrc_top.v"
- `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v"
- `include "lib/async_fifo.sv"
- `include "sdram_ctrl/src/core/sdrc_core.v"
- `include "sdram_ctrl/src/core/sdrc_bank_ctl.v"
- `include "sdram_ctrl/src/core/sdrc_bank_fsm.v"
- `include "sdram_ctrl/src/core/sdrc_bs_convert.v"
- `include "sdram_ctrl/src/core/sdrc_req_gen.v"
- `include "sdram_ctrl/src/core/sdrc_xfr_ctl.v"
-
`include "lib/registers.v"
`include "lib/clk_ctl.v"
+ `include "lib/async_fifo.sv"
`include "digital_core/src/glbl_cfg.sv"
`include "wb_host/src/wb_host.sv"
@@ -121,6 +126,7 @@
`include "syntacore/scr1/src/core/scr1_dmi.sv"
`include "syntacore/scr1/src/core/scr1_scu.sv"
+ `include "syntacore/scr1/src/top/scr1_imem_router.sv"
`include "syntacore/scr1/src/top/scr1_dmem_router.sv"
`include "syntacore/scr1/src/top/scr1_dp_memory.sv"
`include "syntacore/scr1/src/top/scr1_tcm.sv"
diff --git a/verilog/dv/user_risc_boot/user_risc_boot.c b/verilog/dv/user_risc_boot/user_risc_boot.c
index af9339d..63b2e6a 100644
--- a/verilog/dv/user_risc_boot/user_risc_boot.c
+++ b/verilog/dv/user_risc_boot/user_risc_boot.c
@@ -18,22 +18,34 @@
#define SC_SIM_OUTPORT (0xf0000000)
#define uint32_t long
-#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30000000)
-#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30000004)
-#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30000008)
-#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3000000C)
-#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30000010)
-#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30000014)
-#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30000018)
-#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3000001C)
-#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30000020)
-#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30000024)
-#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30000028)
-#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3000002C)
-#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30000030)
-#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30000034)
-#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30000038)
-#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3000003C)
+#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x10030000)
+#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x10030004)
+#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x10030008)
+#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x1003000C)
+#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x10030010)
+#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x10030014)
+#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x10030018)
+#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x1003001C)
+#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x10030020)
+#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x10030024)
+#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x10030028)
+#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x1003002C)
+#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x10030030)
+#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x10030034)
+#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x10030038)
+#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x1003003C)
+#define reg_mprj_globl_reg16 (*(volatile uint32_t*)0x10030040)
+#define reg_mprj_globl_reg17 (*(volatile uint32_t*)0x10030044)
+#define reg_mprj_globl_reg18 (*(volatile uint32_t*)0x10030048)
+#define reg_mprj_globl_reg19 (*(volatile uint32_t*)0x1003004C)
+#define reg_mprj_globl_reg20 (*(volatile uint32_t*)0x10030050)
+#define reg_mprj_globl_reg21 (*(volatile uint32_t*)0x10030054)
+#define reg_mprj_globl_reg22 (*(volatile uint32_t*)0x10030058)
+#define reg_mprj_globl_reg23 (*(volatile uint32_t*)0x1003005C)
+#define reg_mprj_globl_reg24 (*(volatile uint32_t*)0x10030060)
+#define reg_mprj_globl_reg25 (*(volatile uint32_t*)0x10030064)
+#define reg_mprj_globl_reg26 (*(volatile uint32_t*)0x10030068)
+#define reg_mprj_globl_reg27 (*(volatile uint32_t*)0x1003006C)
int main()
{
@@ -45,12 +57,12 @@
//*out_ptr = 0xDDEEFF00;
// Write software Write & Read Register
- reg_mprj_globl_reg6 = 0x11223344;
- reg_mprj_globl_reg7 = 0x22334455;
- reg_mprj_globl_reg8 = 0x33445566;
- reg_mprj_globl_reg9 = 0x44556677;
- reg_mprj_globl_reg10 = 0x55667788;
- reg_mprj_globl_reg11 = 0x66778899;
+ reg_mprj_globl_reg22 = 0x11223344;
+ reg_mprj_globl_reg23 = 0x22334455;
+ reg_mprj_globl_reg24 = 0x33445566;
+ reg_mprj_globl_reg25 = 0x44556677;
+ reg_mprj_globl_reg26 = 0x55667788;
+ reg_mprj_globl_reg27 = 0x66778899;
//reg_mprj_globl_reg12 = 0x778899AA;
//reg_mprj_globl_reg13 = 0x8899AABB;
//reg_mprj_globl_reg14 = 0x99AABBCC;
diff --git a/verilog/dv/user_risc_boot/user_risc_boot_tb.v b/verilog/dv/user_risc_boot/user_risc_boot_tb.v
index 82f0d44..aeb9867 100644
--- a/verilog/dv/user_risc_boot/user_risc_boot_tb.v
+++ b/verilog/dv/user_risc_boot/user_risc_boot_tb.v
@@ -29,8 +29,9 @@
//// user_risc_boot.c ////
//// 2. User Risc core uses Serial Flash and SDRAM to boot ////
//// 3. After successful boot, Risc core will write signature ////
-//// in to user register from 0x3000_0018 to 0x3000_002C ////
+//// in to user register from 0x1003_0058 to 0x1003_006C ////
//// 4. Through the External Wishbone Interface we read back ////
+//// from 0x3003_0058 to 0x3003_006C ////
//// and validate the user register to declared pass fail ////
//// ////
//// To Do: ////
@@ -136,17 +137,8 @@
repeat (10) @(posedge clock);
$display("Monitor: Standalone User Risc Boot Test Started");
- // Remove Wb Reset
- wb_user_core_write('h3080_0000,'h1);
-
- #1;
- //------------ SDRAM Config - 2
- wb_user_core_write('h3000_0014,'h100_019E);
-
- repeat (2) @(posedge clock);
- #1;
- //------------ SDRAM Config - 1
- wb_user_core_write('h3000_0010,'h2F17_2242);
+ // Remove Wb Reset
+ wb_user_core_write('h3080_0000,'h1);
repeat (2) @(posedge clock);
#1;
@@ -172,22 +164,22 @@
// 0x3000002C = 0x66778899;
test_fail = 0;
- wb_user_core_read(32'h30000018,read_data);
+ wb_user_core_read(32'h30030058,read_data);
if(read_data != 32'h11223344) test_fail = 1;
- wb_user_core_read(32'h3000001C,read_data);
+ wb_user_core_read(32'h3003005C,read_data);
if(read_data != 32'h22334455) test_fail = 1;
- wb_user_core_read(32'h30000020,read_data);
+ wb_user_core_read(32'h30030060,read_data);
if(read_data != 32'h33445566) test_fail = 1;
- wb_user_core_read(32'h30000024,read_data);
+ wb_user_core_read(32'h30030064,read_data);
if(read_data!= 32'h44556677) test_fail = 1;
- wb_user_core_read(32'h30000028,read_data);
+ wb_user_core_read(32'h30030068,read_data);
if(read_data!= 32'h55667788) test_fail = 1;
- wb_user_core_read(32'h3000002C,read_data) ;
+ wb_user_core_read(32'h3003006C,read_data) ;
if(read_data != 32'h66778899) test_fail = 1;
@@ -374,22 +366,22 @@
// user core using the gpio pads
// ----------------------------------------------------
- wire flash_clk = io_out[30];
- wire flash_csb = io_out[31];
+ wire flash_clk = io_out[24];
+ wire flash_csb = io_out[25];
// Creating Pad Delay
- wire #1 io_oeb_32 = io_oeb[32];
- wire #1 io_oeb_33 = io_oeb[33];
- wire #1 io_oeb_34 = io_oeb[34];
- wire #1 io_oeb_35 = io_oeb[35];
- tri flash_io0 = (io_oeb_32== 1'b0) ? io_out[32] : 1'bz;
- tri flash_io1 = (io_oeb_33== 1'b0) ? io_out[33] : 1'bz;
- tri flash_io2 = (io_oeb_34== 1'b0) ? io_out[34] : 1'bz;
- tri flash_io3 = (io_oeb_35== 1'b0) ? io_out[35] : 1'bz;
+ wire #1 io_oeb_26 = io_oeb[26];
+ wire #1 io_oeb_27 = io_oeb[27];
+ wire #1 io_oeb_28 = io_oeb[28];
+ wire #1 io_oeb_29 = io_oeb[29];
+ tri flash_io0 = (io_oeb_26== 1'b0) ? io_out[26] : 1'bz;
+ tri flash_io1 = (io_oeb_27== 1'b0) ? io_out[27] : 1'bz;
+ tri flash_io2 = (io_oeb_28== 1'b0) ? io_out[28] : 1'bz;
+ tri flash_io3 = (io_oeb_29== 1'b0) ? io_out[29] : 1'bz;
- assign io_in[32] = flash_io0;
- assign io_in[33] = flash_io1;
- assign io_in[34] = flash_io2;
- assign io_in[35] = flash_io3;
+ assign io_in[26] = flash_io0;
+ assign io_in[27] = flash_io1;
+ assign io_in[28] = flash_io2;
+ assign io_in[29] = flash_io3;
// Quard flash
@@ -411,51 +403,6 @@
-//------------------------------------------------
-// Integrate the SDRAM 8 BIT Memory
-// -----------------------------------------------
-
-wire [7:0] Dq ; // SDRAM Read/Write Data Bus
-wire [0:0] sdr_dqm ; // SDRAM DATA Mask
-wire [1:0] sdr_ba ; // SDRAM Bank Select
-wire [12:0] sdr_addr ; // SDRAM ADRESS
-wire sdr_cs_n ; // chip select
-wire sdr_cke ; // clock gate
-wire sdr_ras_n ; // ras
-wire sdr_cas_n ; // cas
-wire sdr_we_n ; // write enable
-wire sdram_clk ;
-
-assign Dq[7:0] = (io_oeb[7:0] == 8'h0) ? io_out [7:0] : 8'hZZ;
-assign sdr_addr[12:0] = io_out [20:8] ;
-assign sdr_ba[1:0] = io_out [22:21] ;
-assign sdr_dqm[0] = io_out [23] ;
-assign sdr_we_n = io_out [24] ;
-assign sdr_cas_n = io_out [25] ;
-assign sdr_ras_n = io_out [26] ;
-assign sdr_cs_n = io_out [27] ;
-assign sdr_cke = io_out [28] ;
-assign sdram_clk = io_out [29] ;
-assign io_in[29] = sdram_clk;
-assign #(1) io_in[7:0] = Dq;
-
-// to fix the sdram interface timing issue
-wire #(1) sdram_clk_d = sdram_clk;
-
- // SDRAM 8bit
-mt48lc8m8a2 #(.data_bits(8)) u_sdram8 (
- .Dq (Dq ) ,
- .Addr (sdr_addr[11:0] ),
- .Ba (sdr_ba ),
- .Clk (sdram_clk_d ),
- .Cke (sdr_cke ),
- .Cs_n (sdr_cs_n ),
- .Ras_n (sdr_ras_n ),
- .Cas_n (sdr_cas_n ),
- .We_n (sdr_we_n ),
- .Dqm (sdr_dqm )
- );
-
task wb_user_core_write;
input [31:0] address;
diff --git a/verilog/dv/user_spi/Makefile b/verilog/dv/user_spi/Makefile
index bc48c2a..96527bf 100644
--- a/verilog/dv/user_spi/Makefile
+++ b/verilog/dv/user_spi/Makefile
@@ -64,6 +64,7 @@
${GCC64_PREFIX}-objdump -D user_risc_boot.elf > user_risc_boot.dump
rm crt_tcm.o user_risc_boot.o
ifeq ($(SIM),RTL)
+ ifeq ($(DUMP),OFF)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
@@ -71,6 +72,15 @@
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
-I $(UPRJ_INCLUDE_PATH4) \
$< -o $@
+ else
+ iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+ -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_AGENTS) \
+ -I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
+ -I $(UPRJ_INCLUDE_PATH4) \
+ $< -o $@
+ endif
else
iverilog -g2005-sv -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
diff --git a/verilog/dv/user_spi/run_iverilog b/verilog/dv/user_spi/run_iverilog
index eb92eae..fedabc3 100755
--- a/verilog/dv/user_spi/run_iverilog
+++ b/verilog/dv/user_spi/run_iverilog
@@ -27,15 +27,17 @@
rm crt_tcm.o user_risc_boot.o
-#iverilog with waveform dump
-#iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../ -I ../../../verilog -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_spi_tb.v -o user_spi_tb.vvp
#iverilog without Dump
-iverilog -g2005-sv -D WFDUMP -DFUNCTIONAL -DSIM -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/rtl -I ../ -I ../../../verilog -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_spi_tb.v -o user_spi_tb.vvp
+iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $PDK_PATH \
+-I ../../caravel/verilog/dv/caravel -I ../../caravel/verilog/rtl \
+-I ../model -I ../../../verilog/rtl -I ../../../verilog \
+-I ../agents \
+-I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I ../../../verilog/rtl/i2cm/src/includes \
+-I ../../../verilog/rtl/usb1_host/src/includes \
+user_spi_tb.v -o user_spi.vvp
-# GLS
-#iverilog -g2005-sv -D GL -D FUNCTIONAL -I $PDK_PATH -I ../../../caravel/verilog/rtl -I ../ -I ../../../verilog/gl -I ../../../verilog -I /home/dinesha/workarea/pdk/sky130A -I ../../../verilog/rtl/syntacore/scr1/src/includes -I ../../../verilog/rtl/sdram_ctrl/src/defs -I $CARAVEL_ROOT/verilog/dv/caravel -I ../model -I ../agents user_spi_tb.v -o user_spi_tb.vvp
-#
+
vvp user_spi_tb.vvp | tee test.log
diff --git a/verilog/dv/user_spi/uprj_netlists.v b/verilog/dv/user_spi/uprj_netlists.v
index 9e61482..0c7d867 100644
--- a/verilog/dv/user_spi/uprj_netlists.v
+++ b/verilog/dv/user_spi/uprj_netlists.v
@@ -42,6 +42,19 @@
`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
`include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+ `include"sar_adc/SAR.sv"
+ `include"sar_adc/ACMP.sv"
+ `include"sar_adc/sar_adc.sv"
+ `include"sar_adc/adc_reg.sv"
+ `include"sar_adc/DAC_8BIT.v"
+
+ `include "sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v"
+ `include "pinmux/src/pinmux.sv"
+ `include "pinmux/src/pinmux_reg.sv"
+ `include "pinmux/src/gpio_intr.sv"
+ `include "pinmux/src/pwm.sv"
+ `include "lib/pulse_gen_type1.sv"
+ `include "lib/pulse_gen_type2.sv"
`include "spi_master/src/spim_top.sv"
`include "spi_master/src/spim_if.sv"
@@ -76,18 +89,9 @@
`include "uart_i2c_usb/src/uart_i2c_usb.sv"
- `include "sdram_ctrl/src/top/sdrc_top.v"
- `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v"
- `include "lib/async_fifo.sv"
- `include "sdram_ctrl/src/core/sdrc_core.v"
- `include "sdram_ctrl/src/core/sdrc_bank_ctl.v"
- `include "sdram_ctrl/src/core/sdrc_bank_fsm.v"
- `include "sdram_ctrl/src/core/sdrc_bs_convert.v"
- `include "sdram_ctrl/src/core/sdrc_req_gen.v"
- `include "sdram_ctrl/src/core/sdrc_xfr_ctl.v"
-
`include "lib/registers.v"
`include "lib/clk_ctl.v"
+ `include "lib/async_fifo.sv"
`include "digital_core/src/glbl_cfg.sv"
`include "wb_host/src/wb_host.sv"
@@ -122,6 +126,7 @@
`include "syntacore/scr1/src/core/scr1_dmi.sv"
`include "syntacore/scr1/src/core/scr1_scu.sv"
+ `include "syntacore/scr1/src/top/scr1_imem_router.sv"
`include "syntacore/scr1/src/top/scr1_dmem_router.sv"
`include "syntacore/scr1/src/top/scr1_dp_memory.sv"
`include "syntacore/scr1/src/top/scr1_tcm.sv"
diff --git a/verilog/dv/user_spi/user_risc_boot.c b/verilog/dv/user_spi/user_risc_boot.c
index af9339d..0711b7b 100644
--- a/verilog/dv/user_spi/user_risc_boot.c
+++ b/verilog/dv/user_spi/user_risc_boot.c
@@ -18,22 +18,34 @@
#define SC_SIM_OUTPORT (0xf0000000)
#define uint32_t long
-#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30000000)
-#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30000004)
-#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30000008)
-#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3000000C)
-#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30000010)
-#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30000014)
-#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30000018)
-#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3000001C)
-#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30000020)
-#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30000024)
-#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30000028)
-#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3000002C)
-#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30000030)
-#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30000034)
-#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30000038)
-#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3000003C)
+#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30030000)
+#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30030004)
+#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30030008)
+#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3003000C)
+#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30030010)
+#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30030014)
+#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30030018)
+#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3003001C)
+#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30030020)
+#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30030024)
+#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30030028)
+#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3003002C)
+#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30030030)
+#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30030034)
+#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30030038)
+#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3003003C)
+#define reg_mprj_globl_reg16 (*(volatile uint32_t*)0x30030040)
+#define reg_mprj_globl_reg17 (*(volatile uint32_t*)0x30030044)
+#define reg_mprj_globl_reg18 (*(volatile uint32_t*)0x30030048)
+#define reg_mprj_globl_reg19 (*(volatile uint32_t*)0x3003004C)
+#define reg_mprj_globl_reg20 (*(volatile uint32_t*)0x30030050)
+#define reg_mprj_globl_reg21 (*(volatile uint32_t*)0x30030054)
+#define reg_mprj_globl_reg22 (*(volatile uint32_t*)0x30030058)
+#define reg_mprj_globl_reg23 (*(volatile uint32_t*)0x3003005C)
+#define reg_mprj_globl_reg24 (*(volatile uint32_t*)0x30030060)
+#define reg_mprj_globl_reg25 (*(volatile uint32_t*)0x30030064)
+#define reg_mprj_globl_reg26 (*(volatile uint32_t*)0x30030068)
+#define reg_mprj_globl_reg27 (*(volatile uint32_t*)0x3003006C)
int main()
{
@@ -45,16 +57,12 @@
//*out_ptr = 0xDDEEFF00;
// Write software Write & Read Register
- reg_mprj_globl_reg6 = 0x11223344;
- reg_mprj_globl_reg7 = 0x22334455;
- reg_mprj_globl_reg8 = 0x33445566;
- reg_mprj_globl_reg9 = 0x44556677;
- reg_mprj_globl_reg10 = 0x55667788;
- reg_mprj_globl_reg11 = 0x66778899;
- //reg_mprj_globl_reg12 = 0x778899AA;
- //reg_mprj_globl_reg13 = 0x8899AABB;
- //reg_mprj_globl_reg14 = 0x99AABBCC;
- //reg_mprj_globl_reg15 = 0xAABBCCDD;
+ reg_mprj_globl_reg22 = 0x11223344;
+ reg_mprj_globl_reg23 = 0x22334455;
+ reg_mprj_globl_reg24 = 0x33445566;
+ reg_mprj_globl_reg25 = 0x44556677;
+ reg_mprj_globl_reg26 = 0x55667788;
+ reg_mprj_globl_reg27 = 0x66778899;
while(1) {}
return 0;
diff --git a/verilog/dv/user_spi/user_spi_tb.v b/verilog/dv/user_spi/user_spi_tb.v
index 15c0c2e..53b793f 100644
--- a/verilog/dv/user_spi/user_spi_tb.v
+++ b/verilog/dv/user_spi/user_spi_tb.v
@@ -24,14 +24,20 @@
//// ////
//// Description ////
//// This is a standalone test bench to validate the ////
-//// Digital core. ////
-//// 1. User Risc core is booted using compiled code of ////
-//// user_risc_boot.c ////
-//// 2. User Risc core uses Serial Flash and SDRAM to boot ////
-//// 3. After successful boot, Risc core will write signature ////
-//// in to user register from 0x3000_0018 to 0x3000_002C ////
-//// 4. Through the External Wishbone Interface we read back ////
-//// and validate the user register to declared pass fail ////
+//// Digital core flash access through External WB i/F. ////
+//// 1. Check SPI Read Identification ////
+//// 2. Check the Direct Memory Read (Qual/Single/Quad) ////
+//// 3. Direct SPI Memory Prefetch - 3DW ////
+//// 4. Direct SPI Memory Prefetch - 2DW ////
+//// 5. Direct SPI Memory Prefetch - 1DW ////
+//// 6. Direct SPI Memory Prefetch - 7DW ////
+//// 7. 1DW Indirect Read ////
+//// 8. 2DW Indirect Read ////
+//// 9. 3DW Indirect Read ////
+//// 10. 4DW Indirect Read ////
+//// 11. 5DW Indirect Read ////
+//// 12. 8DW Indirect Read ////
+//// 13. Sector Erase command + Page Write & Read Back ////
//// ////
//// To Do: ////
//// nothing ////
@@ -40,7 +46,7 @@
//// - Dinesh Annayya, dinesha@opencores.org ////
//// ////
//// Revision : ////
-//// 0.1 - 16th Feb 2021, Dinesh A ////
+//// 0.1 - 01 Oct 2021, Dinesh A ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
@@ -203,7 +209,7 @@
wb_user_core_read_check(32'h1000001C,read_data,32'h00190201);
$display("#############################################");
$display("Testing Direct SPI Memory Read ");
- $display(" SPI Mode: QDDR (Dual 4 but) ");
+ $display(" SPI Mode: QDDR (Dual 4 bit) ");
$display("Prefetch : 1DW, OPCODE:READ(0xED) ");
$display("SEQ: Command -> Address -> Read Data ");
$display("#############################################");
@@ -220,14 +226,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display("Testing Direct SPI Memory Read ");
$display(" SPI Mode: Normal/Single Bit ");
@@ -246,14 +252,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display("Testing Direct SPI Memory Read ");
$display(" SPI Mode: Normal/Single Bit ");
@@ -272,14 +278,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display("Testing Direct SPI Memory Read ");
@@ -299,14 +305,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display("Testing Direct SPI Memory Read with Prefetch");
@@ -326,14 +332,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display("Testing Direct SPI Memory Read with Prefetch:3DW");
@@ -350,14 +356,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display("Testing Direct SPI Memory Read with Prefetch:2DW");
@@ -374,14 +380,15 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
+
$display("#############################################");
$display("Testing Direct SPI Memory Read with Prefetch:1DW");
@@ -398,14 +405,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display("Testing Direct SPI Memory Read with Prefetch:7DW");
@@ -422,14 +429,14 @@
wb_user_core_read_check(32'h00000214,read_data,32'h00000313);
wb_user_core_read_check(32'h00000218,read_data,32'h00000393);
wb_user_core_read_check(32'h0000021C,read_data,32'h00000413);
- wb_user_core_read_check(32'h00000400,read_data,32'h11223737);
- wb_user_core_read_check(32'h00000404,read_data,32'h300007b7);
- wb_user_core_read_check(32'h00000408,read_data,32'h34470293);
- wb_user_core_read_check(32'h0000040C,read_data,32'h22334337);
- wb_user_core_read_check(32'h00000410,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h00000414,read_data,32'h45530393);
- wb_user_core_read_check(32'h00000418,read_data,32'h33445537);
- wb_user_core_read_check(32'h0000041C,read_data,32'h0077ae23);
+ wb_user_core_read_check(32'h00000300,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h00000304,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h00000308,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h0000030C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h00000310,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h00000314,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h00000318,read_data,32'h00428293);
+ wb_user_core_read_check(32'h0000031C,read_data,32'h06300313);
$display("#############################################");
$display(" Testing Single Word Indirect SPI Memory Read");
@@ -453,22 +460,22 @@
wb_user_core_read_check(32'h1000001C,read_data,32'h00000393);
wb_user_core_write(32'h10000014,32'h0000021C);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000413);
- wb_user_core_write(32'h10000014,32'h00000400);
- wb_user_core_read_check(32'h1000001C,read_data,32'h11223737);
- wb_user_core_write(32'h10000014,32'h00000404);
- wb_user_core_read_check(32'h1000001C,read_data,32'h300007b7);
- wb_user_core_write(32'h10000014,32'h00000408);
- wb_user_core_read_check(32'h1000001C,read_data,32'h34470293);
- wb_user_core_write(32'h10000014,32'h0000040C);
- wb_user_core_read_check(32'h1000001C,read_data,32'h22334337);
- wb_user_core_write(32'h10000014,32'h00000410);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0057ac23);
- wb_user_core_write(32'h10000014,32'h00000414);
- wb_user_core_read_check(32'h1000001C,read_data,32'h45530393);
- wb_user_core_write(32'h10000014,32'h00000418);
- wb_user_core_read_check(32'h1000001C,read_data,32'h33445537);
- wb_user_core_write(32'h10000014,32'h0000041C);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0077ae23);
+ wb_user_core_write(32'h10000014,32'h00000300);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0005A023);
+ wb_user_core_write(32'h10000014,32'h00000304);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h9DE30591);
+ wb_user_core_write(32'h10000014,32'h00000308);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h02B7FEE5);
+ wb_user_core_write(32'h10000014,32'h0000030C);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h43050049);
+ wb_user_core_write(32'h10000014,32'h00000310);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0062A023);
+ wb_user_core_write(32'h10000014,32'h00000314);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h004902B7);
+ wb_user_core_write(32'h10000014,32'h00000318);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h00428293);
+ wb_user_core_write(32'h10000014,32'h0000031C);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h06300313);
repeat (100) @(posedge clock);
$display("#############################################");
$display(" Testing Two Word Indirect SPI Memory Read");
@@ -488,18 +495,18 @@
wb_user_core_write(32'h10000014,32'h00000218);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000393);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000413);
- wb_user_core_write(32'h10000014,32'h00000400);
- wb_user_core_read_check(32'h1000001C,read_data,32'h11223737);
- wb_user_core_read_check(32'h1000001C,read_data,32'h300007b7);
- wb_user_core_write(32'h10000014,32'h00000408);
- wb_user_core_read_check(32'h1000001C,read_data,32'h34470293);
- wb_user_core_read_check(32'h1000001C,read_data,32'h22334337);
- wb_user_core_write(32'h10000014,32'h00000410);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h1000001C,read_data,32'h45530393);
- wb_user_core_write(32'h10000014,32'h00000418);
- wb_user_core_read_check(32'h1000001C,read_data,32'h33445537);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0077ae23);
+ wb_user_core_write(32'h10000014,32'h00000300);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h9DE30591);
+ wb_user_core_write(32'h10000014,32'h00000308);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h43050049);
+ wb_user_core_write(32'h10000014,32'h00000310);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h004902B7);
+ wb_user_core_write(32'h10000014,32'h00000318);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h00428293);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h06300313);
repeat (100) @(posedge clock);
$display("#############################################");
$display(" Testing Three Word Indirect SPI Memory Read");
@@ -515,14 +522,14 @@
wb_user_core_read_check(32'h1000001C,read_data,32'h00000213);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000293);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000313);
- wb_user_core_write(32'h10000014,32'h00000400);
- wb_user_core_read_check(32'h1000001C,read_data,32'h11223737);
- wb_user_core_read_check(32'h1000001C,read_data,32'h300007b7);
- wb_user_core_read_check(32'h1000001C,read_data,32'h34470293);
- wb_user_core_write(32'h10000014,32'h0000040C);
- wb_user_core_read_check(32'h1000001C,read_data,32'h22334337);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h1000001C,read_data,32'h45530393);
+ wb_user_core_write(32'h10000014,32'h00000300);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h02B7FEE5);
+ wb_user_core_write(32'h10000014,32'h0000030C);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h004902B7);
repeat (100) @(posedge clock);
$display("#############################################");
$display(" Testing Four Word Indirect SPI Memory Read");
@@ -540,16 +547,16 @@
wb_user_core_read_check(32'h1000001C,read_data,32'h00000313);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000393);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000413);
- wb_user_core_write(32'h10000014,32'h00000400);
- wb_user_core_read_check(32'h1000001C,read_data,32'h11223737);
- wb_user_core_read_check(32'h1000001C,read_data,32'h300007b7);
- wb_user_core_read_check(32'h1000001C,read_data,32'h34470293);
- wb_user_core_read_check(32'h1000001C,read_data,32'h22334337);
- wb_user_core_write(32'h10000014,32'h00000410);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h1000001C,read_data,32'h45530393);
- wb_user_core_read_check(32'h1000001C,read_data,32'h33445537);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0077ae23);
+ wb_user_core_write(32'h10000014,32'h00000300);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h43050049);
+ wb_user_core_write(32'h10000014,32'h00000310);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h00428293);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h06300313);
repeat (100) @(posedge clock);
$display("#############################################");
$display(" Testing Five Word Indirect SPI Memory Read");
@@ -563,12 +570,12 @@
wb_user_core_read_check(32'h1000001C,read_data,32'h00000193);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000213);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000293);
- wb_user_core_write(32'h10000014,32'h00000400);
- wb_user_core_read_check(32'h1000001C,read_data,32'h11223737);
- wb_user_core_read_check(32'h1000001C,read_data,32'h300007b7);
- wb_user_core_read_check(32'h1000001C,read_data,32'h34470293);
- wb_user_core_read_check(32'h1000001C,read_data,32'h22334337);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0057ac23);
+ wb_user_core_write(32'h10000014,32'h00000300);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0062A023);
$display("#############################################");
$display(" Testing Eight Word Indirect SPI Memory Read");
$display("#############################################");
@@ -584,15 +591,15 @@
wb_user_core_read_check(32'h1000001C,read_data,32'h00000313);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000393);
wb_user_core_read_check(32'h1000001C,read_data,32'h00000413);
- wb_user_core_write(32'h10000014,32'h00000400);
- wb_user_core_read_check(32'h1000001C,read_data,32'h11223737);
- wb_user_core_read_check(32'h1000001C,read_data,32'h300007b7);
- wb_user_core_read_check(32'h1000001C,read_data,32'h34470293);
- wb_user_core_read_check(32'h1000001C,read_data,32'h22334337);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0057ac23);
- wb_user_core_read_check(32'h1000001C,read_data,32'h45530393);
- wb_user_core_read_check(32'h1000001C,read_data,32'h33445537);
- wb_user_core_read_check(32'h1000001C,read_data,32'h0077ae23);
+ wb_user_core_write(32'h10000014,32'h00000300);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0005A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h9DE30591);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h02B7FEE5);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h43050049);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h0062A023);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h004902B7);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h00428293);
+ wb_user_core_read_check(32'h1000001C,read_data,32'h06300313);
$display("#############################################");
$display(" Sector Erase Command ");
@@ -1236,25 +1243,25 @@
// user core using the gpio pads
// ----------------------------------------------------
- wire flash_clk = io_out[30];
- wire flash_csb = io_out[31];
+ wire flash_clk = io_out[24];
+ wire flash_csb = io_out[25];
// Creating Pad Delay
- wire #1 io_oeb_32 = io_oeb[32];
- wire #1 io_oeb_33 = io_oeb[33];
- wire #1 io_oeb_34 = io_oeb[34];
- wire #1 io_oeb_35 = io_oeb[35];
- tri flash_io0 = (io_oeb_32== 1'b0) ? io_out[32] : 1'bz;
- tri flash_io1 = (io_oeb_33== 1'b0) ? io_out[33] : 1'bz;
- tri flash_io2 = (io_oeb_34== 1'b0) ? io_out[34] : 1'bz;
- tri flash_io3 = (io_oeb_35== 1'b0) ? io_out[35] : 1'bz;
+ wire #1 io_oeb_26 = io_oeb[26];
+ wire #1 io_oeb_27 = io_oeb[27];
+ wire #1 io_oeb_28 = io_oeb[28];
+ wire #1 io_oeb_29 = io_oeb[29];
+ tri flash_io0 = (io_oeb_26== 1'b0) ? io_out[26] : 1'bz;
+ tri flash_io1 = (io_oeb_27== 1'b0) ? io_out[27] : 1'bz;
+ tri flash_io2 = (io_oeb_28== 1'b0) ? io_out[28] : 1'bz;
+ tri flash_io3 = (io_oeb_29== 1'b0) ? io_out[29] : 1'bz;
- assign io_in[32] = flash_io0;
- assign io_in[33] = flash_io1;
- assign io_in[34] = flash_io2;
- assign io_in[35] = flash_io3;
+ assign io_in[26] = flash_io0;
+ assign io_in[27] = flash_io1;
+ assign io_in[28] = flash_io2;
+ assign io_in[29] = flash_io3;
- // Quard flash
+ // Quad flash
s25fl256s #(.mem_file_name("user_risc_boot.hex"),
.otp_file_name("none"),
.TimingModel("S25FL512SAGMFI010_F_30pF"))
@@ -1273,50 +1280,6 @@
-//------------------------------------------------
-// Integrate the SDRAM 8 BIT Memory
-// -----------------------------------------------
-
-wire [7:0] Dq ; // SDRAM Read/Write Data Bus
-wire [0:0] sdr_dqm ; // SDRAM DATA Mask
-wire [1:0] sdr_ba ; // SDRAM Bank Select
-wire [12:0] sdr_addr ; // SDRAM ADRESS
-wire sdr_cs_n ; // chip select
-wire sdr_cke ; // clock gate
-wire sdr_ras_n ; // ras
-wire sdr_cas_n ; // cas
-wire sdr_we_n ; // write enable
-wire sdram_clk ;
-
-assign Dq[7:0] = (io_oeb[7:0] == 8'h0) ? io_out [7:0] : 8'hZZ;
-assign sdr_addr[12:0] = io_out [20:8] ;
-assign sdr_ba[1:0] = io_out [22:21] ;
-assign sdr_dqm[0] = io_out [23] ;
-assign sdr_we_n = io_out [24] ;
-assign sdr_cas_n = io_out [25] ;
-assign sdr_ras_n = io_out [26] ;
-assign sdr_cs_n = io_out [27] ;
-assign sdr_cke = io_out [28] ;
-assign sdram_clk = io_out [29] ;
-assign io_in[29] = sdram_clk;
-assign #(1) io_in[7:0] = Dq;
-
-// to fix the sdram interface timing issue
-wire #(1) sdram_clk_d = sdram_clk;
-
- // SDRAM 8bit
-mt48lc8m8a2 #(.data_bits(8)) u_sdram8 (
- .Dq (Dq ) ,
- .Addr (sdr_addr[11:0] ),
- .Ba (sdr_ba ),
- .Clk (sdram_clk_d ),
- .Cke (sdr_cke ),
- .Cs_n (sdr_cs_n ),
- .Ras_n (sdr_ras_n ),
- .Cas_n (sdr_cas_n ),
- .We_n (sdr_we_n ),
- .Dqm (sdr_dqm )
- );
task wb_user_core_write;
input [31:0] address;
diff --git a/verilog/dv/user_uart/Makefile b/verilog/dv/user_uart/Makefile
index 0e4b390..7ef5e6d 100644
--- a/verilog/dv/user_uart/Makefile
+++ b/verilog/dv/user_uart/Makefile
@@ -64,6 +64,7 @@
${GCC64_PREFIX}-objdump -D user_uart.elf > user_uart.dump
rm crt_tcm.o user_uart.o
ifeq ($(SIM),RTL)
+ ifeq ($(DUMP),OFF)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
@@ -71,6 +72,15 @@
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
-I $(UPRJ_INCLUDE_PATH4) \
$< -o $@
+ else
+ iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+ -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_AGENTS) \
+ -I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
+ -I $(UPRJ_INCLUDE_PATH4) \
+ $< -o $@
+ endif
else
iverilog -g2005-sv -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
diff --git a/verilog/dv/user_uart/uprj_netlists.v b/verilog/dv/user_uart/uprj_netlists.v
index 9e61482..0c7d867 100644
--- a/verilog/dv/user_uart/uprj_netlists.v
+++ b/verilog/dv/user_uart/uprj_netlists.v
@@ -42,6 +42,19 @@
`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
`include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+ `include"sar_adc/SAR.sv"
+ `include"sar_adc/ACMP.sv"
+ `include"sar_adc/sar_adc.sv"
+ `include"sar_adc/adc_reg.sv"
+ `include"sar_adc/DAC_8BIT.v"
+
+ `include "sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v"
+ `include "pinmux/src/pinmux.sv"
+ `include "pinmux/src/pinmux_reg.sv"
+ `include "pinmux/src/gpio_intr.sv"
+ `include "pinmux/src/pwm.sv"
+ `include "lib/pulse_gen_type1.sv"
+ `include "lib/pulse_gen_type2.sv"
`include "spi_master/src/spim_top.sv"
`include "spi_master/src/spim_if.sv"
@@ -76,18 +89,9 @@
`include "uart_i2c_usb/src/uart_i2c_usb.sv"
- `include "sdram_ctrl/src/top/sdrc_top.v"
- `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v"
- `include "lib/async_fifo.sv"
- `include "sdram_ctrl/src/core/sdrc_core.v"
- `include "sdram_ctrl/src/core/sdrc_bank_ctl.v"
- `include "sdram_ctrl/src/core/sdrc_bank_fsm.v"
- `include "sdram_ctrl/src/core/sdrc_bs_convert.v"
- `include "sdram_ctrl/src/core/sdrc_req_gen.v"
- `include "sdram_ctrl/src/core/sdrc_xfr_ctl.v"
-
`include "lib/registers.v"
`include "lib/clk_ctl.v"
+ `include "lib/async_fifo.sv"
`include "digital_core/src/glbl_cfg.sv"
`include "wb_host/src/wb_host.sv"
@@ -122,6 +126,7 @@
`include "syntacore/scr1/src/core/scr1_dmi.sv"
`include "syntacore/scr1/src/core/scr1_scu.sv"
+ `include "syntacore/scr1/src/top/scr1_imem_router.sv"
`include "syntacore/scr1/src/top/scr1_dmem_router.sv"
`include "syntacore/scr1/src/top/scr1_dp_memory.sv"
`include "syntacore/scr1/src/top/scr1_tcm.sv"
diff --git a/verilog/dv/user_uart/user_uart.c b/verilog/dv/user_uart/user_uart.c
index b60311c..99e0204 100644
--- a/verilog/dv/user_uart/user_uart.c
+++ b/verilog/dv/user_uart/user_uart.c
@@ -18,32 +18,16 @@
#define SC_SIM_OUTPORT (0xf0000000)
#define uint32_t long
-#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30000000)
-#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30000004)
-#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30000008)
-#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3000000C)
-#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30000010)
-#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30000014)
-#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30000018)
-#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3000001C)
-#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30000020)
-#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30000024)
-#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30000028)
-#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3000002C)
-#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30000030)
-#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30000034)
-#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30000038)
-#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3000003C)
-#define reg_mprj_uart_reg0 (*(volatile uint32_t*)0x30010000)
-#define reg_mprj_uart_reg1 (*(volatile uint32_t*)0x30010004)
-#define reg_mprj_uart_reg2 (*(volatile uint32_t*)0x30010008)
-#define reg_mprj_uart_reg3 (*(volatile uint32_t*)0x3001000C)
-#define reg_mprj_uart_reg4 (*(volatile uint32_t*)0x30010010)
-#define reg_mprj_uart_reg5 (*(volatile uint32_t*)0x30010014)
-#define reg_mprj_uart_reg6 (*(volatile uint32_t*)0x30010018)
-#define reg_mprj_uart_reg7 (*(volatile uint32_t*)0x3001001C)
-#define reg_mprj_uart_reg8 (*(volatile uint32_t*)0x30010020)
+#define reg_mprj_uart_reg0 (*(volatile uint32_t*)0x10010000)
+#define reg_mprj_uart_reg1 (*(volatile uint32_t*)0x10010004)
+#define reg_mprj_uart_reg2 (*(volatile uint32_t*)0x10010008)
+#define reg_mprj_uart_reg3 (*(volatile uint32_t*)0x1001000C)
+#define reg_mprj_uart_reg4 (*(volatile uint32_t*)0x10010010)
+#define reg_mprj_uart_reg5 (*(volatile uint32_t*)0x10010014)
+#define reg_mprj_uart_reg6 (*(volatile uint32_t*)0x10010018)
+#define reg_mprj_uart_reg7 (*(volatile uint32_t*)0x1001001C)
+#define reg_mprj_uart_reg8 (*(volatile uint32_t*)0x10010020)
int main()
{
diff --git a/verilog/dv/user_uart/user_uart_tb.v b/verilog/dv/user_uart/user_uart_tb.v
index 6258f24..0a0b207 100644
--- a/verilog/dv/user_uart/user_uart_tb.v
+++ b/verilog/dv/user_uart/user_uart_tb.v
@@ -177,14 +177,8 @@
// Remove Wb Reset
wb_user_core_write('h3080_0000,'h1);
- #1;
- //------------ SDRAM Config - 2
- wb_user_core_write('h3000_0014,'h100_019E);
-
- repeat (2) @(posedge clock);
- #1;
- //------------ SDRAM Config - 1
- wb_user_core_write('h3000_0010,'h2F17_2242);
+ // Enable UART Multi Functional Ports
+ wb_user_core_write('h3003_0038,'h100);
repeat (2) @(posedge clock);
#1;
@@ -408,27 +402,29 @@
force u_top.u_wb_host.u_clkbuf_usb.VNB = VSS;
end
`endif
+
+
//------------------------------------------------------
// Integrate the Serial flash with qurd support to
// user core using the gpio pads
// ----------------------------------------------------
- wire flash_clk = io_out[30];
- wire flash_csb = io_out[31];
+ wire flash_clk = io_out[24];
+ wire flash_csb = io_out[25];
// Creating Pad Delay
- wire #1 io_oeb_32 = io_oeb[32];
- wire #1 io_oeb_33 = io_oeb[33];
- wire #1 io_oeb_34 = io_oeb[34];
- wire #1 io_oeb_35 = io_oeb[35];
- tri flash_io0 = (io_oeb_32== 1'b0) ? io_out[32] : 1'bz;
- tri flash_io1 = (io_oeb_33== 1'b0) ? io_out[33] : 1'bz;
- tri flash_io2 = (io_oeb_34== 1'b0) ? io_out[34] : 1'bz;
- tri flash_io3 = (io_oeb_35== 1'b0) ? io_out[35] : 1'bz;
+ wire #1 io_oeb_26 = io_oeb[26];
+ wire #1 io_oeb_27 = io_oeb[27];
+ wire #1 io_oeb_28 = io_oeb[28];
+ wire #1 io_oeb_29 = io_oeb[29];
+ tri flash_io0 = (io_oeb_26== 1'b0) ? io_out[26] : 1'bz;
+ tri flash_io1 = (io_oeb_27== 1'b0) ? io_out[27] : 1'bz;
+ tri flash_io2 = (io_oeb_28== 1'b0) ? io_out[28] : 1'bz;
+ tri flash_io3 = (io_oeb_29== 1'b0) ? io_out[29] : 1'bz;
- assign io_in[32] = flash_io0;
- assign io_in[33] = flash_io1;
- assign io_in[34] = flash_io2;
- assign io_in[35] = flash_io3;
+ assign io_in[26] = flash_io0;
+ assign io_in[27] = flash_io1;
+ assign io_in[28] = flash_io2;
+ assign io_in[29] = flash_io3;
// Quard flash
@@ -451,59 +447,14 @@
-//------------------------------------------------
-// Integrate the SDRAM 8 BIT Memory
-// -----------------------------------------------
-
-wire [7:0] Dq ; // SDRAM Read/Write Data Bus
-wire [0:0] sdr_dqm ; // SDRAM DATA Mask
-wire [1:0] sdr_ba ; // SDRAM Bank Select
-wire [12:0] sdr_addr ; // SDRAM ADRESS
-wire sdr_cs_n ; // chip select
-wire sdr_cke ; // clock gate
-wire sdr_ras_n ; // ras
-wire sdr_cas_n ; // cas
-wire sdr_we_n ; // write enable
-wire sdram_clk ;
-
-assign Dq[7:0] = (io_oeb[7:0] == 8'h0) ? io_out [7:0] : 8'hZZ;
-assign sdr_addr[12:0] = io_out [20:8] ;
-assign sdr_ba[1:0] = io_out [22:21] ;
-assign sdr_dqm[0] = io_out [23] ;
-assign sdr_we_n = io_out [24] ;
-assign sdr_cas_n = io_out [25] ;
-assign sdr_ras_n = io_out [26] ;
-assign sdr_cs_n = io_out [27] ;
-assign sdr_cke = io_out [28] ;
-assign sdram_clk = io_out [29] ;
-assign io_in[29] = sdram_clk;
-assign #(1) io_in[7:0] = Dq;
-
-// to fix the sdram interface timing issue
-wire #(1) sdram_clk_d = sdram_clk;
-
- // SDRAM 8bit
-mt48lc8m8a2 #(.data_bits(8)) u_sdram8 (
- .Dq (Dq ) ,
- .Addr (sdr_addr[11:0] ),
- .Ba (sdr_ba ),
- .Clk (sdram_clk_d ),
- .Cke (sdr_cke ),
- .Cs_n (sdr_cs_n ),
- .Ras_n (sdr_ras_n ),
- .Cas_n (sdr_cas_n ),
- .We_n (sdr_we_n ),
- .Dqm (sdr_dqm )
- );
-
//---------------------------
// UART Agent integration
// --------------------------
wire uart_txd,uart_rxd;
-assign uart_txd = io_out[37];
-assign io_in[36] = uart_rxd ;
+assign uart_txd = io_out[2];
+assign io_in[1] = uart_rxd ;
uart_agent tb_uart(
.mclk (clock ),
diff --git a/verilog/dv/wb_port/Makefile b/verilog/dv/wb_port/Makefile
index c0cd3d8..aecb8cf 100644
--- a/verilog/dv/wb_port/Makefile
+++ b/verilog/dv/wb_port/Makefile
@@ -40,6 +40,7 @@
## Simulation mode: RTL/GL
SIM?=RTL
+DUMP?=OFF
.SUFFIXES:
@@ -53,12 +54,21 @@
%.vvp: %_tb.v %.hex
ifeq ($(SIM),RTL)
+ ifeq ($(DUMP),OFF)
iverilog -g2005-sv -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
-I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
-I $(UPRJ_INCLUDE_PATH4) \
$< -o $@
+ else
+ iverilog -g2005-sv -DWFDUMP -DFUNCTIONAL -DSIM -I $(PDK_PATH) \
+ -I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
+ -I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(UPRJ_VERILOG_PATH) \
+ -I $(UPRJ_INCLUDE_PATH1) -I $(UPRJ_INCLUDE_PATH2) -I $(UPRJ_INCLUDE_PATH3) \
+ -I $(UPRJ_INCLUDE_PATH4) \
+ $< -o $@
+ endif
else
iverilog -g2005-sv -DFUNCTIONAL -DSIM -DGL -I $(PDK_PATH) \
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(CARAVEL_VERILOG_PATH) \
diff --git a/verilog/dv/wb_port/wb_port.c b/verilog/dv/wb_port/wb_port.c
index 9292946..28c72cd 100644
--- a/verilog/dv/wb_port/wb_port.c
+++ b/verilog/dv/wb_port/wb_port.c
@@ -23,22 +23,34 @@
#define reg_mprj_slave (*(volatile uint32_t*)0x30000000)
#define reg_mprj_wbhost_reg0 (*(volatile uint32_t*)0x30800000)
-#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30000000)
-#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30000004)
-#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30000008)
-#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3000000C)
-#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30000010)
-#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30000014)
-#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30000018)
-#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3000001C)
-#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30000020)
-#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30000024)
-#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30000028)
-#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3000002C)
-#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30000030)
-#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30000034)
-#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30000038)
-#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3000003C)
+#define reg_mprj_globl_reg0 (*(volatile uint32_t*)0x30030000)
+#define reg_mprj_globl_reg1 (*(volatile uint32_t*)0x30030004)
+#define reg_mprj_globl_reg2 (*(volatile uint32_t*)0x30030008)
+#define reg_mprj_globl_reg3 (*(volatile uint32_t*)0x3003000C)
+#define reg_mprj_globl_reg4 (*(volatile uint32_t*)0x30030010)
+#define reg_mprj_globl_reg5 (*(volatile uint32_t*)0x30030014)
+#define reg_mprj_globl_reg6 (*(volatile uint32_t*)0x30030018)
+#define reg_mprj_globl_reg7 (*(volatile uint32_t*)0x3003001C)
+#define reg_mprj_globl_reg8 (*(volatile uint32_t*)0x30030020)
+#define reg_mprj_globl_reg9 (*(volatile uint32_t*)0x30030024)
+#define reg_mprj_globl_reg10 (*(volatile uint32_t*)0x30030028)
+#define reg_mprj_globl_reg11 (*(volatile uint32_t*)0x3003002C)
+#define reg_mprj_globl_reg12 (*(volatile uint32_t*)0x30030030)
+#define reg_mprj_globl_reg13 (*(volatile uint32_t*)0x30030034)
+#define reg_mprj_globl_reg14 (*(volatile uint32_t*)0x30030038)
+#define reg_mprj_globl_reg15 (*(volatile uint32_t*)0x3003003C)
+#define reg_mprj_globl_reg16 (*(volatile uint32_t*)0x30030040)
+#define reg_mprj_globl_reg17 (*(volatile uint32_t*)0x30030044)
+#define reg_mprj_globl_reg18 (*(volatile uint32_t*)0x30030048)
+#define reg_mprj_globl_reg19 (*(volatile uint32_t*)0x3003004C)
+#define reg_mprj_globl_reg20 (*(volatile uint32_t*)0x30030050)
+#define reg_mprj_globl_reg21 (*(volatile uint32_t*)0x30030054)
+#define reg_mprj_globl_reg22 (*(volatile uint32_t*)0x30030058)
+#define reg_mprj_globl_reg23 (*(volatile uint32_t*)0x3003005C)
+#define reg_mprj_globl_reg24 (*(volatile uint32_t*)0x30030060)
+#define reg_mprj_globl_reg25 (*(volatile uint32_t*)0x30030064)
+#define reg_mprj_globl_reg26 (*(volatile uint32_t*)0x30030068)
+#define reg_mprj_globl_reg27 (*(volatile uint32_t*)0x3003006C)
/*
@@ -106,41 +118,30 @@
// Remove Wishbone Reset
reg_mprj_wbhost_reg0 = 0x1;
+ if (reg_mprj_globl_reg0 != 0x89490201) bFail = 1;
if (reg_mprj_globl_reg1 != 0xA55AA55A) bFail = 1;
- if (reg_mprj_globl_reg2 != 0xAABBCCDD) bFail = 1;
// Write software Write & Read Register
- reg_mprj_globl_reg6 = 0x11223344;
- reg_mprj_globl_reg7 = 0x22334455;
- reg_mprj_globl_reg8 = 0x33445566;
- reg_mprj_globl_reg9 = 0x44556677;
- reg_mprj_globl_reg10 = 0x55667788;
- reg_mprj_globl_reg11 = 0x66778899;
- reg_mprj_globl_reg12 = 0x778899AA;
- reg_mprj_globl_reg13 = 0x8899AABB;
- reg_mprj_globl_reg14 = 0x99AABBCC;
- reg_mprj_globl_reg15 = 0xAABBCCDD;
+ reg_mprj_globl_reg22 = 0x11223344;
+ reg_mprj_globl_reg23 = 0x22334455;
+ reg_mprj_globl_reg24 = 0x33445566;
+ reg_mprj_globl_reg25 = 0x44556677;
+ reg_mprj_globl_reg26 = 0x55667788;
+ reg_mprj_globl_reg27 = 0x66778899;
- if (reg_mprj_globl_reg6 != 0x11223344) bFail = 1;
+ if (reg_mprj_globl_reg22 != 0x11223344) bFail = 1;
if (bFail == 1) reg_mprj_datal = 0xAB610000;
- if (reg_mprj_globl_reg7 != 0x22334455) bFail = 1;
+ if (reg_mprj_globl_reg23 != 0x22334455) bFail = 1;
if (bFail == 1) reg_mprj_datal = 0xAB620000;
- if (reg_mprj_globl_reg8 != 0x33445566) bFail = 1;
+ if (reg_mprj_globl_reg24 != 0x33445566) bFail = 1;
if (bFail == 1) reg_mprj_datal = 0xAB630000;
- if (reg_mprj_globl_reg9 != 0x44556677) bFail = 1;
+ if (reg_mprj_globl_reg25 != 0x44556677) bFail = 1;
if (bFail == 1) reg_mprj_datal = 0xAB640000;
- if (reg_mprj_globl_reg10 != 0x55667788) bFail = 1;
+ if (reg_mprj_globl_reg26 != 0x55667788) bFail = 1;
if (bFail == 1) reg_mprj_datal = 0xAB650000;
- if (reg_mprj_globl_reg11 != 0x66778899) bFail = 1;
+ if (reg_mprj_globl_reg27 != 0x66778899) bFail = 1;
if (bFail == 1) reg_mprj_datal = 0xAB660000;
- if (reg_mprj_globl_reg12 != 0x778899AA) bFail = 1;
- if (bFail == 1) reg_mprj_datal = 0xAB670000;
- if (reg_mprj_globl_reg13 != 0x8899AABB) bFail = 1;
- if (bFail == 1) reg_mprj_datal = 0xAB680000;
- if (reg_mprj_globl_reg14 != 0x99AABBCC) bFail = 1;
- if (bFail == 1) reg_mprj_datal = 0xAB690000;
- if (reg_mprj_globl_reg15 != 0xAABBCCDD) bFail = 1;
if(bFail == 0) {
reg_mprj_datal = 0xAB6A0000;
diff --git a/verilog/dv/wb_port/wb_port_tb.v b/verilog/dv/wb_port/wb_port_tb.v
index aaef0a1..e0d9f40 100644
--- a/verilog/dv/wb_port/wb_port_tb.v
+++ b/verilog/dv/wb_port/wb_port_tb.v
@@ -54,6 +54,7 @@
$dumpvars(2, wb_port_tb.uut);
//$dumpvars(1, wb_port_tb.uut.mprj);
$dumpvars(1, wb_port_tb.uut.mprj.u_wb_host);
+ $dumpvars(2, wb_port_tb.uut.mprj.u_pinmux);
end
`endif
diff --git a/verilog/rtl/pinmux/src/pinmux.sv b/verilog/rtl/pinmux/src/pinmux.sv
index 2b284be..031f1c8 100755
--- a/verilog/rtl/pinmux/src/pinmux.sv
+++ b/verilog/rtl/pinmux/src/pinmux.sv
@@ -29,14 +29,14 @@
// SFLASH I/F
input logic sflash_sck,
input logic sflash_ss,
- input logic sflash_oen,
+ input logic [3:0] sflash_oen,
input logic [3:0] sflash_do,
output logic [3:0] sflash_di,
// SSRAM I/F
input logic ssram_sck,
input logic ssram_ss,
- input logic ssram_oen,
+ input logic [3:0] ssram_oen,
input logic [3:0] ssram_do,
output logic [3:0] ssram_di,
@@ -75,7 +75,6 @@
/* clock pulse */
//********************************************************
logic pulse1u_mclk ;// 1 UsSecond Pulse for waveform Generator
-logic pulse1m_mclk ;// 1MilliSecond Pulse for waveform Generator
logic pulse1s_mclk ;// 1Second Pulse for waveform Generator
logic [9:0] cfg_pulse_1us ;// 1us pulse generation config
@@ -344,14 +343,12 @@
* sflash_io1 digital_io[27]
* sflash_io2 digital_io[28]
* sflash_io3 digital_io[29]
-*
* ssram_sck digital_io[30]
* ssram_ss digital_io[31]
* ssram_io0 digital_io[32]
* ssram_io1 digital_io[33]
* ssram_io2 digital_io[34]
* ssram_io3 digital_io[35]
-*
* usb_dp digital_io[36]
* usb_dn digital_io[37]
****************************************************************
@@ -671,18 +668,18 @@
// Serial Flash
digital_io_oen[24] = 1'b0 ;
digital_io_oen[25] = 1'b0 ;
- digital_io_oen[26] = sflash_oen;
- digital_io_oen[27] = sflash_oen;
- digital_io_oen[28] = sflash_oen;
- digital_io_oen[29] = sflash_oen;
+ digital_io_oen[26] = sflash_oen[0];
+ digital_io_oen[27] = sflash_oen[1];
+ digital_io_oen[28] = sflash_oen[2];
+ digital_io_oen[29] = sflash_oen[3];
// Serail SRAM
digital_io_oen[30] = 1'b0 ;
digital_io_oen[31] = 1'b0 ;
- digital_io_oen[32] = ssram_oen;
- digital_io_oen[33] = ssram_oen;
- digital_io_oen[34] = ssram_oen;
- digital_io_oen[35] = ssram_oen;
+ digital_io_oen[32] = ssram_oen[0];
+ digital_io_oen[33] = ssram_oen[1];
+ digital_io_oen[34] = ssram_oen[2];
+ digital_io_oen[35] = ssram_oen[3];
// USB 1.1
digital_io_oen[36] = usb_oen;
diff --git a/verilog/rtl/pinmux/src/pinmux_reg.sv b/verilog/rtl/pinmux/src/pinmux_reg.sv
index eba780d..aea729f 100644
--- a/verilog/rtl/pinmux/src/pinmux_reg.sv
+++ b/verilog/rtl/pinmux/src/pinmux_reg.sv
@@ -100,6 +100,12 @@
reg [31:0] reg_19; // PWN-3 Config
reg [31:0] reg_20; // PWN-4 Config
reg [31:0] reg_21; // PWN-5 Config
+reg [31:0] reg_22; // Software-Reg1
+reg [31:0] reg_23; // Software-Reg2
+reg [31:0] reg_24; // Software-Reg3
+reg [31:0] reg_25; // Software-Reg4
+reg [31:0] reg_26; // Software-Reg5
+reg [31:0] reg_27; // Software-Reg6
reg cs_int;
@@ -157,50 +163,34 @@
// register read enable and write enable decoding logic
//-----------------------------------------------------------------------
wire sw_wr_en_0 = sw_wr_en & (sw_addr == 5'h0);
-wire sw_rd_en_0 = sw_rd_en & (sw_addr == 5'h0);
wire sw_wr_en_1 = sw_wr_en & (sw_addr == 5'h1);
-wire sw_rd_en_1 = sw_rd_en & (sw_addr == 5'h1);
wire sw_wr_en_2 = sw_wr_en & (sw_addr == 5'h2);
-wire sw_rd_en_2 = sw_rd_en & (sw_addr == 5'h2);
wire sw_wr_en_3 = sw_wr_en & (sw_addr == 5'h3);
-wire sw_rd_en_3 = sw_rd_en & (sw_addr == 5'h3);
wire sw_wr_en_4 = sw_wr_en & (sw_addr == 5'h4);
-wire sw_rd_en_4 = sw_rd_en & (sw_addr == 5'h4);
wire sw_wr_en_5 = sw_wr_en & (sw_addr == 5'h5);
-wire sw_rd_en_5 = sw_rd_en & (sw_addr == 5'h5);
wire sw_wr_en_6 = sw_wr_en & (sw_addr == 5'h6);
-wire sw_rd_en_6 = sw_rd_en & (sw_addr == 5'h6);
wire sw_wr_en_7 = sw_wr_en & (sw_addr == 5'h7);
-wire sw_rd_en_7 = sw_rd_en & (sw_addr == 5'h7);
wire sw_wr_en_8 = sw_wr_en & (sw_addr == 5'h8);
-wire sw_rd_en_8 = sw_rd_en & (sw_addr == 5'h8);
wire sw_wr_en_9 = sw_wr_en & (sw_addr == 5'h9);
-wire sw_rd_en_9 = sw_rd_en & (sw_addr == 5'h9);
wire sw_wr_en_10 = sw_wr_en & (sw_addr == 5'hA);
-wire sw_rd_en_10 = sw_rd_en & (sw_addr == 5'hA);
wire sw_wr_en_11 = sw_wr_en & (sw_addr == 5'hB);
-wire sw_rd_en_11 = sw_rd_en & (sw_addr == 5'hB);
wire sw_wr_en_12 = sw_wr_en & (sw_addr == 5'hC);
-wire sw_rd_en_12 = sw_rd_en & (sw_addr == 5'hC);
wire sw_wr_en_13 = sw_wr_en & (sw_addr == 5'hD);
-wire sw_rd_en_13 = sw_rd_en & (sw_addr == 5'hD);
wire sw_wr_en_14 = sw_wr_en & (sw_addr == 5'hE);
-wire sw_rd_en_14 = sw_rd_en & (sw_addr == 5'hE);
wire sw_wr_en_15 = sw_wr_en & (sw_addr == 5'hF);
-wire sw_rd_en_15 = sw_rd_en & (sw_addr == 5'hF);
wire sw_wr_en_16 = sw_wr_en & (sw_addr == 5'h10);
-wire sw_rd_en_16 = sw_rd_en & (sw_addr == 5'h10);
wire sw_wr_en_17 = sw_wr_en & (sw_addr == 5'h11);
-wire sw_rd_en_17 = sw_rd_en & (sw_addr == 5'h11);
wire sw_wr_en_18 = sw_wr_en & (sw_addr == 5'h12);
-wire sw_rd_en_18 = sw_rd_en & (sw_addr == 5'h12);
wire sw_wr_en_19 = sw_wr_en & (sw_addr == 5'h13);
-wire sw_rd_en_19 = sw_rd_en & (sw_addr == 5'h13);
wire sw_wr_en_20 = sw_wr_en & (sw_addr == 5'h14);
-wire sw_rd_en_20 = sw_rd_en & (sw_addr == 5'h14);
wire sw_wr_en_21 = sw_wr_en & (sw_addr == 5'h15);
-wire sw_rd_en_21 = sw_rd_en & (sw_addr == 5'h15);
+wire sw_wr_en_22 = sw_wr_en & (sw_addr == 5'h16);
+wire sw_wr_en_23 = sw_wr_en & (sw_addr == 5'h17);
+wire sw_wr_en_24 = sw_wr_en & (sw_addr == 5'h18);
+wire sw_wr_en_25 = sw_wr_en & (sw_addr == 5'h19);
+wire sw_wr_en_26 = sw_wr_en & (sw_addr == 5'h1A);
+wire sw_wr_en_27 = sw_wr_en & (sw_addr == 5'h1B);
//-----------------------------------------------------------------------
@@ -626,6 +616,95 @@
);
+//-----------------------------------------
+// Software Reg-1
+// ----------------------------------------
+gen_32b_reg #(32'h0) u_reg_22 (
+ //List of Inputs
+ .reset_n (h_reset_n ),
+ .clk (mclk ),
+ .cs (sw_wr_en_22 ),
+ .we (wr_be ),
+ .data_in (sw_reg_wdata ),
+
+ //List of Outs
+ .data_out (reg_22 )
+ );
+
+//-----------------------------------------
+// Software Reg-2
+// ----------------------------------------
+gen_32b_reg #(32'h0) u_reg_23 (
+ //List of Inputs
+ .reset_n (h_reset_n ),
+ .clk (mclk ),
+ .cs (sw_wr_en_23 ),
+ .we (wr_be ),
+ .data_in (sw_reg_wdata ),
+
+ //List of Outs
+ .data_out (reg_23 )
+ );
+
+//-----------------------------------------
+// Software Reg-3
+// ----------------------------------------
+gen_32b_reg #(32'h0) u_reg_24 (
+ //List of Inputs
+ .reset_n (h_reset_n ),
+ .clk (mclk ),
+ .cs (sw_wr_en_24 ),
+ .we (wr_be ),
+ .data_in (sw_reg_wdata ),
+
+ //List of Outs
+ .data_out (reg_24 )
+ );
+
+//-----------------------------------------
+// Software Reg-4
+// ----------------------------------------
+gen_32b_reg #(32'h0) u_reg_25 (
+ //List of Inputs
+ .reset_n (h_reset_n ),
+ .clk (mclk ),
+ .cs (sw_wr_en_25 ),
+ .we (wr_be ),
+ .data_in (sw_reg_wdata ),
+
+ //List of Outs
+ .data_out (reg_25 )
+ );
+
+//-----------------------------------------
+// Software Reg-5
+// ----------------------------------------
+gen_32b_reg #(32'h0) u_reg_26 (
+ //List of Inputs
+ .reset_n (h_reset_n ),
+ .clk (mclk ),
+ .cs (sw_wr_en_26 ),
+ .we (wr_be ),
+ .data_in (sw_reg_wdata ),
+
+ //List of Outs
+ .data_out (reg_26 )
+ );
+
+//-----------------------------------------
+// Software Reg-6
+// ----------------------------------------
+gen_32b_reg #(32'h0) u_reg_27 (
+ //List of Inputs
+ .reset_n (h_reset_n ),
+ .clk (mclk ),
+ .cs (sw_wr_en_27 ),
+ .we (wr_be ),
+ .data_in (sw_reg_wdata ),
+
+ //List of Outs
+ .data_out (reg_27 )
+ );
//-----------------------------------------------------------------------
// Register Read Path Multiplexer instantiation
@@ -653,11 +732,17 @@
5'b01110 : reg_out [31:0] = reg_14 [31:0];
5'b01111 : reg_out [31:0] = reg_15 [31:0];
5'b10000 : reg_out [31:0] = reg_16 [31:0];
- 5'b10010 : reg_out [31:0] = reg_17 [31:0];
- 5'b10011 : reg_out [31:0] = reg_18 [31:0];
- 5'b10100 : reg_out [31:0] = reg_19 [31:0];
- 5'b10101 : reg_out [31:0] = reg_20 [31:0];
- 5'b10110 : reg_out [31:0] = reg_21 [31:0];
+ 5'b10001 : reg_out [31:0] = reg_17 [31:0];
+ 5'b10010 : reg_out [31:0] = reg_18 [31:0];
+ 5'b10011 : reg_out [31:0] = reg_19 [31:0];
+ 5'b10100 : reg_out [31:0] = reg_20 [31:0];
+ 5'b10101 : reg_out [31:0] = reg_21 [31:0];
+ 5'b10110 : reg_out [31:0] = reg_22 [31:0];
+ 5'b10111 : reg_out [31:0] = reg_23 [31:0];
+ 5'b11000 : reg_out [31:0] = reg_24 [31:0];
+ 5'b11001 : reg_out [31:0] = reg_25 [31:0];
+ 5'b11010 : reg_out [31:0] = reg_26 [31:0];
+ 5'b11011 : reg_out [31:0] = reg_27 [31:0];
default : reg_out [31:0] = 32'h0;
endcase
end
diff --git a/verilog/rtl/sar_adc/sar_adc.sv b/verilog/rtl/sar_adc/sar_adc.sv
index 6514e98..45b7dbd 100644
--- a/verilog/rtl/sar_adc/sar_adc.sv
+++ b/verilog/rtl/sar_adc/sar_adc.sv
@@ -27,7 +27,7 @@
input logic analog_dac_out, // DAC analog o/p for compare
// ACMP (HD) Ports
- input logic analog_din // (Analog)
+ input logic [5:0] analog_din // (Analog)
);
diff --git a/verilog/rtl/spi_master/src/spim_top.sv b/verilog/rtl/spi_master/src/spim_top.sv
index 02aacc7..e8b6320 100644
--- a/verilog/rtl/spi_master/src/spim_top.sv
+++ b/verilog/rtl/spi_master/src/spim_top.sv
@@ -121,7 +121,7 @@
output logic spi_clk,
output logic spi_csn0,// No hold fix for CS#, as it asserted much eariler than SPI clock
output logic [3:0] spi_sdo,
- output logic spi_oen
+ output logic [3:0] spi_oen
);
@@ -209,16 +209,10 @@
// SPI Interface moved inside to support carvel IO pad
// -------------------------------------------------------
-logic spi_clk;
-logic spi_csn0;
logic spi_csn1;
logic spi_csn2;
logic spi_csn3;
logic [1:0] spi_mode;
-logic spi_sdo0;
-logic spi_sdo1;
-logic spi_sdo2;
-logic spi_sdo3;
logic spi_en_tx;
logic spi_init_done;
logic [3:0] spi_sdo_int;
@@ -233,22 +227,26 @@
// ADDing Delay cells for Interface hold fix
sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio0 (.X(spi_sdo0_d1),.A(spi_sdo_int[0]));
sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio0 (.X(spi_sdo0_d2),.A(spi_sdo0_d1));
-sky130_fd_sc_hd__clkbuf_16 u_buf_sdio0 (.X(spi_sdo0),.A(spi_sdo0_d2));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio0 (.X(spi_sdo[0]),.A(spi_sdo0_d2));
sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio1 (.X(spi_sdo1_d1),.A(spi_sdo_int[1]));
sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio1 (.X(spi_sdo1_d2),.A(spi_sdo1_d1));
-sky130_fd_sc_hd__clkbuf_16 u_buf_sdio1 (.X(spi_sdo1),.A(spi_sdo1_d2));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio1 (.X(spi_sdo[1]),.A(spi_sdo1_d2));
sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio2 (.X(spi_sdo2_d1),.A(spi_sdo_int[2]));
sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio2 (.X(spi_sdo2_d2),.A(spi_sdo2_d1));
-sky130_fd_sc_hd__clkbuf_16 u_buf_sdio2 (.X(spi_sdo2),.A(spi_sdo2_d2));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio2 (.X(spi_sdo[2]),.A(spi_sdo2_d2));
sky130_fd_sc_hd__dlygate4sd3_1 u_delay1_sdio3 (.X(spi_sdo3_d1),.A(spi_sdo_int[3]));
sky130_fd_sc_hd__dlygate4sd3_1 u_delay2_sdio3 (.X(spi_sdo3_d2),.A(spi_sdo3_d1));
-sky130_fd_sc_hd__clkbuf_16 u_buf_sdio3 (.X(spi_sdo3),.A(spi_sdo3_d2));
+sky130_fd_sc_hd__clkbuf_16 u_buf_sdio3 (.X(spi_sdo[3]),.A(spi_sdo3_d2));
-assign spi_oen = !spi_en_tx;
+assign #1 spi_oen[0] = !spi_en_tx; // SPI_DIO0
+assign #1 spi_oen[1] = !spi_en_tx; // SPI_DIO1
+assign #1 spi_oen[2] = (spi_mode == 0) ? 1 'b0 : !spi_en_tx; // HOLD
+assign #1 spi_oen[3] = (spi_mode == 0) ? 1 'b0 : !spi_en_tx; //
+
spim_if #( .WB_WIDTH(WB_WIDTH)) u_wb_if(
.mclk (mclk ),
diff --git a/verilog/rtl/sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v b/verilog/rtl/sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v
new file mode 100644
index 0000000..289a770
--- /dev/null
+++ b/verilog/rtl/sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v
@@ -0,0 +1,114 @@
+// OpenRAM SRAM model
+// Words: 512
+// Word size: 32
+// Write size: 8
+
+module sky130_sram_2kbyte_1rw1r_32x512_8(
+`ifdef USE_POWER_PINS
+ vccd1,
+ vssd1,
+`endif
+// Port 0: RW
+ clk0,csb0,web0,wmask0,addr0,din0,dout0,
+// Port 1: R
+ clk1,csb1,addr1,dout1
+ );
+
+ parameter NUM_WMASKS = 4 ;
+ parameter DATA_WIDTH = 32 ;
+ parameter ADDR_WIDTH = 9 ;
+ parameter RAM_DEPTH = 1 << ADDR_WIDTH;
+ // FIXME: This delay is arbitrary.
+ parameter DELAY = 3 ;
+ parameter VERBOSE = 0 ; //Set to 0 to only display warnings
+ parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary
+
+`ifdef USE_POWER_PINS
+ inout vccd1;
+ inout vssd1;
+`endif
+ input clk0; // clock
+ input csb0; // active low chip select
+ input web0; // active low write control
+ input [NUM_WMASKS-1:0] wmask0; // write mask
+ input [ADDR_WIDTH-1:0] addr0;
+ input [DATA_WIDTH-1:0] din0;
+ output [DATA_WIDTH-1:0] dout0;
+ input clk1; // clock
+ input csb1; // active low chip select
+ input [ADDR_WIDTH-1:0] addr1;
+ output [DATA_WIDTH-1:0] dout1;
+
+ reg csb0_reg;
+ reg web0_reg;
+ reg [NUM_WMASKS-1:0] wmask0_reg;
+ reg [ADDR_WIDTH-1:0] addr0_reg;
+ reg [DATA_WIDTH-1:0] din0_reg;
+ reg [DATA_WIDTH-1:0] dout0;
+
+ // All inputs are registers
+ always @(posedge clk0)
+ begin
+ csb0_reg = csb0;
+ web0_reg = web0;
+ wmask0_reg = wmask0;
+ addr0_reg = addr0;
+ din0_reg = din0;
+ #(T_HOLD) dout0 = 32'bx;
+ if ( !csb0_reg && web0_reg && VERBOSE )
+ $display($time," Reading %m addr0=%b dout0=%b",addr0_reg,mem[addr0_reg]);
+ if ( !csb0_reg && !web0_reg && VERBOSE )
+ $display($time," Writing %m addr0=%b din0=%b wmask0=%b",addr0_reg,din0_reg,wmask0_reg);
+ end
+
+ reg csb1_reg;
+ reg [ADDR_WIDTH-1:0] addr1_reg;
+ reg [DATA_WIDTH-1:0] dout1;
+
+ // All inputs are registers
+ always @(posedge clk1)
+ begin
+ csb1_reg = csb1;
+ addr1_reg = addr1;
+ if (!csb0 && !web0 && !csb1 && (addr0 == addr1))
+ $display($time," WARNING: Writing and reading addr0=%b and addr1=%b simultaneously!",addr0,addr1);
+ #(T_HOLD) dout1 = 32'bx;
+ if ( !csb1_reg && VERBOSE )
+ $display($time," Reading %m addr1=%b dout1=%b",addr1_reg,mem[addr1_reg]);
+ end
+
+reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1];
+
+ // Memory Write Block Port 0
+ // Write Operation : When web0 = 0, csb0 = 0
+ always @ (negedge clk0)
+ begin : MEM_WRITE0
+ if ( !csb0_reg && !web0_reg ) begin
+ if (wmask0_reg[0])
+ mem[addr0_reg][7:0] = din0_reg[7:0];
+ if (wmask0_reg[1])
+ mem[addr0_reg][15:8] = din0_reg[15:8];
+ if (wmask0_reg[2])
+ mem[addr0_reg][23:16] = din0_reg[23:16];
+ if (wmask0_reg[3])
+ mem[addr0_reg][31:24] = din0_reg[31:24];
+ end
+ end
+
+ // Memory Read Block Port 0
+ // Read Operation : When web0 = 1, csb0 = 0
+ always @ (negedge clk0)
+ begin : MEM_READ0
+ if (!csb0_reg && web0_reg)
+ dout0 <= #(DELAY) mem[addr0_reg];
+ end
+
+ // Memory Read Block Port 1
+ // Read Operation : When web1 = 1, csb1 = 0
+ always @ (negedge clk1)
+ begin : MEM_READ1
+ if (!csb1_reg)
+ dout1 <= #(DELAY) mem[addr1_reg];
+ end
+
+endmodule
diff --git a/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld b/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
index cb87b13..c49465e 100644
--- a/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
+++ b/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
@@ -27,10 +27,10 @@
MEMORY {
ROM (rxx) : ORIGIN = 0x0, LENGTH = 64K
- RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
+ TCM (rwx) : ORIGIN = 0x00480000, LENGTH = 2K
}
-STACK_SIZE = 1024;
+STACK_SIZE = 256;
CL_SIZE = 32;
@@ -59,7 +59,8 @@
*(sc_test_section)
. = ALIGN(CL_SIZE);
PROVIDE(__TEXT_END__ = .);
- } >ROM
+ } >TCM AT>ROM
+
.rodata ALIGN(CL_SIZE) : {
__global_pointer$ = . + 0x800;
@@ -67,7 +68,7 @@
. = ALIGN(CL_SIZE);
LONG(0x13);
. = ALIGN(CL_SIZE);
- } >ROM
+ } >TCM AT>ROM
/* data segment */
@@ -75,14 +76,13 @@
PROVIDE(__DATA_START__ = .);
*(.data .data.*)
. = ALIGN(CL_SIZE);
- }>RAM
-
+ } >TCM
.sdata ALIGN(CL_SIZE) : {
*(.sdata .sdata.* .gnu.linkonce.s.*)
. = ALIGN(CL_SIZE);
PROVIDE(__DATA_END__ = .);
- } >RAM
+ } >TCM
/* thread-local data segment */
.tdata ALIGN(CL_SIZE) : {
@@ -91,14 +91,14 @@
*(.tdata .tdata.*)
PROVIDE(_tdata_end = .);
. = ALIGN(CL_SIZE);
- } >RAM
+ } >TCM
.tbss ALIGN(CL_SIZE) : {
PROVIDE(_tbss_begin = .);
*(.tbss .tbss.*)
. = ALIGN(CL_SIZE);
PROVIDE(_tbss_end = .);
- } >RAM
+ } >TCM
/* bss segment */
.sbss ALIGN(CL_SIZE) : {
@@ -106,25 +106,25 @@
*(.sbss .sbss.* .gnu.linkonce.sb.*)
*(.scommon)
. = ALIGN(CL_SIZE);
- } >RAM
+ } >TCM
.bss ALIGN(CL_SIZE) : {
*(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON)
. = ALIGN(CL_SIZE);
PROVIDE(__BSS_END__ = .);
- } >RAM
+ } >TCM
_end = .;
PROVIDE(__end = .);
/* End of uninitalized data segement */
- .stack ORIGIN(RAM) + LENGTH(RAM) - STACK_SIZE : {
+ .stack ORIGIN(TCM) + LENGTH(TCM) - STACK_SIZE : {
PROVIDE(__STACK_START__ = .);
. += STACK_SIZE;
PROVIDE(__C_STACK_TOP__ = .);
PROVIDE(__STACK_END__ = .);
- } >RAM
+ } >TCM
/DISCARD/ : {
*(.eh_frame .eh_frame.*)
diff --git a/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_description.svh b/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_description.svh
index c00ffe3..2810776 100644
--- a/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_description.svh
+++ b/verilog/rtl/syntacore/scr1/src/includes/scr1_arch_description.svh
@@ -98,7 +98,7 @@
// `define SCR1_TDU_ICOUNT_EN // enable hardware triggers on instruction counter
`define SCR1_IPIC_EN // enable Integrated Programmable Interrupt Controller
`define SCR1_IPIC_SYNC_EN // enable IPIC synchronizer
-// `define SCR1_TCM_EN
+ `define SCR1_TCM_EN
`define SCR1_NEW_PC_REG // enable register in IFU for New_PC value
`define SCRC1_MPRF_STAGE // enabled register at Read path of MPRF
`elsif SCR1_CFG_RV32IC_BASE
diff --git a/verilog/rtl/syntacore/scr1/src/top/scr1_intf.sv b/verilog/rtl/syntacore/scr1/src/top/scr1_intf.sv
index b0efee3..dfe2904 100644
--- a/verilog/rtl/syntacore/scr1/src/top/scr1_intf.sv
+++ b/verilog/rtl/syntacore/scr1/src/top/scr1_intf.sv
@@ -85,6 +85,21 @@
input logic trst_n,
`endif // SCR1_DBG_EN
+`ifndef SCR1_TCM_MEM
+ // SRAM PORT-0
+ output logic sram_csb0,
+ output logic sram_web0,
+ output logic [8:0] sram_addr0,
+ output logic [3:0] sram_wmask0,
+ output logic [31:0] sram_din0,
+ input logic [31:0] sram_dout0,
+
+ // SRAM PORT-1
+ output logic sram_csb1,
+ output logic [8:0] sram_addr1,
+ input logic [31:0] sram_dout1,
+`endif
+
input logic wb_rst_n, // Wish bone reset
input logic wb_clk, // wish bone clock
// Instruction Memory Interface
@@ -269,6 +284,22 @@
.clk (core_clk ),
.rst_n (core_rst_n_local),
+`ifndef SCR1_TCM_MEM
+ // SRAM PORT-0
+ .sram_csb0 (sram_csb0),
+ .sram_web0 (sram_web0),
+ .sram_addr0 (sram_addr0),
+ .sram_wmask0 (sram_wmask0),
+ .sram_din0 (sram_din0),
+ .sram_dout0 (sram_dout0),
+
+ // SRAM PORT-0
+ .sram_csb1 (sram_csb1),
+ .sram_addr1 (sram_addr1),
+ .sram_dout1 (sram_dout1),
+`endif
+
+
// Instruction interface to TCM
.imem_req_ack (tcm_imem_req_ack),
.imem_req (tcm_imem_req ),
diff --git a/verilog/rtl/syntacore/scr1/src/top/scr1_tcm.sv b/verilog/rtl/syntacore/scr1/src/top/scr1_tcm.sv
index 5a5d61e..48e6930 100644
--- a/verilog/rtl/syntacore/scr1/src/top/scr1_tcm.sv
+++ b/verilog/rtl/syntacore/scr1/src/top/scr1_tcm.sv
@@ -32,6 +32,21 @@
input logic clk,
input logic rst_n,
+`ifndef SCR1_TCM_MEM
+ // SRAM PORT-0
+ output logic sram_csb0,
+ output logic sram_web0,
+ output logic [8:0] sram_addr0,
+ output logic [3:0] sram_wmask0,
+ output logic [31:0] sram_din0,
+ input logic [31:0] sram_dout0,
+
+ // SRAM PORT-1
+ output logic sram_csb1,
+ output logic [8:0] sram_addr1,
+ input logic [31:0] sram_dout1,
+`endif
+
// Core instruction interface
output logic imem_req_ack,
input logic imem_req,
@@ -89,10 +104,23 @@
//-------------------------------------------------------------------------------
// Memory data composing
//-------------------------------------------------------------------------------
-assign imem_rd = imem_req;
-assign dmem_rd = dmem_req & (dmem_cmd == SCR1_MEM_CMD_RD);
-assign dmem_wr = dmem_req & (dmem_cmd == SCR1_MEM_CMD_WR);
+`ifndef SCR1_TCM_MEM
+// connect the TCM memory to SRAM
+assign sram_csb1 =!imem_req;
+assign sram_addr1 = imem_addr[10:2];
+assign imem_rdata = sram_dout1;
+// SRAM Port 0 Control Generation
+assign sram_csb0 = !(dmem_req & ((dmem_cmd == SCR1_MEM_CMD_RD) | (dmem_cmd == SCR1_MEM_CMD_WR)));
+assign sram_web0 = !(dmem_req & (dmem_cmd == SCR1_MEM_CMD_WR));
+assign sram_addr0 = dmem_addr[10:2];
+assign sram_wmask0 = dmem_byteen;
+assign sram_din0 = dmem_writedata;
+assign dmem_rdata_local = sram_dout0;
+
+`endif
+
+//------------------------------
always_comb begin
dmem_writedata = dmem_wdata;
dmem_byteen = 4'b1111;
@@ -112,6 +140,7 @@
//-------------------------------------------------------------------------------
// Memory instantiation
//-------------------------------------------------------------------------------
+`ifdef SCR1_TCM_MEM
scr1_dp_memory #(
.SCR1_WIDTH ( 32 ),
.SCR1_SIZE ( SCR1_TCM_SIZE )
@@ -131,6 +160,8 @@
.qb ( dmem_rdata_local ),
.datab ( dmem_writedata )
);
+`endif
+
//-------------------------------------------------------------------------------
// Data memory output generation
//-------------------------------------------------------------------------------
diff --git a/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv b/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv
index adc8f86..5c5a927 100644
--- a/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv
+++ b/verilog/rtl/syntacore/scr1/src/top/scr1_top_wb.sv
@@ -129,6 +129,22 @@
output logic tdo_en,
`endif // SCR1_DBG_EN
+`ifndef SCR1_TCM_MEM
+ // SRAM PORT-0
+ output logic sram_csb0,
+ output logic sram_web0,
+ output logic [8:0] sram_addr0,
+ output logic [3:0] sram_wmask0,
+ output logic [31:0] sram_din0,
+ input logic [31:0] sram_dout0,
+
+ // SRAM PORT-1
+ output logic sram_csb1,
+ output logic [8:0] sram_addr1,
+ input logic [31:0] sram_dout1,
+`endif
+
+
input logic wb_rst_n, // Wish bone reset
input logic wb_clk, // wish bone clock
// Instruction Memory Interface
@@ -258,6 +274,21 @@
.trst_n (trst_n),
`endif // SCR1_DBG_EN
+`ifndef SCR1_TCM_MEM
+ // SRAM PORT-0
+ .sram_csb0 (sram_csb0),
+ .sram_web0 (sram_web0),
+ .sram_addr0 (sram_addr0),
+ .sram_wmask0 (sram_wmask0),
+ .sram_din0 (sram_din0),
+ .sram_dout0 (sram_dout0),
+
+ // SRAM PORT-0
+ .sram_csb1 (sram_csb1),
+ .sram_addr1 (sram_addr1),
+ .sram_dout1 (sram_dout1),
+`endif
+
.wb_rst_n (wb_rst_n), // Wish bone reset
.wb_clk (wb_clk), // wish bone clock
diff --git a/verilog/rtl/uart_i2c_usb/src/uart_i2c_usb.sv b/verilog/rtl/uart_i2c_usb/src/uart_i2c_usb.sv
index 69b31d4..a089bb0 100644
--- a/verilog/rtl/uart_i2c_usb/src/uart_i2c_usb.sv
+++ b/verilog/rtl/uart_i2c_usb/src/uart_i2c_usb.sv
@@ -77,12 +77,11 @@
input logic usb_rstn , // async reset
input logic app_clk ,
input logic usb_clk , // 48Mhz usb clock
- input logic [1:0] uart_i2c_usb_sel, // Uart Or I2C Or USB Interface Select
// Reg Bus Interface Signal
input logic reg_cs,
input logic reg_wr,
- input logic [3:0] reg_addr,
+ input logic [7:0] reg_addr,
input logic [31:0] reg_wdata,
input logic reg_be,
@@ -125,16 +124,16 @@
// --------------------------------------
logic [7:0] reg_uart_rdata;
logic [7:0] reg_i2c_rdata;
-logic [31:0] reg_usb_rdata;
+logic [31:0] reg_usb_rdata;
logic reg_uart_ack;
logic reg_i2c_ack;
logic reg_usb_ack;
-assign reg_rdata = (uart_i2c_usb_sel == `SEL_UART) ? {24'h0,reg_uart_rdata} :
- (uart_i2c_usb_sel == `SEL_I2C) ? {24'h0,reg_i2c_rdata} : reg_usb_rdata;
-assign reg_ack = (uart_i2c_usb_sel == `SEL_UART) ? reg_uart_ack :
- (uart_i2c_usb_sel == `SEL_I2C) ? reg_i2c_ack : reg_usb_ack;
+assign reg_rdata = (reg_addr[7:6] == `SEL_UART) ? {24'h0,reg_uart_rdata} :
+ (reg_addr[7:6] == `SEL_I2C) ? {24'h0,reg_i2c_rdata} : reg_usb_rdata;
+assign reg_ack = (reg_addr[7:6] == `SEL_UART) ? reg_uart_ack :
+ (reg_addr[7:6] == `SEL_I2C) ? reg_i2c_ack : reg_usb_ack;
uart_core u_uart_core (
@@ -144,7 +143,7 @@
// Reg Bus Interface Signal
.reg_cs (reg_cs ),
.reg_wr (reg_wr ),
- .reg_addr (reg_addr[3:0] ),
+ .reg_addr (reg_addr[5:2] ),
.reg_wdata (reg_wdata[7:0] ),
.reg_be (reg_be ),
@@ -162,7 +161,7 @@
.wb_clk_i (app_clk ), // master clock input
.sresetn (1'b1 ), // synchronous reset
.aresetn (i2c_rstn ), // asynchronous reset
- .wb_adr_i (reg_addr[2:0] ), // lower address bits
+ .wb_adr_i (reg_addr[4:2] ), // lower address bits
.wb_dat_i (reg_wdata[7:0] ), // databus input
.wb_dat_o (reg_i2c_rdata ), // databus output
.wb_we_i (reg_wr ), // write enable input
@@ -201,8 +200,7 @@
.wbm_rst_n (usb_rstn ), // Regular Reset signal
.wbm_clk_i (app_clk ), // System clock
.wbm_stb_i (reg_cs ), // strobe/request
- .wbm_adr_i ({reg_addr[3:0],
- 2'b0} ), // address
+ .wbm_adr_i (reg_addr[5:0]), // address
.wbm_we_i (reg_wr ), // write
.wbm_dat_i (reg_wdata ), // data output
.wbm_sel_i (reg_be ), // byte enable
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index 815677d..7610979 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -26,7 +26,6 @@
`include "libs.ref//sky130_fd_sc_hd/verilog/sky130_ef_sc_hd__fakediode_2.v"
`include "glbl_cfg.v"
- `include "sdram.v"
`include "spi_master.v"
`include "uart_i2cm.v"
`include "wb_interconnect.v"
@@ -42,6 +41,20 @@
`include "libs.ref/sky130_fd_sc_hvl/verilog/primitives.v"
`include "libs.ref/sky130_fd_sc_hvl/verilog/sky130_fd_sc_hvl.v"
+ `include"sar_adc/SAR.sv"
+ `include"sar_adc/ACMP.sv"
+ `include"sar_adc/sar_adc.sv"
+ `include"sar_adc/adc_reg.sv"
+ `include"sar_adc/DAC_8BIT.v"
+
+
+ `include "sram_macros/sky130_sram_2kbyte_1rw1r_32x512_8.v"
+ `include "pinmux/src/pinmux.sv"
+ `include "pinmux/src/pinmux_reg.sv"
+ `include "pinmux/src/gpio_intr.sv"
+ `include "pinmux/src/pwm.sv"
+ `include "lib/pulse_gen_type1.sv"
+ `include "lib/pulse_gen_type2.sv"
`include "spi_master/src/spim_top.sv"
`include "spi_master/src/spim_if.sv"
@@ -76,16 +89,7 @@
`include "uart_i2c_usb/src/uart_i2c_usb.sv"
- `include "sdram_ctrl/src/top/sdrc_top.v"
- `include "sdram_ctrl/src/wb2sdrc/wb2sdrc.v"
`include "lib/async_fifo.sv"
- `include "sdram_ctrl/src/core/sdrc_core.v"
- `include "sdram_ctrl/src/core/sdrc_bank_ctl.v"
- `include "sdram_ctrl/src/core/sdrc_bank_fsm.v"
- `include "sdram_ctrl/src/core/sdrc_bs_convert.v"
- `include "sdram_ctrl/src/core/sdrc_req_gen.v"
- `include "sdram_ctrl/src/core/sdrc_xfr_ctl.v"
-
`include "lib/registers.v"
`include "lib/clk_ctl.v"
`include "digital_core/src/glbl_cfg.sv"
@@ -122,6 +126,7 @@
`include "syntacore/scr1/src/core/scr1_dmi.sv"
`include "syntacore/scr1/src/core/scr1_scu.sv"
+ `include "syntacore/scr1/src/top/scr1_imem_router.sv"
`include "syntacore/scr1/src/top/scr1_dmem_router.sv"
`include "syntacore/scr1/src/top/scr1_dp_memory.sv"
`include "syntacore/scr1/src/top/scr1_tcm.sv"
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index d5afe73..66d3db2 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -104,6 +104,8 @@
//// 2. Removed the SDRAM controlled ////
//// 3. Added PinMux ////
//// 4. Added SAR ADC for 6 channel ////
+//// 1.3 - 30th Sept 2021, Dinesh.A ////
+//// 2KB SRAM Interface added to RISC Core ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
@@ -327,7 +329,7 @@
// SFLASH I/F
wire sflash_sck ;
wire sflash_ss ;
-wire sflash_oen ;
+wire [3:0] sflash_oen ;
wire [3:0] sflash_do ;
wire [3:0] sflash_di ;
@@ -367,6 +369,23 @@
wire analog_dac_out ;
wire pulse1m_mclk ;
wire h_reset_n ;
+
+`ifndef SCR1_TCM_MEM
+// SRAM PORT-0 - DMEM I/F
+wire sram_csb0 ; // CS#
+wire sram_web0 ; // WE#
+wire [8:0] sram_addr0 ; // Address
+wire [3:0] sram_wmask0 ; // WMASK#
+wire [31:0] sram_din0 ; // Write Data
+wire [31:0] sram_dout0 ; // Read Data
+
+// SRAM PORT-1, IMEM I/F
+wire sram_csb1 ; // CS#
+wire [8:0] sram_addr1 ; // Address
+wire [31:0] sram_dout1 ; // Read Data
+`endif
+
+
/////////////////////////////////////////////////////////
// Clock Skew Ctrl
////////////////////////////////////////////////////////
@@ -469,6 +488,20 @@
// .test_mode (1'b0 ), // Moved inside IP
// .test_rst_n (1'b1 ), // Moved inside IP
+`ifndef SCR1_TCM_MEM
+ // SRAM PORT-0
+ .sram_csb0 (sram_csb0 ),
+ .sram_web0 (sram_web0 ),
+ .sram_addr0 (sram_addr0 ),
+ .sram_wmask0 (sram_wmask0 ),
+ .sram_din0 (sram_din0 ),
+ .sram_dout0 (sram_dout0 ),
+
+ // SRAM PORT-0
+ .sram_csb1 (sram_csb1 ),
+ .sram_addr1 (sram_addr1 ),
+ .sram_dout1 (sram_dout1 ),
+`endif
.wb_rst_n (wbd_int_rst_n ),
.wb_clk (wbd_clk_int ),
@@ -493,6 +526,30 @@
.wbd_dmem_err_i (wbd_riscv_dmem_err_o )
);
+`ifndef SCR1_TCM_MEM
+sky130_sram_2kbyte_1rw1r_32x512_8 u_sram_2kb(
+`ifdef USE_POWER_PINS
+ .vccd1 (vccd1),// User area 1 1.8V supply
+ .vssd1 (vssd1),// User area 1 digital ground
+`endif
+// Port 0: RW
+ .clk0 (cpu_clk),
+ .csb0 (sram_csb0),
+ .web0 (sram_web0),
+ .wmask0 (sram_wmask0),
+ .addr0 (sram_addr0),
+ .din0 (sram_din0),
+ .dout0 (sram_dout0),
+// Port 1: R
+ .clk1 (cpu_clk),
+ .csb1 (sram_csb1),
+ .addr1 (sram_addr1),
+ .dout1 (sram_dout1)
+ );
+
+`endif
+
+
/*********************************************************
* SPI Master
* This is an implementation of an SPI master that is controlled via an AXI bus.
@@ -620,39 +677,38 @@
.uart_rstn (uart_rst_n ), // uart reset
.i2c_rstn (i2c_rst_n ), // i2c reset
.usb_rstn (usb_rst_n ), // i2c reset
- .uart_i2c_usb_sel (uart_i2c_usb_sel ), // 0 - uart, 1 - I2C
.app_clk (wbd_clk_int ),
.usb_clk (usb_clk ),
// Reg Bus Interface Signal
- .reg_cs (wbd_uart_stb_o ),
- .reg_wr (wbd_uart_we_o ),
- .reg_addr (wbd_uart_adr_o[5:2] ),
- .reg_wdata (wbd_uart_dat_o ),
- .reg_be (wbd_uart_sel_o ),
+ .reg_cs (wbd_uart_stb_o ),
+ .reg_wr (wbd_uart_we_o ),
+ .reg_addr (wbd_uart_adr_o[7:0] ),
+ .reg_wdata (wbd_uart_dat_o ),
+ .reg_be (wbd_uart_sel_o ),
// Outputs
- .reg_rdata (wbd_uart_dat_i ),
- .reg_ack (wbd_uart_ack_i ),
+ .reg_rdata (wbd_uart_dat_i ),
+ .reg_ack (wbd_uart_ack_i ),
// Pad interface
- .scl_pad_i (i2cm_clk_i ),
- .scl_pad_o (i2cm_clk_o ),
- .scl_pad_oen_o (i2cm_clk_oen ),
+ .scl_pad_i (i2cm_clk_i ),
+ .scl_pad_o (i2cm_clk_o ),
+ .scl_pad_oen_o (i2cm_clk_oen ),
- .sda_pad_i (i2cm_data_i ),
- .sda_pad_o (i2cm_data_o ),
- .sda_padoen_o (i2cm_data_oen ),
+ .sda_pad_i (i2cm_data_i ),
+ .sda_pad_o (i2cm_data_o ),
+ .sda_padoen_o (i2cm_data_oen ),
- .uart_rxd (uart_rxd ),
- .uart_txd (uart_txd ),
+ .uart_rxd (uart_rxd ),
+ .uart_txd (uart_txd ),
- .usb_in_dp (usb_dp_i ),
- .usb_in_dn (usb_dn_i ),
+ .usb_in_dp (usb_dp_i ),
+ .usb_in_dn (usb_dn_i ),
- .usb_out_dp (usb_dp_o ),
- .usb_out_dn (usb_dn_o ),
- .usb_out_tx_oen (usb_oen )
+ .usb_out_dp (usb_dp_o ),
+ .usb_out_dn (usb_dn_o ),
+ .usb_out_tx_oen (usb_oen )
);
@@ -697,8 +753,8 @@
.ssram_sck (sflash_sck ),
.ssram_ss (sflash_ss ),
.ssram_oen (sflash_oen ),
- .ssram_do ( ),
- .ssram_di (sflash_di ),
+ .ssram_do (sflash_do ),
+ .ssram_di ( ),
// USB I/F
.usb_dp_o (usb_dp_o ),
@@ -722,8 +778,8 @@
// SPI MASTER
.spim_sck (sflash_sck ),
.spim_ss (sflash_ss ),
- .spim_miso ( ),
- .spim_mosi (sflash_di[0] ),
+ .spim_miso (sflash_do[0] ),
+ .spim_mosi ( ),
.pulse1m_mclk (pulse1m_mclk ),
diff --git a/verilog/rtl/wb_host/src/wb_host.sv b/verilog/rtl/wb_host/src/wb_host.sv
index 2daf54c..184e9b6 100644
--- a/verilog/rtl/wb_host/src/wb_host.sv
+++ b/verilog/rtl/wb_host/src/wb_host.sv
@@ -264,7 +264,7 @@
.data_out (reg_0[31:0])
);
-generic_register #(8,8'h30 ) u_bank_sel (
+generic_register #(8,8'h10 ) u_bank_sel (
.we ({8{sw_wr_en_1}} ),
.data_in (wbm_dat_i[7:0] ),
.reset_n (wbm_rst_n ),
diff --git a/verilog/rtl/wb_interconnect/src/wb_interconnect.sv b/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
index 05ed8f8..d7b7f7a 100644
--- a/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
+++ b/verilog/rtl/wb_interconnect/src/wb_interconnect.sv
@@ -225,38 +225,43 @@
// EXTERNAL MEMORY MAP
// 0x0000_0000 to 0x0FFF_FFFF - SPI FLASH MEMORY
// 0x1000_0000 to 0x1000_00FF - SPI REGISTER
-// 0x2000_0000 to 0x2FFF_FFFF - SDRAM
-// 0x3000_0000 to 0x3000_00FF - GLOBAL REGISTER
-// 0x3000_0000 to 0x3001_00FF - UART Register
+// 0x1001_0000 to 0x1001_003F - UART
+// 0x1001_0040 to 0x1001_007F - I2C
+// 0x1001_0080 to 0x1001_008F - USB
+// 0x1002_0000 to 0x1002_00FF - ADC
+// 0x1003_0000 to 0x1003_00FF - PINMUX
// 0x3080_0000 to 0x3080_00FF - WB HOST (This decoding happens at wb_host block)
// ---------------------------------------------------------------------------
//
-wire [3:0] m0_wbd_tid_i = (m0_wbd_adr_i[31:28] == 4'b0000 ) ? 4'b0000 :
- (m0_wbd_adr_i[31:28] == 4'b0001 ) ? 4'b0000 :
- (m0_wbd_adr_i[31:28] == 4'b0010 ) ? 4'b0001 :
- (m0_wbd_adr_i[31:16] == 16'h3000 ) ? 4'b0010 :
- (m0_wbd_adr_i[31:16] == 16'h3001 ) ? 4'b0011 : 4'b0000;
+wire [3:0] m0_wbd_tid_i = (m0_wbd_adr_i[31:28] == 4'b0000 ) ? 4'b0000 : // SPI
+ (m0_wbd_adr_i[31:16] == 16'h1000 ) ? 4'b0000 : // SPI REG
+ (m0_wbd_adr_i[31:16] == 16'h1001 ) ? 4'b0001 : // UART/I2C/USB
+ (m0_wbd_adr_i[31:16] == 16'h1002 ) ? 4'b0010 : // ADC
+ (m0_wbd_adr_i[31:16] == 16'h1003 ) ? 4'b0011 : // PINMUX
+ 4'b0000;
//------------------------------
// RISC Data Memory Map
// 0x0000_0000 to 0x0FFF_FFFF - SPI FLASH MEMORY
// 0x1000_0000 to 0x1000_00FF - SPI REGISTER
-// 0x2000_0000 to 0x2FFF_FFFF - SDRAM
-// 0x3000_0000 to 0x3000_00FF - GLOBAL REGISTER
-// 0x3000_0000 to 0x3001_00FF - UART Register
+// 0x1001_0000 to 0x1001_003F - UART
+// 0x1001_0040 to 0x1001_007F - I2
+// 0x1001_0080 to 0x1001_008F - USB
+// 0x1002_0000 to 0x1002_00FF - ADC
+// 0x1003_0000 to 0x1003_00FF - PINMUX
//-----------------------------
//
wire [3:0] m1_wbd_tid_i = (m1_wbd_adr_i[31:28] == 4'b0000 ) ? 4'b0000 :
- (m1_wbd_adr_i[31:28] == 4'b0001 ) ? 4'b0000 :
- (m1_wbd_adr_i[31:28] == 4'b0010 ) ? 4'b0001 :
- (m1_wbd_adr_i[31:16] == 16'h3000 ) ? 4'b0010 :
- (m1_wbd_adr_i[31:16] == 16'h3001 ) ? 4'b0011 : 4'b0000;
+ (m1_wbd_adr_i[31:16] == 16'h1000 ) ? 4'b0000 :
+ (m1_wbd_adr_i[31:16] == 16'h1001 ) ? 4'b0001 :
+ (m1_wbd_adr_i[31:16] == 16'h1002 ) ? 4'b0010 :
+ (m1_wbd_adr_i[31:16] == 16'h1003 ) ? 4'b0011 : 4'b0000;
wire [3:0] m2_wbd_tid_i = (m2_wbd_adr_i[31:28] == 4'b0000 ) ? 4'b0000 :
- (m2_wbd_adr_i[31:28] == 4'b0001 ) ? 4'b0000 :
- (m2_wbd_adr_i[31:28] == 4'b0010 ) ? 4'b0001 :
- (m2_wbd_adr_i[31:16] == 16'h3000 ) ? 4'b0010 :
- (m2_wbd_adr_i[31:16] == 16'h3001 ) ? 4'b0011 : 4'b0000;
+ (m2_wbd_adr_i[31:16] == 16'h1000 ) ? 4'b0000 :
+ (m2_wbd_adr_i[31:16] == 16'h1001 ) ? 4'b0001 :
+ (m2_wbd_adr_i[31:16] == 16'h1002 ) ? 4'b0010 :
+ (m2_wbd_adr_i[31:16] == 16'h1003 ) ? 4'b0011 : 4'b0000;
//----------------------------------------
// Master Mapping
// -------------------------------------