mirror of https://github.com/efabless/caravel.git
Changes that correct mgmt_core references and user_id_programming generation. (#73)
* Create lvs-cvc.rst * user_project_analog_wrapper -> user_analog_project_wrapper * Added table * Update lvs-cvc.rst * Create lvs_cvc_mpw4.rst Initial steps for LVS and CVC-RV for MPW-4 slot-002 * Update lvs_cvc_mpw4.rst diode and short errors * daily progress `simple_por` changes to `caravel.v` * Update lvs_cvc_mpw4.rst * Remove old local documentation. * Changes that correct gpio_default_block, user_id_programming, and mgmt_core references. mgmt_core_wrapper Use absolute path instead of relative path. user_id_programming Remove GDS references as GDS is no longer modified. Corrected string concatenation. Corrected mag data replacement. Corrected verilog data replacement. gpio_default_block Rename instances for gpio_default_blocks 0-4 in caravel.mag and caravan.mag. Change replace range in gen_gpio_defaults.py to handle gpio_default_blocks 0-4. * Revert changes related to gpio_default_block. * Changed mgmt_core_wrapper absolute path from UPRJ_ROOT to MCW_ROOT. * Corrected MCW_ROOT path (includes mgmt_core_wrapper)
This commit is contained in:
parent
ae6bfcc107
commit
6f99301588
4
Makefile
4
Makefile
|
@ -122,7 +122,7 @@ __ship:
|
||||||
property GDS_START 0; \
|
property GDS_START 0; \
|
||||||
load mgmt_core_wrapper; \
|
load mgmt_core_wrapper; \
|
||||||
property LEFview true; \
|
property LEFview true; \
|
||||||
property GDS_FILE ../mgmt_core_wrapper/gds/mgmt_core_wrapper.gds; \
|
property GDS_FILE $(MCW_ROOT)/gds/mgmt_core_wrapper.gds; \
|
||||||
property GDS_START 0; \
|
property GDS_START 0; \
|
||||||
load $(UPRJ_ROOT)/mag/user_id_programming; \
|
load $(UPRJ_ROOT)/mag/user_id_programming; \
|
||||||
load $(UPRJ_ROOT)/mag/user_id_textblock; \
|
load $(UPRJ_ROOT)/mag/user_id_textblock; \
|
||||||
|
@ -174,7 +174,7 @@ __truck:
|
||||||
property GDS_START 0; \
|
property GDS_START 0; \
|
||||||
load mgmt_core_wrapper; \
|
load mgmt_core_wrapper; \
|
||||||
property LEFview true; \
|
property LEFview true; \
|
||||||
property GDS_FILE ../mgmt_core_wrapper/gds/mgmt_core_wrapper.gds; \
|
property GDS_FILE $(MCW_ROOT)/gds/mgmt_core_wrapper.gds; \
|
||||||
property GDS_START 0; \
|
property GDS_START 0; \
|
||||||
load $(UPRJ_ROOT)/mag/user_id_programming; \
|
load $(UPRJ_ROOT)/mag/user_id_programming; \
|
||||||
load $(UPRJ_ROOT)/mag/user_id_textblock; \
|
load $(UPRJ_ROOT)/mag/user_id_textblock; \
|
||||||
|
|
|
@ -152,7 +152,7 @@ Quick Start for User Projects
|
||||||
Your area is the full user space, so feel free to add your
|
Your area is the full user space, so feel free to add your
|
||||||
project there or create a different macro and harden it separately then
|
project there or create a different macro and harden it separately then
|
||||||
insert it into the ``user_project_wrapper`` for digital projects or insert it
|
insert it into the ``user_project_wrapper`` for digital projects or insert it
|
||||||
into ``user_project_analog_wrapper`` for analog projects.
|
into ``user_analog_project_wrapper`` for analog projects.
|
||||||
|
|
||||||
.. _digital-user-project:
|
.. _digital-user-project:
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#
|
#
|
||||||
# set_user_id.py ---
|
# set_user_id.py ---
|
||||||
#
|
#
|
||||||
# Manipulate the magic database, GDS, and verilog source files for the
|
# Manipulate the magic database and verilog source files for the
|
||||||
# user_id_programming block to set the user ID number.
|
# user_id_programming block to set the user ID number.
|
||||||
#
|
#
|
||||||
# The user ID number is a 32-bit value that is passed to this routine
|
# The user ID number is a 32-bit value that is passed to this routine
|
||||||
|
@ -197,10 +197,6 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
print('Step 1: Modify layout of the user_id_programming subcell')
|
print('Step 1: Modify layout of the user_id_programming subcell')
|
||||||
|
|
||||||
# Bytes leading up to via position are:
|
|
||||||
viarec = "00 06 0d 02 00 43 00 06 0e 02 00 2c 00 2c 10 03 "
|
|
||||||
viabytes = bytes.fromhex(viarec)
|
|
||||||
|
|
||||||
# Read the ID programming layout. If a backup was made of the
|
# Read the ID programming layout. If a backup was made of the
|
||||||
# zero-value program, then use it.
|
# zero-value program, then use it.
|
||||||
|
|
||||||
|
@ -237,7 +233,7 @@ if __name__ == '__main__':
|
||||||
xuri = int(round(xurum * 200))
|
xuri = int(round(xurum * 200))
|
||||||
yuri = int(round(yurum * 200))
|
yuri = int(round(yurum * 200))
|
||||||
|
|
||||||
viaoldposdata = 'rect ' + xlli + ' ' + ylli + ' ' + xuri + ' ' + yuri
|
viaoldposdata = f"rect {xlli} {ylli} {xuri} {yuri}"
|
||||||
|
|
||||||
# For "one" bits, the X position is moved 0.92 microns to the left
|
# For "one" bits, the X position is moved 0.92 microns to the left
|
||||||
newxllum = xllum - 0.92
|
newxllum = xllum - 0.92
|
||||||
|
@ -247,7 +243,7 @@ if __name__ == '__main__':
|
||||||
newxlli = int(round(newxllum * 200))
|
newxlli = int(round(newxllum * 200))
|
||||||
newxuri = int(round(newxurum * 200))
|
newxuri = int(round(newxurum * 200))
|
||||||
|
|
||||||
vianewposdata = 'rect ' + newxlli + ' ' + ylli + ' ' + newxuri + ' ' + yuri
|
vianewposdata = f"rect {newxlli} {ylli} {newxuri} {yuri}"
|
||||||
|
|
||||||
# Diagnostic
|
# Diagnostic
|
||||||
if debugmode:
|
if debugmode:
|
||||||
|
@ -261,7 +257,7 @@ if __name__ == '__main__':
|
||||||
print('Error: via not found for bit position ' + str(i))
|
print('Error: via not found for bit position ' + str(i))
|
||||||
errors += 1
|
errors += 1
|
||||||
else:
|
else:
|
||||||
magdata == magdata.replace(viaoldposdata, vianewposdata)
|
magdata = magdata.replace(viaoldposdata, vianewposdata)
|
||||||
|
|
||||||
if errors == 0:
|
if errors == 0:
|
||||||
# Keep a copy of the original
|
# Keep a copy of the original
|
||||||
|
@ -313,17 +309,17 @@ if __name__ == '__main__':
|
||||||
if user_id_bits[i] == '0':
|
if user_id_bits[i] == '0':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
outdata = vdata.replace('high[' + str(i) + ']', 'XXXX')
|
vdata = vdata.replace('high[' + str(i) + ']', 'XXXX')
|
||||||
outdata = outdata.replace('low[' + str(i) + ']', 'high[' + str(i) + ']')
|
vdata = vdata.replace('low[' + str(i) + ']', 'high[' + str(i) + ']')
|
||||||
outdata = outdata.replace('XXXX', 'low[' + str(i) + ']')
|
vdata = vdata.replace('XXXX', 'low[' + str(i) + ']')
|
||||||
outdata = outdata.replace('LO(mask_rev[' + str(i) + ']',
|
vdata = vdata.replace('LO(mask_rev[' + str(i) + ']',
|
||||||
'HI(mask_rev[' + str(i) + ']')
|
'HI(mask_rev[' + str(i) + ']')
|
||||||
outdata = outdata.replace('HI(\\user_proj_id_low', 'LO(\\user_proj_id_low')
|
vdata = vdata.replace('HI(\\user_proj_id_low', 'LO(\\user_proj_id_low')
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
if changed:
|
if changed:
|
||||||
with open(vpath + '/gl/user_id_programming.v', 'w') as ofile:
|
with open(vpath + '/gl/user_id_programming.v', 'w') as ofile:
|
||||||
ofile.write(outdata)
|
ofile.write(vdata)
|
||||||
print('Done!')
|
print('Done!')
|
||||||
else:
|
else:
|
||||||
print('Error: No substitutions done on verilog/gl/user_id_programming.v.')
|
print('Error: No substitutions done on verilog/gl/user_id_programming.v.')
|
||||||
|
|
Loading…
Reference in New Issue