https://open-source-silicon.dev logo
Channels
aa
abcc
activity
adiabatonauts
analog-design
announce
announcements
b2aws
b2aws-tutorial
bag
basebands
beagleboard
bluetooth
board-respin
cadence-genus
cadence-innovus
cadence-spectre
cadence-virtuoso
caravan
caravel
caravel-board
chilechipmakers
chip-yard
chipignite
chipignite2206q_stanford_bringup
chisel
coalition-for-digital-environmental-sustainability
community_denmark_dtu
containers
courses
design-review
design-services
dffram
digital-design
digital-electronics-learners
discord-mods
dynamic-power-estimation
efabless
electric
events
fasoc
fault
foss-asic-tools
fossee-iitb-esim
fossee-iitb-google-sky130
fpga
funding
fuserisc
general
generative-ai-silicon-challenge
genius-vlsi
gf180
gf180mcu
hardware-beginners
help-
ieee-sscs-cac-23
ieee-sscs-dc-21q3
ieee-sscs-dc-22
ieee-sscs-dc-23
ihp-sg13g2
images
infiniband
j-core
japan-region
junk
klayout
latam_vlsi
layouteditor
lvs
lvs-analysis
magic
magical
maker-projects
maker-zone
microwatt
mpw-2-silicon
mpw-one-clean-short
mpw-one-silicon
neuro-mem
nydesign
open_pdks
open-pdk
openadiabaticlogic
openfpga
openhighqualityresonators
openlane
openlane_cloudrunner
openlane-development
openocd
openpositarithmetic
openpower
openram
openroad
opentitan
osu
pa-test-chip
paracells
pd-openlane-and-sky130
picosoc
pll
popy_neel
power
private-shuttle
rad-lab-silicon
radio
rdircd
reram
researchers
rf-mmw-design
rios
riscv
sdram
serdes
shuttle
shuttle-precheck
shuttle-status
silicon-photonics
silicon-validation
silicon-validation-private
sky130
sky130-ci
sky130-pv-workshop
sky65
sky90
skywater
sram
stdcelllib
strive
swerv
system-verilog-learners
tapeout-job
tapeout-pakistan
team-awesome
timing-closure
toysram
travis-ci
uvm-learners
vendor-synopsys
venn
verification-be
verification-fe
verilog-learners
vh2v
vhdl
vhdl-learners
vliw
vlsi_verilog_using_opensource_eda
vlsi_verilog_using_opensoure_eda
vlsi-learners-group
vlsi101
waveform-viewers
xls
xschem
xyce
zettascale
Powered by
Title
t

Tim Edwards

01/27/2023, 1:58 PM
FYI, there is definitely some issue with the configuration loading routine. I created a much simplified loading routine by converting the serial bit-bang vectors into a constant configuration that can be used with the automatic serial transfer, and that seems to work. But we will also need to provide some routines for the Nucleo board that allow the Caravel development board to be run while it's still sitting on (and being powered by) the Nucleo board. Removing the Caravel board from the Nucleo board and putting it on a different supply changes the environment enough that some of the hold violations will shift and cross the boundary between an independent and a dependent hold violation, which invalidates the whole calibration process and causes everything to stop working.
p

Philipp Gühring

01/28/2023, 4:09 PM
@Tim Edwards Could you provide your "much simplified loading routine" please?
t

Tim Edwards

01/28/2023, 4:15 PM
@Philipp Gühring: This program reads the "gpio_config_data.py" file written by the calibration process, and converts it into an equivalent static configuration in C code that can be dropped into a program. Instead of running
gpio_config_io()
to bit-bang the serial transfer, just set the configuration data per the output of
gpio_convert.py
, then run
reg_mprj_xfer = 1;  while (reg_mprj_xfer == 1);
to run the automatic serial transfer. Follow that transfer by setting the configuration values to what they were intended to be, so that the housekeeping module understands which GPIOs are supposed to be inputs and which are supposed to be outputs.
Here's an example of a program edited after running
gpio_convert.py
. This is for the Efabless example user project (which is just a simple multi-bit counter). I want to set all of the GPIOs to output, which puts the counter value on the GPIO outputs. So I run the usual python to calibrate the chip and to get the two bit-bang bitstreams. Then, once I have the file
gpio_config_data.py
for the configuration I want in my program, I run
gpio_convert.py
, which gives me an output that I drop into my program, and that gives me lines 20 to 57 in the attached C code (
counter.c
) below. Then in lines 65-67 I run the automatic serial load, and in lines 72-109 I set the configuration in the housekeeping registers back to what was intended (which is all outputs).