From 5ed3c8f8b3ff616d0821e9c2bdd55b8b97229697 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:42:25 -0400 Subject: [PATCH 01/21] Add new part drivers --- logiklib/zeroasic/z1002/z1002.py | 107 +++++++++++++++++++++++++ logiklib/zeroasic/z1010/z1010.py | 131 +++++++++++++++++++++++++++++++ logiklib/zeroasic/z1012/z1012.py | 131 +++++++++++++++++++++++++++++++ logiklib/zeroasic/z1060/z1060.py | 131 +++++++++++++++++++++++++++++++ logiklib/zeroasic/z1062/z1062.py | 131 +++++++++++++++++++++++++++++++ 5 files changed, 631 insertions(+) create mode 100644 logiklib/zeroasic/z1002/z1002.py create mode 100644 logiklib/zeroasic/z1010/z1010.py create mode 100644 logiklib/zeroasic/z1012/z1012.py create mode 100644 logiklib/zeroasic/z1060/z1060.py create mode 100644 logiklib/zeroasic/z1062/z1062.py diff --git a/logiklib/zeroasic/z1002/z1002.py b/logiklib/zeroasic/z1002/z1002.py new file mode 100644 index 0000000..c7b4b52 --- /dev/null +++ b/logiklib/zeroasic/z1002/z1002.py @@ -0,0 +1,107 @@ +# Copyright 2025 Zero ASIC Corporation +# Licensed under the Apache 2.0 License (see LICENSE for details) +# Auto-generated by FPGA Architect + +from logiklib import register_part_data + +from siliconcompiler import FPGA + + +#################################################### +# Setup for z1002 FPGA +#################################################### +def setup(): + + part_name = 'z1002' + + fpga = FPGA(part_name, package='logik-fpga-z1002') + + register_part_data(fpga, part_name, f"logik-fpga-{part_name}") + + fpga.set('fpga', part_name, 'vendor', 'fpga_architect') + + fpga.set('fpga', part_name, 'var', 'vpr_device_code', 'z1002') + + fpga.set('fpga', part_name, 'lutsize', 4) + fpga.add('fpga', part_name, 'var', 'feature_set', 'async_reset') + fpga.add('fpga', part_name, 'var', 'feature_set', 'enable') + fpga.add('fpga', part_name, 'var', 'vpr_clock_model', 'route') + fpga.set('fpga', part_name, 'file', 'archfile', 'cad/z1002.xml') + fpga.set('fpga', part_name, 'file', 'graphfile', 'cad/z1002_rr_graph.xml') + fpga.set('fpga', part_name, 'file', 'yosys_fpga_config', 'cad/z1002_yosys_config.json') + fpga.set('fpga', part_name, 'file', 'yosys_flop_techmap', 'cad/tech_flops.v') + + # Define the macros that can be techmapped to based on the modes + # that exist in the design + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_registers', ['dffe', 'dffr', 'dffer', 'dff']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_dsps', + ['efpga_mult_addc', + 'efpga_acc_regi', + 'efpga_mult_addc_regi', + 'efpga_adder_regio', + 'dsp_mult', + 'efpga_acc', + 'efpga_adder_rego', + 'efpga_macc_pipe_regi', + 'efpga_mult_addc_rego', + 'efpga_mult_addc_regio', + 'efpga_mult', + 'efpga_macc_regi', + 'efpga_mult_regi', + 'efpga_mult_rego', + 'efpga_adder_regi', + 'efpga_macc', + 'efpga_macc_pipe', + 'efpga_mult_regio', + 'efpga_adder']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_brams', + ['sram_sdp', + 'tdpram_256x4', + 'sdpram_1024x1', + 'sdpram_512x2', + 'sram_sp', + 'spram_64x16', + 'tdpram_128x8', + 'tdpram_512x2', + 'spram_512x2', + 'spram_128x8', + 'sdpram_128x8', + 'spram_256x4', + 'sram_tdp', + 'sdpram_256x4', + 'tdpram_1024x1', + 'spram_1024x1']) + + # Set the dsp options for the yosys built-in DSP correctly for this + # architecture + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_NAME=_dsp_block_') + + fpga.add('fpga', part_name, 'var', 'dsp_blackbox_options', 'BLACKBOX_MACROS') + + fpga.set('fpga', part_name, 'file', 'bitstream_map', 'cad/z1002_bitstream_map.json') + + fpga.set('fpga', part_name, 'file', 'constraints_map', 'cad/z1002_constraint_map.json') + + fpga.set('fpga', part_name, 'var', 'channelwidth', 150) + + # Add the liberty files to the fpga part. + fpga.set('fpga', part_name, 'file', 'vtr_primitives_lib', 'vtr_primitives.lib') + fpga.set('fpga', part_name, 'file', 'fpga_macros_libs', ['tech_flops.lib']) + + return fpga + + +######################### +if __name__ == "__main__": + fpga = setup() + assert fpga.check_filepaths() + fpga.write_manifest(f'{fpga.design}.json') diff --git a/logiklib/zeroasic/z1010/z1010.py b/logiklib/zeroasic/z1010/z1010.py new file mode 100644 index 0000000..231e4ea --- /dev/null +++ b/logiklib/zeroasic/z1010/z1010.py @@ -0,0 +1,131 @@ +# Copyright 2025 Zero ASIC Corporation +# Licensed under the Apache 2.0 License (see LICENSE for details) +# Auto-generated by FPGA Architect + +from logiklib import register_part_data + +from siliconcompiler import FPGA + + +#################################################### +# Setup for z1010 FPGA +#################################################### +def setup(): + + part_name = 'z1010' + + fpga = FPGA(part_name, package='logik-fpga-z1010') + + register_part_data(fpga, part_name, f"logik-fpga-{part_name}") + + fpga.set('fpga', part_name, 'vendor', 'fpga_architect') + + fpga.set('fpga', part_name, 'var', 'vpr_device_code', 'z1010') + + fpga.set('fpga', part_name, 'lutsize', 4) + fpga.add('fpga', part_name, 'var', 'feature_set', 'async_reset') + fpga.add('fpga', part_name, 'var', 'feature_set', 'enable') + fpga.add('fpga', part_name, 'var', 'vpr_clock_model', 'route') + fpga.set('fpga', part_name, 'file', 'archfile', 'cad/z1010.xml') + fpga.set('fpga', part_name, 'file', 'graphfile', 'cad/z1010_rr_graph.xml') + fpga.set('fpga', part_name, 'file', 'yosys_fpga_config', 'cad/z1010_yosys_config.json') + fpga.set('fpga', part_name, 'file', 'yosys_flop_techmap', 'cad/tech_flops.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_techmap', 'cad/tech_bram.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_libmap', 'cad/bram_memory_map.txt') + fpga.set('fpga', part_name, 'file', 'yosys_dsp_techmap', 'cad/tech_dsp.v') + fpga.set('fpga', part_name, 'file', 'yosys_extractlib', 'cad/tech_dsp_extract.v') + fpga.set('fpga', part_name, 'file', 'yosys_macrolib', 'cad/tech_dsp_blackbox.v') + + # Define the macros that can be techmapped to based on the modes + # that exist in the design + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_registers', + ['dffelr', + 'dffhlr', + 'dffl', + 'dffe', + 'dffhr', + 'dffehlr', + 'dffer', + 'dfflr', + 'dffehl', + 'dff', + 'dffeh', + 'dffel', + 'dffhl', + 'dffr', + 'dffh', + 'dffehr']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_dsps', + ['efpga_acc', + 'efpga_mult_rego', + 'efpga_mult_regio', + 'efpga_mult_addc_regi', + 'efpga_mult_addc_rego', + 'efpga_mult', + 'efpga_adder_rego', + 'efpga_adder', + 'efpga_mult_regi', + 'efpga_acc_regi', + 'efpga_macc_regi', + 'efpga_mult_addc_regio', + 'efpga_adder_regi', + 'efpga_mult_addc', + 'efpga_adder_regio', + 'efpga_macc_pipe_regi', + 'dsp_mult', + 'efpga_macc', + 'efpga_macc_pipe']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_brams', + ['sram_sp', + 'spram_8192x2', + 'spram_2048x8', + 'tdpram_1024x16', + 'sdpram_8192x2', + 'sdpram_2048x8', + 'sdpram_1024x16', + 'spram_1024x16', + 'sdpram_4096x4', + 'spram_16384x1', + 'tdpram_16384x1', + 'sram_tdp', + 'spram_4096x4', + 'sdpram_16384x1', + 'sram_sdp', + 'spram_512x32', + 'tdpram_4096x4', + 'tdpram_2048x8', + 'tdpram_8192x2']) + + # Set the dsp options for the yosys built-in DSP correctly for this + # architecture + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_NAME=_dsp_block_') + + fpga.add('fpga', part_name, 'var', 'dsp_blackbox_options', 'BLACKBOX_MACROS') + + fpga.set('fpga', part_name, 'file', 'bitstream_map', 'cad/z1010_bitstream_map.json') + + fpga.set('fpga', part_name, 'file', 'constraints_map', 'cad/z1010_constraint_map.json') + + fpga.set('fpga', part_name, 'var', 'channelwidth', 100) + + # Add the liberty files to the fpga part. + fpga.set('fpga', part_name, 'file', 'vtr_primitives_lib', 'vtr_primitives.lib') + fpga.set('fpga', part_name, 'file', 'fpga_macros_libs', ['tech_flops.lib', 'tech_dsp.lib', 'tech_bram.lib']) + + return fpga + + +######################### +if __name__ == "__main__": + fpga = setup() + assert fpga.check_filepaths() + fpga.write_manifest(f'{fpga.design}.json') diff --git a/logiklib/zeroasic/z1012/z1012.py b/logiklib/zeroasic/z1012/z1012.py new file mode 100644 index 0000000..353cacb --- /dev/null +++ b/logiklib/zeroasic/z1012/z1012.py @@ -0,0 +1,131 @@ +# Copyright 2025 Zero ASIC Corporation +# Licensed under the Apache 2.0 License (see LICENSE for details) +# Auto-generated by FPGA Architect + +from logiklib import register_part_data + +from siliconcompiler import FPGA + + +#################################################### +# Setup for z1012 FPGA +#################################################### +def setup(): + + part_name = 'z1012' + + fpga = FPGA(part_name, package='logik-fpga-z1012') + + register_part_data(fpga, part_name, f"logik-fpga-{part_name}") + + fpga.set('fpga', part_name, 'vendor', 'fpga_architect') + + fpga.set('fpga', part_name, 'var', 'vpr_device_code', 'z1012') + + fpga.set('fpga', part_name, 'lutsize', 4) + fpga.add('fpga', part_name, 'var', 'feature_set', 'async_reset') + fpga.add('fpga', part_name, 'var', 'feature_set', 'enable') + fpga.add('fpga', part_name, 'var', 'vpr_clock_model', 'route') + fpga.set('fpga', part_name, 'file', 'archfile', 'cad/z1012.xml') + fpga.set('fpga', part_name, 'file', 'graphfile', 'cad/z1012_rr_graph.xml') + fpga.set('fpga', part_name, 'file', 'yosys_fpga_config', 'cad/z1012_yosys_config.json') + fpga.set('fpga', part_name, 'file', 'yosys_flop_techmap', 'cad/tech_flops.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_techmap', 'cad/tech_bram.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_libmap', 'cad/bram_memory_map.txt') + fpga.set('fpga', part_name, 'file', 'yosys_dsp_techmap', 'cad/tech_dsp.v') + fpga.set('fpga', part_name, 'file', 'yosys_extractlib', 'cad/tech_dsp_extract.v') + fpga.set('fpga', part_name, 'file', 'yosys_macrolib', 'cad/tech_dsp_blackbox.v') + + # Define the macros that can be techmapped to based on the modes + # that exist in the design + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_registers', + ['dffhl', + 'dffer', + 'dffhr', + 'dfflr', + 'dffeh', + 'dffh', + 'dffhlr', + 'dffehlr', + 'dffl', + 'dffel', + 'dffe', + 'dff', + 'dffehl', + 'dffehr', + 'dffr', + 'dffelr']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_dsps', + ['efpga_adder_regio', + 'efpga_adder_regi', + 'efpga_macc_regi', + 'efpga_mult', + 'efpga_adder', + 'efpga_mult_addc_regio', + 'efpga_macc_pipe_regi', + 'efpga_acc', + 'efpga_acc_regi', + 'efpga_macc_pipe', + 'efpga_macc', + 'efpga_mult_addc_rego', + 'dsp_mult', + 'efpga_mult_addc_regi', + 'efpga_mult_regio', + 'efpga_mult_regi', + 'efpga_adder_rego', + 'efpga_mult_rego', + 'efpga_mult_addc']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_brams', + ['spram_16384x1', + 'sram_sp', + 'tdpram_16384x1', + 'tdpram_2048x8', + 'spram_8192x2', + 'spram_512x32', + 'sdpram_8192x2', + 'sdpram_4096x4', + 'spram_4096x4', + 'tdpram_8192x2', + 'tdpram_1024x16', + 'sdpram_1024x16', + 'sdpram_16384x1', + 'tdpram_4096x4', + 'spram_1024x16', + 'sram_tdp', + 'sdpram_2048x8', + 'spram_2048x8', + 'sram_sdp']) + + # Set the dsp options for the yosys built-in DSP correctly for this + # architecture + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_NAME=_dsp_block_') + + fpga.add('fpga', part_name, 'var', 'dsp_blackbox_options', 'BLACKBOX_MACROS') + + fpga.set('fpga', part_name, 'file', 'bitstream_map', 'cad/z1012_bitstream_map.json') + + fpga.set('fpga', part_name, 'file', 'constraints_map', 'cad/z1012_constraint_map.json') + + fpga.set('fpga', part_name, 'var', 'channelwidth', 100) + + # Add the liberty files to the fpga part. + fpga.set('fpga', part_name, 'file', 'vtr_primitives_lib', 'vtr_primitives.lib') + fpga.set('fpga', part_name, 'file', 'fpga_macros_libs', ['tech_flops.lib', 'tech_dsp.lib', 'tech_bram.lib']) + + return fpga + + +######################### +if __name__ == "__main__": + fpga = setup() + assert fpga.check_filepaths() + fpga.write_manifest(f'{fpga.design}.json') diff --git a/logiklib/zeroasic/z1060/z1060.py b/logiklib/zeroasic/z1060/z1060.py new file mode 100644 index 0000000..0972e2b --- /dev/null +++ b/logiklib/zeroasic/z1060/z1060.py @@ -0,0 +1,131 @@ +# Copyright 2025 Zero ASIC Corporation +# Licensed under the Apache 2.0 License (see LICENSE for details) +# Auto-generated by FPGA Architect + +from logiklib import register_part_data + +from siliconcompiler import FPGA + + +#################################################### +# Setup for z1060 FPGA +#################################################### +def setup(): + + part_name = 'z1060' + + fpga = FPGA(part_name, package='logik-fpga-z1060') + + register_part_data(fpga, part_name, f"logik-fpga-{part_name}") + + fpga.set('fpga', part_name, 'vendor', 'fpga_architect') + + fpga.set('fpga', part_name, 'var', 'vpr_device_code', 'z1060') + + fpga.set('fpga', part_name, 'lutsize', 6) + fpga.add('fpga', part_name, 'var', 'feature_set', 'async_reset') + fpga.add('fpga', part_name, 'var', 'feature_set', 'enable') + fpga.add('fpga', part_name, 'var', 'vpr_clock_model', 'route') + fpga.set('fpga', part_name, 'file', 'archfile', 'cad/z1060.xml') + fpga.set('fpga', part_name, 'file', 'graphfile', 'cad/z1060_rr_graph.xml') + fpga.set('fpga', part_name, 'file', 'yosys_fpga_config', 'cad/z1060_yosys_config.json') + fpga.set('fpga', part_name, 'file', 'yosys_flop_techmap', 'cad/tech_flops.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_techmap', 'cad/tech_bram.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_libmap', 'cad/bram_memory_map.txt') + fpga.set('fpga', part_name, 'file', 'yosys_dsp_techmap', 'cad/tech_dsp.v') + fpga.set('fpga', part_name, 'file', 'yosys_extractlib', 'cad/tech_dsp_extract.v') + fpga.set('fpga', part_name, 'file', 'yosys_macrolib', 'cad/tech_dsp_blackbox.v') + + # Define the macros that can be techmapped to based on the modes + # that exist in the design + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_registers', + ['dffe', + 'dffeh', + 'dffr', + 'dffelr', + 'dffh', + 'dffehr', + 'dfflr', + 'dffer', + 'dffhr', + 'dffhlr', + 'dffel', + 'dff', + 'dffhl', + 'dffl', + 'dffehlr', + 'dffehl']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_dsps', + ['dsp_mult', + 'efpga_mult_regi', + 'efpga_mult_rego', + 'efpga_adder_regio', + 'efpga_macc_regi', + 'efpga_macc_pipe_regi', + 'efpga_adder_rego', + 'efpga_mult_addc_regi', + 'efpga_adder_regi', + 'efpga_macc', + 'efpga_acc_regi', + 'efpga_acc', + 'efpga_mult_addc_rego', + 'efpga_mult_addc_regio', + 'efpga_macc_pipe', + 'efpga_mult', + 'efpga_adder', + 'efpga_mult_regio', + 'efpga_mult_addc']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_brams', + ['sdpram_2048x8', + 'sram_tdp', + 'spram_512x32', + 'tdpram_8192x2', + 'tdpram_2048x8', + 'tdpram_16384x1', + 'tdpram_1024x16', + 'sdpram_8192x2', + 'spram_1024x16', + 'tdpram_4096x4', + 'spram_8192x2', + 'sdpram_16384x1', + 'sdpram_1024x16', + 'spram_4096x4', + 'spram_16384x1', + 'sram_sp', + 'spram_2048x8', + 'sdpram_4096x4', + 'sram_sdp']) + + # Set the dsp options for the yosys built-in DSP correctly for this + # architecture + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_NAME=_dsp_block_') + + fpga.add('fpga', part_name, 'var', 'dsp_blackbox_options', 'BLACKBOX_MACROS') + + fpga.set('fpga', part_name, 'file', 'bitstream_map', 'cad/z1060_bitstream_map.json') + + fpga.set('fpga', part_name, 'file', 'constraints_map', 'cad/z1060_constraint_map.json') + + fpga.set('fpga', part_name, 'var', 'channelwidth', 100) + + # Add the liberty files to the fpga part. + fpga.set('fpga', part_name, 'file', 'vtr_primitives_lib', 'vtr_primitives.lib') + fpga.set('fpga', part_name, 'file', 'fpga_macros_libs', ['tech_flops.lib', 'tech_dsp.lib', 'tech_bram.lib']) + + return fpga + + +######################### +if __name__ == "__main__": + fpga = setup() + assert fpga.check_filepaths() + fpga.write_manifest(f'{fpga.design}.json') diff --git a/logiklib/zeroasic/z1062/z1062.py b/logiklib/zeroasic/z1062/z1062.py new file mode 100644 index 0000000..d471fc8 --- /dev/null +++ b/logiklib/zeroasic/z1062/z1062.py @@ -0,0 +1,131 @@ +# Copyright 2025 Zero ASIC Corporation +# Licensed under the Apache 2.0 License (see LICENSE for details) +# Auto-generated by FPGA Architect + +from logiklib import register_part_data + +from siliconcompiler import FPGA + + +#################################################### +# Setup for z1062 FPGA +#################################################### +def setup(): + + part_name = 'z1062' + + fpga = FPGA(part_name, package='logik-fpga-z1062') + + register_part_data(fpga, part_name, f"logik-fpga-{part_name}") + + fpga.set('fpga', part_name, 'vendor', 'fpga_architect') + + fpga.set('fpga', part_name, 'var', 'vpr_device_code', 'z1062') + + fpga.set('fpga', part_name, 'lutsize', 6) + fpga.add('fpga', part_name, 'var', 'feature_set', 'async_reset') + fpga.add('fpga', part_name, 'var', 'feature_set', 'enable') + fpga.add('fpga', part_name, 'var', 'vpr_clock_model', 'route') + fpga.set('fpga', part_name, 'file', 'archfile', 'cad/z1062.xml') + fpga.set('fpga', part_name, 'file', 'graphfile', 'cad/z1062_rr_graph.xml') + fpga.set('fpga', part_name, 'file', 'yosys_fpga_config', 'cad/z1062_yosys_config.json') + fpga.set('fpga', part_name, 'file', 'yosys_flop_techmap', 'cad/tech_flops.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_techmap', 'cad/tech_bram.v') + fpga.set('fpga', part_name, 'file', 'yosys_memory_libmap', 'cad/bram_memory_map.txt') + fpga.set('fpga', part_name, 'file', 'yosys_dsp_techmap', 'cad/tech_dsp.v') + fpga.set('fpga', part_name, 'file', 'yosys_extractlib', 'cad/tech_dsp_extract.v') + fpga.set('fpga', part_name, 'file', 'yosys_macrolib', 'cad/tech_dsp_blackbox.v') + + # Define the macros that can be techmapped to based on the modes + # that exist in the design + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_registers', + ['dffehlr', + 'dffer', + 'dffhlr', + 'dffel', + 'dffhl', + 'dffl', + 'dff', + 'dffeh', + 'dffr', + 'dffh', + 'dffhr', + 'dfflr', + 'dffehr', + 'dffelr', + 'dffe', + 'dffehl']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_dsps', + ['efpga_mult_regi', + 'efpga_adder_regi', + 'efpga_macc_pipe_regi', + 'efpga_macc_pipe', + 'efpga_adder', + 'efpga_macc', + 'efpga_mult_regio', + 'efpga_mult_addc', + 'efpga_mult_addc_regio', + 'efpga_adder_regio', + 'efpga_mult_addc_regi', + 'efpga_macc_regi', + 'efpga_mult', + 'efpga_acc_regi', + 'efpga_mult_rego', + 'dsp_mult', + 'efpga_adder_rego', + 'efpga_mult_addc_rego', + 'efpga_acc']) + + for tool in ('vpr', 'yosys'): + fpga.set('fpga', part_name, 'var', f'{tool}_brams', + ['tdpram_2048x8', + 'spram_1024x16', + 'spram_4096x4', + 'spram_16384x1', + 'tdpram_4096x4', + 'spram_2048x8', + 'sdpram_2048x8', + 'sram_sp', + 'tdpram_1024x16', + 'tdpram_8192x2', + 'sdpram_8192x2', + 'sdpram_16384x1', + 'spram_512x32', + 'spram_8192x2', + 'sram_tdp', + 'tdpram_16384x1', + 'sdpram_1024x16', + 'sram_sdp', + 'sdpram_4096x4']) + + # Set the dsp options for the yosys built-in DSP correctly for this + # architecture + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MAXWIDTH=18') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_A_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_B_MINWIDTH=2') + fpga.add('fpga', part_name, 'var', 'yosys_dsp_options', 'DSP_NAME=_dsp_block_') + + fpga.add('fpga', part_name, 'var', 'dsp_blackbox_options', 'BLACKBOX_MACROS') + + fpga.set('fpga', part_name, 'file', 'bitstream_map', 'cad/z1062_bitstream_map.json') + + fpga.set('fpga', part_name, 'file', 'constraints_map', 'cad/z1062_constraint_map.json') + + fpga.set('fpga', part_name, 'var', 'channelwidth', 150) + + # Add the liberty files to the fpga part. + fpga.set('fpga', part_name, 'file', 'vtr_primitives_lib', 'vtr_primitives.lib') + fpga.set('fpga', part_name, 'file', 'fpga_macros_libs', ['tech_flops.lib', 'tech_dsp.lib', 'tech_bram.lib']) + + return fpga + + +######################### +if __name__ == "__main__": + fpga = setup() + assert fpga.check_filepaths() + fpga.write_manifest(f'{fpga.design}.json') From 19d43f274b19a8ac3283f447ea43d41f5901e668 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:42:45 -0400 Subject: [PATCH 02/21] Add JSON architecture data --- logiklib/zeroasic/z1002/z1002.json | 15 ++++++++++++++ logiklib/zeroasic/z1010/z1010.json | 32 ++++++++++++++++++++++++++++++ logiklib/zeroasic/z1012/z1012.json | 32 ++++++++++++++++++++++++++++++ logiklib/zeroasic/z1060/z1060.json | 32 ++++++++++++++++++++++++++++++ logiklib/zeroasic/z1062/z1062.json | 32 ++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+) create mode 100644 logiklib/zeroasic/z1002/z1002.json create mode 100644 logiklib/zeroasic/z1010/z1010.json create mode 100644 logiklib/zeroasic/z1012/z1012.json create mode 100644 logiklib/zeroasic/z1060/z1060.json create mode 100644 logiklib/zeroasic/z1062/z1062.json diff --git a/logiklib/zeroasic/z1002/z1002.json b/logiklib/zeroasic/z1002/z1002.json new file mode 100644 index 0000000..61fcd7b --- /dev/null +++ b/logiklib/zeroasic/z1002/z1002.json @@ -0,0 +1,15 @@ +{ + "name": "z1002", + "fpga_x_size": 32, + "fpga_y_size": 32, + "num_routing_channels": 150, + "num_clb_inputs": 18, + "lut_size": 4, + "bles_per_clb": 8, + "outputs_per_ble": 1, + "crossbar_size": 15, + "sb_fraction": 0.15, + "logic_fraction": 0.15, + "ios_per_iob": 16, + "num_fracturable_elements": 1 +} diff --git a/logiklib/zeroasic/z1010/z1010.json b/logiklib/zeroasic/z1010/z1010.json new file mode 100644 index 0000000..acc950a --- /dev/null +++ b/logiklib/zeroasic/z1010/z1010.json @@ -0,0 +1,32 @@ +{ + "name": "z1010", + "fpga_x_size": 16, + "fpga_y_size": 16, + "num_routing_channels": 100, + "num_clb_inputs": 18, + "lut_size": 4, + "bles_per_clb": 8, + "outputs_per_ble": 1, + "crossbar_size": 15, + "sb_fraction": 0.15, + "logic_fraction": 0.15, + "ios_per_iob": 16, + "num_fracturable_elements": 1, + "ram_address_width": 14, + "ram_data_width": 16, + "ram_byte_size": 8, + "ram_block_width": 2, + "ram_block_height": 4, + "ram_x_spacing": 16, + "ram_y_spacing": 4, + "ram_x_offset": 8, + "ram_y_offset": 2, + "mult_block_width": 1, + "mult_block_height": 4, + "mult_input_width": 18, + "mult_output_width": 40, + "mult_x_spacing": 16, + "mult_y_spacing": 4, + "mult_x_offset": 5, + "mult_y_offset": 2 +} diff --git a/logiklib/zeroasic/z1012/z1012.json b/logiklib/zeroasic/z1012/z1012.json new file mode 100644 index 0000000..43125ac --- /dev/null +++ b/logiklib/zeroasic/z1012/z1012.json @@ -0,0 +1,32 @@ +{ + "name": "z1012", + "fpga_x_size": 32, + "fpga_y_size": 32, + "num_routing_channels": 150, + "num_clb_inputs": 18, + "lut_size": 4, + "bles_per_clb": 8, + "outputs_per_ble": 1, + "crossbar_size": 15, + "sb_fraction": 0.15, + "logic_fraction": 0.15, + "ios_per_iob": 16, + "num_fracturable_elements": 1, + "ram_address_width": 14, + "ram_data_width": 16, + "ram_byte_size": 8, + "ram_block_width": 2, + "ram_block_height": 4, + "ram_x_spacing": 16, + "ram_y_spacing": 4, + "ram_x_offset": 8, + "ram_y_offset": 2, + "mult_block_width": 1, + "mult_block_height": 4, + "mult_input_width": 18, + "mult_output_width": 40, + "mult_x_spacing": 16, + "mult_y_spacing": 4, + "mult_x_offset": 5, + "mult_y_offset": 2 +} diff --git a/logiklib/zeroasic/z1060/z1060.json b/logiklib/zeroasic/z1060/z1060.json new file mode 100644 index 0000000..47df7a7 --- /dev/null +++ b/logiklib/zeroasic/z1060/z1060.json @@ -0,0 +1,32 @@ +{ + "name": "z1060", + "fpga_x_size": 16, + "fpga_y_size": 16, + "num_routing_channels": 100, + "num_clb_inputs": 24, + "lut_size": 6, + "bles_per_clb": 8, + "outputs_per_ble": 1, + "crossbar_size": 23, + "sb_fraction": 0.15, + "logic_fraction": 0.15, + "ios_per_iob": 16, + "num_fracturable_elements": 1, + "ram_address_width": 14, + "ram_data_width": 16, + "ram_byte_size": 8, + "ram_block_width": 2, + "ram_block_height": 4, + "ram_x_spacing": 16, + "ram_y_spacing": 4, + "ram_x_offset": 8, + "ram_y_offset": 2, + "mult_block_width": 1, + "mult_block_height": 4, + "mult_input_width": 18, + "mult_output_width": 40, + "mult_x_spacing": 16, + "mult_y_spacing": 4, + "mult_x_offset": 5, + "mult_y_offset": 2 +} diff --git a/logiklib/zeroasic/z1062/z1062.json b/logiklib/zeroasic/z1062/z1062.json new file mode 100644 index 0000000..11cbd2b --- /dev/null +++ b/logiklib/zeroasic/z1062/z1062.json @@ -0,0 +1,32 @@ +{ + "name": "z1062", + "fpga_x_size": 32, + "fpga_y_size": 32, + "num_routing_channels": 150, + "num_clb_inputs": 24, + "lut_size": 6, + "bles_per_clb": 8, + "outputs_per_ble": 1, + "crossbar_size": 23, + "sb_fraction": 0.15, + "logic_fraction": 0.15, + "ios_per_iob": 16, + "num_fracturable_elements": 1, + "ram_address_width": 14, + "ram_data_width": 16, + "ram_byte_size": 8, + "ram_block_width": 2, + "ram_block_height": 4, + "ram_x_spacing": 16, + "ram_y_spacing": 4, + "ram_x_offset": 8, + "ram_y_offset": 2, + "mult_block_width": 1, + "mult_block_height": 4, + "mult_input_width": 18, + "mult_output_width": 40, + "mult_x_spacing": 16, + "mult_y_spacing": 4, + "mult_x_offset": 5, + "mult_y_offset": 2 +} From b51688257d825b997613c6d25c966996bca81ba8 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:43:38 -0400 Subject: [PATCH 03/21] Add top level block diagrams --- .../zeroasic/z1002/docs/z1002_Block_Diagram.png | Bin 0 -> 59109 bytes .../zeroasic/z1010/docs/z1010_Block_Diagram.png | Bin 0 -> 2091 bytes .../zeroasic/z1012/docs/z1012_Block_Diagram.png | Bin 0 -> 55932 bytes .../zeroasic/z1060/docs/z1060_Block_Diagram.png | Bin 0 -> 27039 bytes .../zeroasic/z1062/docs/z1062_Block_Diagram.png | Bin 0 -> 55916 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 logiklib/zeroasic/z1002/docs/z1002_Block_Diagram.png create mode 100644 logiklib/zeroasic/z1010/docs/z1010_Block_Diagram.png create mode 100644 logiklib/zeroasic/z1012/docs/z1012_Block_Diagram.png create mode 100644 logiklib/zeroasic/z1060/docs/z1060_Block_Diagram.png create mode 100644 logiklib/zeroasic/z1062/docs/z1062_Block_Diagram.png diff --git a/logiklib/zeroasic/z1002/docs/z1002_Block_Diagram.png b/logiklib/zeroasic/z1002/docs/z1002_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3a3ecec399158f31f2def276d3a95d6844cf3c GIT binary patch literal 59109 zcmeHw30PBC+P|HCEgfy89T#drXx&gj8AVwPkXje2Xi!lRSz?Pwl_f%eu!N+oQYs2j z*+dDcQjDm8f(T(tMFH7D1tfq8k+4Lz1QH-*|DSuqW;^YWcE0(4GY>r8$87i9bI(2J zJ@4{+fA6_{DBJhuel&N^oH_69`h5F=IdlH!&_c7qVH?Rk6Kbw=u z(CYzj{>O9c-mP=y+$YVGfAJQ0|JT!>J7MR{ng19%-l)LbIzDGkcj&I|TMq`i^()@H zn8pmJXqAZD_&qO<*F`>Ce(d*2M8?FZu4eNlV- z?A_1guW`}Q1yl#%>QCALwNT@AMI84Gniu~_(v`SCqXCus3Uwk=JFejFbY{WvZrdRsi>IaJ~sYuxZS8)2aZr_LTry!$qkh4o0)|r%1;*YN+kmnRh7XJmO+7ca%SIR zbH^iV8E6HUt_&>X>4+oO>+*6alBZ!97gzWv_IQqYc>l}r^RjJBgD|BQk)6u9myZnC zFNoygUn)3bEE1l{RsQVJAuq6{x09?@XTVPrLI0pW#zdcqV_a}>(`FYIjkbC@X1T4y zMMiR0_)&jM$ae^Du{h>q?3;P-{rO#M&D6(-epG3;-)hJEez)q?$HjUudc_|oB%gbq zLp)E6ezU2Z+dX$)`@YOCJK!Vc1Ke#B-AMmMx{+&_!iUxxa=t^o?lTJM$$!UXv>M26 z1(sr55(j_sp`>@7eUN?0U@xoMcc6yHFfw@Xy%N9T;S+Lib@>}!?ta*ah||yr!bipT z(4cLjMNNMsXLu;vwoRT}P1r>~d#c$zd`5fd=`F8(4(^43AYCg{_Ozu@neAgCR~An^Y_}n{+tn=s%__Rv^ibA zG~CB_n791?N)4K^z!k*D61ASl>Cp(vHIsOR_Ky~2gUPh#6Se%8dIz@!cSPGIu8)5eFKl$Mj~_ms_JsUVjVW?W z@sz|`?~3P%>X7LANM3!K-C9O@d3l|(zb>KhF<8UMwGMuSQBPu!yL&2YslF~x!lTf^ zPC`RinKAP4)p;)Yr>}!AqD1HH@m%RhUl)IHU$VAd8vJAMo-+2tu!`M2U05giEzbJ> z@R3H@F7Ha3*_C_;>&7b&{cdf@;7$r`#x}pzyz7%|b82NgAzyCmbkW_zO4mQN=Y>V% zmBVTo2FWt$1kt`paWu6mpef>?`Q9r2LG8^qee_Q4xii@^d_u_T$=zjY^@0t^+>-hB z0^IG$j~dM8Z@zhGvgIo11gnLUYxuQ2yC zfRK~zSQuG=-VR<^navNRsPza)pV+#)B8bzI%XE_+qD$GT0bOKXx0Eg)Fj4iQ6?b-r zW*_((yBAVlA;F=w1W24og%^@Eza=={JDmw>WAJ+Z7!m}KHUb^LyPn@*Y=+bUSQ;J& zVsugmg2d-jU_0O3^8Q2p_mreH*2HZzYDa4Z8PWWLLYK8GbY8kFfHXizY;J|*Eu>7r z3e|6kP0>r5!^w?65gyo9%}U1)WiaE=t^|4KyetN-;hAGxv&>lIq2X=CQk@TDqbiLH z8tQfGFzdq~$-}7)Zl{TFX*^&+TMQ6>Q4s5Nn(E+&XGWqz9+B_-a+hE!hT*Zxhm=g|S`*4YfKbiBx8yaRWTin+8fYcwp4x zG5+Wp6AR_`c|`js8Gm4g)R0k3@=E>#d6|f)cwDbz{OWmqBFkR$#h`r^QOkd;_C*b( zWb3d`4wc!i-6Xydp;Pmf2=)AH>o+u?y$rIi#|bM#<>nU=><$HjD0pmam-3VIXNVAF zZwWC#Tk}bAkstT&yjkf0bhB|=A6oYW8AjGzfs{Y-M2aqLW{w8*y?psnlABXpoWb3* zD)#Z?$Nsor$m>y+5r2cLr>~D%6$^iI=FFLafdTksadB~NZS9%doWeo`8D%FO>=y{o zC3qU71!EPffdbrYk!XT$<8VxHk<&K-&vK`tWkE9uy(UP>1IPuTCV9wGz(YeK!1N+;p63?qUX}=9-S|uThk!{F;oF5I1R`MH<32WS}8#~@Gn=f3xUN2QXA~NJU99K6=c3> zX<37dw0*h;xbLHKa&j70c!q_AZTcu4ax`WkW|cc3mfRoD#(7v zpn#w>BEIa+Qho;vpoJQ%(2(ch&15gg2MYUbo&tx@gsb8A{Wkx7RuQE7C;A4lYZI%; zg(1QSM;(oE-AFwV9 zDTsBNTeVhC`47e%FB>SxT^pzyHMfJl38Er&B~-t@KXA)e5i5=UN8`JNT&a5?xygYERo&sM_ zPb%o*Cy<)ImLU=G4keSxOV9ozlOb`(@0tuLU=;W)8e~nxWE8EQe`Jdp3Pd0ZGMyny zrr13U-h0eBc+tx|JP!&dk1%tP!&z~^*mt%Po`AsMjQ5@GS7x2)pZCnhI@FHSStDvZ zpge0t{dps*rh+aALn_-1ZDdKLyR@4P8Nju}V=@A^?63d={2icd8|do;WqX_7s@T7l z_7r5oLbScT{rE#op)A1L@5Ri7y)={Rx*FT27H_5<#*iDGi^_oD7&gNL z21UP?*}rn(TN0J{SV)jR`|2QnJ}KHXX-`3>ZU&jZ8kh}WH>v3G1E#`4PyaYrjt>PF z(P&Q44cB?8h$q`(`RKmr1j3q z^jSB`?}AEak?$bAXx1D2=e@zRc_iZiwGv*Twtg|8>rH{Gd^5BBI9?$gaiV3$Rvy2> zy|6R2!hl!=0SG6;pd_Sn?5j;{p|B^7ppe3@aqu#Di2K#1g8U#eGqa0gY*$r$Pry+) zf~x3+k&3`&p5;P2FyY7;&;ImblrDNU*NESE3MA=tBj_D3v{MNEGy_TIW@dMHC#2r* zTar@wq-;s_PIF(@YUrw;c%6Btl;+p*Hg~NVBiD=hzWF`BprD}laaZ@O>KMxZQM>N3 zHnJ!;_Yib>OQPD10-QUM284X*Mt;j6nDTH#=}5m0SmqezKt_pP?-I-DZCK?b&Zgr) zIghhKX;vsr&m*37#r+FhaiVL)2Aox>qDrex744N-dAuku&)kR^xG`zZYKA(f2t*^0 z$-%(aVTNJ`g6Q3TKYgNnXxzPw1=76oIFP&AWdNnJ%|ge-O)q+<4in1t47OU|^H}tB zIZ5qrScPmn3U{F+&mGE=WenZc2RlE`88`pCV**|`FzSzZ? zz!mLBJq+a+awJPRgu!9=I>l352F=XekeTUf6j=q_ARlU_-+%U10LY^PQuNc9OtbGl z2Dv?}8PU4t@55po1W4Aqh*ZclF?sv7v2$IX!}%xC4jIO z&qindWOQcMqW_Pu=w~0(zxy%CyE(&4Np5uEH)3MPRj-Xp1Oo%LRe|I^s}_JHBIyVa zk2_PJb&!y5kh0tm=n7DG2a|ysjvt4NyU+>Y8=3sMh;r~_Y(?{%lKZqaT zV(OjumOXZ39{k*$&z{kbI$fUERu64g& zuM;B5v~Z&loO%T(Dov8aRGNm(@&G`bEVDcS<8vHK>Uj=O=acrp9ufuxiTo&feI~i`_{K>w4$$O~ zzMVYJ79bD-(7d%ZwDXcJ{CmjSR9l?1TBm$~$sPv}>d6xXR>9KyJVIw-lgqVhx=*j% zEVnL$2}YXU{s5*CnkJo}kk?K!2TZEKufq{%)#&NWVY6amR%}czlv!lw|1V^xmEt;Q z@YRTsL9og^leQ{$D6CDCqV`*V2I<8>Mov17wK}boV;w+{PJjW2Dhv#wcfyiY*WCBx zWB@c7caqS820kiKA{??KdDb+A^F_ad<+nJb&hjr0d^AD$9+8+cCl~a zu3g9jo^V}VUC?2dqF_H@2dvs;1>URO-9VM!NJhc%a^T(B?$T8XdTHVYkS38_0ET>W z2&nt$x!rxNeF;mmvPa<38_i1*C<|P=2VbO9a=YFvtgHT1)|6nwXub^=H5H zba!_LnDycI5TNtlY&Z$7zL3W)JOBM1$R!S5z#CXkKvaI!KlJ0ghIgC|Z%$IB{uk5O z&AM~{-R|63?#@3!u__vlEE%X`y5gBk=>A*kcP1!;Qk`Y2-B#-Ae z)_nXMSu^9g>uPGMdja0bAcsG|H7|I_gVKW2grjbhm3vnJiYuGZX9DH0Hd4`Lg7>e5 z5*{aVLJ#?Y+{pI!FM!aUjH}Mq)>fzIm@ytbdK9n)@Rb77Kqsu&ZvaJ zC^b>q%14)K~YH$HXQDfWW(vX4G($cESBKHK` z=7MDRU$Z-^i4wh&fw+f}ilk^@A>`e^?{_aK2#2d9BOC!K`Z>dtW;PqHN&zxOT?>OU zfPvu!x#D34ml8p^07M&kK-9Owl#hT&dvXPiXNS%T^?%tkoF#FeC2^nRbe)aD{K+Ux z_Zg0Konr}~3rhc7-^@I|F-6TKwdn>#h5|ebKwHkqaR3;Uiy-41B+vs0-dYBOF~2kk zMOAxNbb&`Bz}5UH!u0cBlNY8`9?!mie?J5~Ttce2cI_Hy5=de!j{!W%+hAyl<$x~u^yA5NqXR&Hh@9!_#}9fX<#TwI{JW2!{M-aR3m|2IfGq6x5a3k; zvfmMgNV3`C+;dRXijY^=BLRsQ>{Xv~c#k{HS?Uzhf96t|LL5$2d`M}rn=QmJ&ddCV z)^KgH1#_H3(KW;^yuGpu6Z#xooBq>?=6=(hl)iP_jubW00~JI=P&Db(P>Vy+jb^K5 zj%xxIbDl40dz^kd=W~QJ>a9$Q#J$~dyQqAQ&v*{!nD`8tckR4Bth3oQhH}z)V+K6SDeqHdAy5j>@f>bHc-8@ zlZcLXbar;F!y(ThX7I!0xh_bJYkydZXbDmK2t}LbnXG+&@~>Z<%P*3a#^w$9w3r5p zwCC%KV)(wrn`C>^w_-WLKZm{YEqTysoxI&R+|*Ev!PEhUe8XxSZKuXQDQq`(opHzK z-}<)QRq;?=I^=w&|B83*iagx1x*x{SA6I4}hMut!87n;hs(ezotnD!?Yv_OYua+81 z%uLwHiaG>c=K-i$6slPvmfEDcz;lR2=I8_$l@2<9`}mu-Y(0mPu`%S$wHZD(MuiRa z;(Pr>GQRe2txI3dqZWOW6tb=|o4FnoY0|K`jHeCLga4p$WjEG8@5BLI&T-j6Oj2>Q zN9g^t{>ijDvM_t)3u;NEhpMmBt4iS%!;#)NoN-O_87OhFdn12jh;@i4=~-Dg&%~)Y zKgX%{$u3M1Jvv98z&P3eB1y%nXOai3jX!j#ED#L|%|mp9w;z@FAJw>!4H&=Ng=ZFg zyT2{sDzP>>EiUTsg(Dlqfq8E9!P|(e!eXK@jNFAtv>c-4avtjqyt3mFimTlSUaD8b zw)p!C&^t9BNChu6zynEf&$`m{#JJi-AqXuKhMCM8OEaNmEUCyccH5*fi{Vrzv3nTh z>}08ajEY-Q#mO;`-0~>t1zo`{obTO z@?f%vS7%=N8~Op*`J;cyPCo|rWq8|$w%FIn#{!2+gC?~BC5hNMO&e&tA9(uopuDxE zt?lqk-EAh?EgGFp2Yj9Iz7I1k~3-D}9(sPZu~DKykrLPz(xV0Jx~vu_;O&Bx6fR*@3> z6HF`>v4&;FVlqSj6w3jm;%HL4&6roPJ=xcz9l7(U@^Y7$9AmSktE7QFuz(}!q@oD< zgKk`u=ewKvYe1DYP0G8)VArKY6vn%IBo$UZcyeYje{XHEJkI2bEGRF6H;nNU#$z#} zN*%X+8S5CNnQ7ed*`jm*)nIc`hQU~37M@*(3s-CdKGEO_pXk}sfSnVjg$4=JWHK29 ztIk5Pr&|!>z!6SVW&m^=oIwr4v(8Qsz%BU^q%L=NcY~}v$iL|A?G3nt!0D^h{>Fbq z*;zV{=9)&?X|#SIj_J8;!8yd{D+1M+t&QTbJy9}`;({#}Ep=8qMFHuZ<_vk&i6$5y zpZMYS77mAwm-xeA1b|orP-n1%L+(*Ewjl~IT6X~&R47UZgJGazj6VjPNQO!l9Off( zuL6Q+kdHC4kEGQMS8=@M2`b3IS=H+B7L>{X1Lqk9>FA#Gz3iD*@!Ny%sx7Og0C$dcc`V?zI#ZELnj^Qw`3PB~vW zsLCiUszS81*(=LRe4ePXQwfN|T;V*vtH$|lu=}IsJT31cMpBE!eFHN zpvGpVf9CNOf9R&1ujN(TB=i`B2Pz+HtiE)*aQMcpjhrzDl7fsR4z?QADLPc$=Of-C zZy?G%QwUuoSA~Gc7v*SoXkG`iSS(2+4nHT#IryPm#}pZYsCixdXZ+0SU-)N=ZP%KO zXe+x7j9DiiDj7t1v#L)Jequnz2Gi&&vOHcN=8lXl_b@O!4WyJCkLQF ztu?B1+80i7R5fsNZtW5EAr(mP5@~&&B1iSY-dKqY3I{q5NKMe7sH;FGAE1PUK1+-m zLCep1p=C*iDkM=QDN}JW|483D=*KY+38UCV8zSm54QUG|Y0DO$F+^osokkXi33&fm9mV z-$x2St77 zH=NN^OnfnL7W_YQMxO=AhEOWaYtHD_HCc6+SN#ol>hB!Y5D71hq$uHf452*4Lv_Ij zU{S6GtbR6DRsd^VQ9g|@9Nxn#%70NJ;#cM;5p0!UpM*2{#V}+YSgC~sMJT+v3cIS+ zT;bE}gU@=PXDc@UeudXr=7L$~g8zR|SIK(@@=tA#1A?f_E8ud*n(}0FBPh2#n`1JYV=|j#a>yI5g$}7BB^)r$sRiBn z)$;@C-*eRx4-#}!r~v+W#>*eDlXYi_3}-9tssmNC41BW;eE%{AK4llCRWPo@g~g%$ zhR9tbPW9UX)^?Q`#I)e5en{>CzgsdZv-yD(z@q^xaIhu^vf3IUxd+gC<1lR2EOc=e zx;WjB@n`Vpvq0e4)%53A6aIx3^5>PXjk-d-T7a*3P-J6w^>bGGqs|fs>qb&OuuE-S z){e_INTey2MQvl7+)&FlSf`tUc*y=l7M$k5#n~FEv&>ch66Pw6F`={G#s3)ZB1ZO7 zt3Yj_cItPL1y>R#fB`HJ)|7sb7`;vLy&Z78O{i-H=ka?!BTw-O*$FK9QUITUK)a@jL>|(|?zX|NnH2P0len9DB-}I;7%Jq1k zN2j>lu*GfsnS2U?6V}%vo}^_t6+lTil`m4p-OJxy=s9{24klDVL4^NZsZjz zf#AO%!^pOzdK^7^9}ah5NiWsM~mwMk0dYnGiHGe262 z-1bMWZ zm%X>n{OEU3-GVx~PuNrrqT(h~I;V8aZ&t-7kBtt#d zu$HbTqtHLeu_4v$o>2xnG399w=hoPITT5x} z=w&x{)^Pf^v^gD&PP>LpVh_{yZW;2j9(r_1KZQ+BkZ-Y9?JTp!VgJNMt7N;=p2s=e zcn@c~;QK<$bnSVCIEPbDvIPf9x`%6NtiQ1FJ!6i+-&%@qrr_HnUStN{Mv%u`kIGYW zF%JfHO=Z0$;u7O+jLkIr@w^7cy$#`^Gg_A2s1job>hp~bSN+B7p1v54<_oZU6T0(M z4@u$j$M*P9Qv)ZgkNtScER0e*z7gce{t~4$Uc2cRC?yul>IeeVzy@iw0FbOyD!Zx^ z;WSt#2`=CCd-&d_a6amX$ggjOw%x=8pebJ2RtC~&PUr|bkrUR@d)3QIe=oJc&dYO? z|3BvU0bt^BlKb(xs-C0Ucl^P{sKA0y29whtAi)5fkTZl-5@Op^TeG1MU>r zgncS9TT}aDG#YYQ*Y!W&X03m$0|e%P%ldyEaQt5uluN&VSBT+^t^{SyH3B1J(fJMQ z3@jK+Hyn{uy)gqdo`DfpRNt-adW9|PX7%wn^>W>{8!(5!=9HvScF)pcMEq^AyS)g_ zW|8@P7D!8_Al+jw@EAC&U6w&Vh9HuNm2xIXSUSsFM>O?xB*QsGx^a12mskz6sh+aa zmwg(}e~`T+SzbUR`O=fVbynT;lr<{Kl853w@hv|L@~*N(8l@0b44^iD@XC+607rV; zL%HhN#@((7i#bjE6BN5qHtxZ)96O2#Au~!Oqz0a$c=-!7@(?b~MUc6lhmP1j##lo>v2}n}9Y^qtlRtC*ssKzb* z1KTh=f1!tIV1cBx=7-%2oF2r6^v2pJVD5a0dh6~AN2Fz<1RdPvVH9b@+?XCvg0TG?a+gY<9>l?l6`r zbWSiZ@vWhbb!KSW6a6I8%Xq1wy|Ny-IhJUaZ1)u8mUduq9xt29pGBsvS=Z0X{=NY- zmV9-`I!jqNHI|d@nB0rrU!+=KkP;kgi(Z7={kCRf9fT{0kF}?=KRClp%H?<4bus30 zH&tJ{V0-}O%~3SUM_GBsoZ2;*S7RP|L|5zsZkHk2GLk5a(BaEd9sQ`C7c@$7U?^Uq zDy>nB+(#Ns=|8As@BR;9L-@b2vrbfFi6nI7xrK|n#BKQn-5-%`K~1ju)+Ny{$(eni z2qGY^_`n~am~TJ;=}na&KUN>6xo!sZ(m(bUJZnu-EMNK?jCn;gn$tvi#$VJVf6+Gj_5q@7P}N{c3$@fPgQ2mRUv}(+j>+guY9Q5|gBP7g%ekg?R#0_H&|ZH9QC>lp zKF>-p+1-|Kk$3fT&9^7IQF zQmP8k8~cGmy==m4SlU3{F$1$9M8;lY-^IpRHqcgy9mj{+vf~OrdIke6dPsw=Omsjn zJ8kxkOXrad;iEHAA#@%m-+M zZ?(fS0h$ev?aaGAX|YX_y4>T(QH59E74eMsPYC9FW?&J0dwRmwhR=g6ykBAPngXb* zA)e}IiXv6jYHAQ7ta_|dkXh{zviCa)HsRL91URA#QWpT-??1H`@6a0Rh+W$9PP#~; zWsfvtw?d^nkfU;KC9*`ipi#EVTjL1KyZ%)ANTMpkUNzW2QncdG;bMLcUE!?kH&8IU zk#@zDCkYw{6tfVu$arycR=C(;%p57tQwr(1W7+u*k2UUIayQD3Qss6;u|I$v= zeTRCQDs>1M+3`p2f^h*`P8If^4@I6^XUTk911-z5w%$^y<6W4E=l~bb?UwC&py7?* ziDv-e_MD5p=PKnOGVUD?L!Luw)(KvJnyC94hA?y)00%G3qcmn$6zml_aHreeH5I+`YFhg0ZFaAmoJZng%tt}z;3S}T;N&sFMTUT(0%mU*FERWYli^VCCN-1cJ00E_3@9i059loJSb*fCcRYV( zm{JkDf7dQG)h9tDf)KgH{dk?SH|#3PlT?Fb0iH+0^1yH%-v~Bm8^ACw_cZD$@EwZ! zDgt7k{o~tgfGZA~%TT2=YmKInw&y6WE6^1u$92VLeF%t94%n;Lpc8RV9gv&uNB_yL zLCZ@nqZ?_jAy3uR%4xmgc0pZCV#2NX4|gkG%IUTCU7t)ZOZIkj&u(?W&fk}o7(>q? z^u2ZHH{z!i9k8svVq-Uxv-?iF;fKn=MjJFrx9>2vi8oi7G_QYq`aNJ0}PpEu<^n)*$@B`_#-nFqwhs6Kti#68UxUXj7}{(2SHEk}Py4J@xFg60@*r zrnOzUOgF@Gs=2zAq6nU}zBaQ^a)1_w%|k3JYXlyXi^##xpW$4ED^10; zRI7Ls%YouU1k2MJDgIE98haC)L2D>l$8MuIP*St5%7ipW%06n^Sr5)=5K0sqVNd>x z<$dRpALV2G(V-W{=#8qOlY$KS)x7l@1$>}|1ZLEFS}!uB;nwHvbJLD2EDu=wMP*)b zY=iuGy8{(ywVqC(&6%u+X^*Pxj?x){tMyc7KC5IJZ~1wES@+lS^s{A{uw-?+KXv?} zcDc7zO_8|G+*c2uZ8SW>N11BTLa+=I)bhsT?tH8*hWbM-^27WKetlm2wa-6jXWT&% zPOUdohEZD+lZ9=k=z3;)dn&>+Z{=q6nhVjZcG;U)BrnlS9kUv~w zW1;kxxM6r>x+xcvTOE@FsM18^aLfpLev(EGBxtrhz-1a5B!zt}8WPCbNW`&ob%gHa zUYR|^EFiK(UY=XXw=Ft`#s&xPK}rc=?0}g%0J|iptOR}X3ylS)ll(^-%OpE6&}?ux z91u3p+0*dPQ>8ct$X=|TMC9;*L6MYSEhzR2tlg|n0`_BCuIWcKz-T$p-w*iVmv;i| z1u$EJN>s6viO!_x39^uuXxU{OE5NF$?r4;$B~--K4Cq;HEEeqNzYc1YL0ZR}yu-Vh zfpD#-+PyD7iP(Mx&}&ZdZ;MLtm+wy{)OGaJ@_cl#f%#BwLPsVwF+xCRii(Z~| z4y|DcU3$T!Fi#^lAEY(C7oI8pd0msN$y45ITGHR9Ik4KAw}m=4kG~Z}yPC@PLwhsA zWJ>`eFiaE?l9w+#7kdrRYW8kK4cL80=u5lRU?Ixt-=E4gKR)E;JJ1$>CeMu^OkKNl z!e*cOjfXM(fA6{2oqpe9xjQ^%mre0~4g08me0=cRSu|1h z0(q*ym5|e7m{JrXs+1&>+nw)f&geOu?A4CKWywj%4Ow&J70#3^;lY<32$81v%9ETg z-S#G=qS}omuNqkdCrNJ?NA_GN#j2oovuw}MJmNeJj7u%G8k&L~z)?$=p}yan)M0Nd z`_`1WOOR)?C~&T4r7gAlU4DQ(h}78g3Y&-AqNL+E^{)Q|mbP`{m4_N|Z-85(BgjD_ zYLN(=9GeVAX2=dDTbzbicSC(I$z^0do|5RxXe+&BMV7Z=d^FyG8?c!Qe!wu@*Q;v4 zd2Nm&RXd@%w10;P?I*v{n)t4yiFzH?!IIp1|Nah1fow;fQZVFbQZ)8Tmz^ATM9@SW zeJ~i*mOW#QtfGADZpayZljl?TbJ$8h}wy&|iZWdN{DU7xIlhyGiG|^?#aA-bS zicFBL&Ocv&ktDm(fiAu5$T()m>3VS!9@FuQ+qxme;*z*JA#vf)du~CL|WJB7>p_V%Q@!HMg z6oiFEFkt{xDb$>h3J^Jis*GS41SA>2Hvqf^`=C0GUd&9mR3X@=`2qnj>eUfqb*kt% zDL)sLu?o0HZ2s&fOjqu!kMzW1v7ky9L~0FFbybv4QjDk*US8+5%%%O+>c@-kEC9SB zleNqN7FUx>FSRd-nHVuA$5Fl@-;?n|VWWAZrh5R%%zLqmi!#arGGhit-_i-rW-!w@ zzJPl$qX@(TU~VHDyycqsqWuP~AH9?}Pxjtg0pz!KRaSdpjXJ!>1# z3&$h!-2D4G3MnOTZIL{?(OUBXA1~~jSB<%UoXD?T7eeVWsnA>=7M1Zr>j^P={O_NA zYr%e&^a5?J>M~*Dh26D=iMr3&CRZJAwy2WBJS5*D4B}+ADr}3)MOeK-^PLkjLQ5%f z3NW%o2}_GI^e}bw!L)0JT|HpaD3a9Qf1mxqHA&pr7qmW98ip+imguYxr<|wjxoa+3 z%#!i0!dnnK*CE zQawE@deF^=^eEs^*4EYrK&<-!I%Sl1I4TMo9BiRafMG&Zc>ri1bKsN;n*uceXY=)jJ0DGv_@Xy=StW*1b&ECj@ z3Y0n4P~=F}b$eyIK*g_DMLU@2H^C-)p07M;znxC|^Znxl>nS*lA5^~Q~uYz1!ps)KSWPpz^%4}6fnd16+ z?w(a0wY8O8<iI8 zuxxgy26T~m-O}&SA(CqJSSQ!#)%8ACwCZ9Mwp~671@w%;#m(lAU3tXqo;$By{@g^_ zht3Nl_z_=a`$18aB60b1(EI9g$rEvSL&f|ysFRBOJmMhJTKXO|HY0@946Qa*be-ZU zZXMJbBP(oJ_o7yr&$Q>n5Z+~911{fJsicI$$~R+EkOq}=X*`I((F7viJ?3NVn|bg3 zDIDjAepG2TY->*8i7n3~!h7t{y#@TPMD%*(C94m6B%(_nhg|bn%Rh*Q?2DgTkFZ?6 z_+&C3TD1Y}N*=!mx?>mPLP1mtII%}tJge1q7o zLV_@?L}p4?YAY)!aud}fV#%#tc8;v{67LyzxBr`BCt-8jnWR<<=}CfVYvTc&^c7(9 zEJTX>=uq3KbXBEFq3R)uaH@7RIxa20;Rlb7uXFF`(@H;^iW0j6o2R-Q#Ys92O%bwn{EZ z#UhIH7RRsQ2b9nJVxsYj{RCgk9$p6uRjc}Ps!<9)Xf(M^AgvTgE+OUjOUWnt@)QVr z#W@p|45?Ddvlf@F;Wrk}aO@h{Cza~4d-IBe3co^(iSitElVqucBvqrpbs@E5q{d$U z9YuNvxdiu7!3#0^g(k~0IR2e zrjw_Pyx2fJdA@Q|f`^cm^9q#{DMmR{UcnXr;*b6I8`flxp*g3z0#>`YWK>Kavti_0KMp{sQ_ zx~z85;?l`f3ccm<9YFB!DP;R1TxiJp9NUo?Cxi5Pv7Kf{#t;A(RCnGi`=BBig|&}QhIf#R9L zI-ETy^rv`5wHZnG7as?mC*ETn{XSY`%@J7_(??~Ou%}P&^Ig|j(g6oM#rQgLT;V*L zz=9%eq}oWIfn5=LN0;GL{5B^18>ns27Nb-Gelc>5(12MBu41g$tH29mDRMGhgi9zi z6m0`6-1gsb<^0sRLPP9ghPL8oZL-H;N>|t?$vJUMCyQdOxd}0FCd8RI2DZ*xEEm-! zG7rr=hp>KH*@FBb1nh!Hm81?h3Pkrw;r-Cw3Lp_6Y)k+_Ubx6O(7UpVN1;lwBpd0g zzAU;M1RsFv%YqFMVDoCgf9c$!p>kdD{a4^;S#)JV6cpYZNT;TNYO}m}N4F4Z4;6;% zLxJR!knSWvFiPmJAoK&SZlK@cl_Cle+K}1pP%sq4TLKew=f z+|0fvdjD7}v!p4I4X#2{e?gFRslTXCENKj6CzcGSslNcRc=Z=hd^V5`6s=tNi8#3j4;lyq2t4>21bGFqsIOqe z1aX2{(#P5IgGHT<%$ph5hYqq5)tI_6Gl+d(bFCD^4baP$p+*OLcBl(sz(C@V41(he zY5n=3Bd5UcRZk7tizMCG64$#P^f9$ep>enGG$yH`VoTf=QgAFNwpSUZb3Df;Y@nq zr+%P%*`?~3mRx}}Z~kgVypbb#A{Hg1uA-(l%90dCL5k{_4zH%o#7=v^6UZ!A=-z8v z!BqiawMEXg=stu9>L6&+=An7v=sr7~pTYU0ugW(l~>A1o@sZ-)0A~5S%>fs`LbXCVlyf}frOZO#rP?(w6mi;cW%>K58o=RSB zpG(j}=3OHd=vNKs7a96#Qy>96*lvtjW=9RAFlGzg!_*C4p||A6fM=#|PLJcA?BU^g z(_%+R2EOm>wI)&SMkZ0IYfUbi+Oc}Jq8Q3=s^w!xB*L_@kO9!CvRpwG7%S9}s5RaM z5#_~+$AB(LC`?9ntB0-MKw)+mXnNvpZGn&^U&D~sd3ibwWT)nza0Qwu=<|t=EeyOI z=s8BnhmPPz@O{VN&-VDKTdd)DyHq5tLG5?D!`|{k)p>67_@M_T*2iG!9`o?S-wl!+ zkQW7kkty@yJcmYx%gZ%F2N}D`GK0X%TnMI_1YC5~wWWB?WQUvLp&1_q#t;w2Feg*K zoOsrO1qR_Q&-K6{=rUF%cwAC9xX@hJ)9DeABivlUsl547*P@}P>13P*T?|l0dygM6 z3vi(qV{?f2vMp>57vk3t+z{1s6PKQ6mO#C?D1+|4J==Y#6_*RcYS zF;O{VqSoi@5eaTNnS;xT6K@x1IXTL}+;=K!$-io<1D>DIi%^@j2F*-Vcg?uX+og7T z&vNd*1ajkKNXF^c9wIh5zu`=Bvf@m9+0gycuIhSl-=|yd54YkXprzMS=jE8+e#wgx(fH2zsihD8-D13xRMfg?JpxrYx-=9# zJYz-302o86t89KT5M~L=qM(TCm^5aIQNDTE_-`i%Z5TXv7trk!uI;wUcRYJ)%bnh~ z6xC~uo>(&6+;);#vJJD;xVXil`eQKB)lJ?TKG89kvBwWM!2fx_oZfZ~N)8%83$7?lk;g=*}8>EQ9R zdziW-r(0{wuR|SyZ~U0L@1|wxam*i_wGOJC6u?>WO|oQMcKv`Kxq}Xupi&3`8Xw;4 zP+>6tqw@eNR5heyGurH4hg4ZHmTYoc!x(ZbmJ6$)9b3*rlCa+?Zv}=kfC^z*mvl(x zx0=z?7YQp973dL39Z?COYnZpF_>rFL7C^6%4mnz@>O*VIyiW{i20#RS8Y@kY{74J}D*QuJ?h%mSHUivf#=y`UKYlbmo7_p* z!%)7lx0eda3xS$Q`HoXDe@DoFJ$VDrjr?D}iIPY19O7sl;kpS&R?LyL)Da$nI@w~n zN`X`~AOVFxDO!|?EA9i@DJY#iMU)Q#+`#8|V5AL|D5Y{#N--R!+!qHPc7`d|r~sURjBpWb7vjcy5aNYEYR4EqxI`l0+FxMM^5@ z4qoPsrKhfBg0+P>Ba1fzBa3#{bxl7lE?2epFzx zPV}N6(g@(Dq5N5XT)g@(Q2P&bOzW%gu0*B8L{)EhUIuka>^rSTt20DT%n>G%) zd2_ptggz<`z(z2O()uz23{SA7>%QcC5y%!TsI00AHG;CR#vcl};%Ao1dJ`qrL?yg~ zrYX`>&kN8+fkvtLa_{a%I5SlwIy4tw+n1#js)pmUST__Rw31RHOg!;ZYT>dxw3%SV zd08I6u1Ff6TDU3CoP@^iF=DRaKX@mLZ=jgZQtl**GZD2RPcuxC!!TF@kI!6>?`^uO zxDl0y3uCtf*gH8`8&`s74DnBQ69YHgx_kHLYaKkK6r-y7TjOzm_uchb&)*HvrVi)d za-@mAwXCze{swlgUumjRvb66OtH7xnHLvbot@W9_!M*31l(Cg@05wxh2}5E@i1jjs zQ%Q*DI$1>BVTqkZ=nIgPsT6?OcH*^*<$}V95%Y#3?hHy)#;5r6>amYG zy?+jY>3)((`Iw^AWB(1e7F{%$8D(PJ*6D9(S>}ww4^%R14oeWHzpO2E7!mtCM1^QW z6I$!oYqKQHzsC9@t^mORAaUl0eUYLxJSf{!<593dZ zP3~S-vC)zmVd&VEH*^qpR4EH;4f`Ifm0bF?gs_JM#l;PWU@sODK zcG@H`GU|)Vm7jY8=7w?5YmGrt=ie)GU}>nKER=*H#l4Ac%3d91J%=$N1Sdst4N^f> s4eLyD;u42R%Ke~3sa$1lJZH}0lZ{*V-RPV<2mI~Yf!dz=*|Bf`ALK+N2><{9 literal 0 HcmV?d00001 diff --git a/logiklib/zeroasic/z1010/docs/z1010_Block_Diagram.png b/logiklib/zeroasic/z1010/docs/z1010_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0c1ff870aa9408ae3f5eb7eb10c8c739c94218 GIT binary patch literal 2091 zcmZ`)dpOhW8~@HRM1&UaUL>Z7oDWl$A+&e1G;H_J|YyyL*-nhQt#^Ylc5v*uP%|azKr!*zF{3|3a~#MN4JE z39JN})Nqw!X*hm5=ZA1YE%(0p;A%hll-9ZJMS!0zq!) z$~iX;baCfJ0LYe<92dPK7-R(kLd3ZeK(>60GH}GQ0|fx%!2dDwtp_VqWb>~?qNtA< z#y@o6G0NGVi2W+Ea#e@ljaAg&!334Se;3dghdYJlYYwF@U0xw`f!EJf#4B$ZiNdo| z&zCeXw4A_9*HWfZ*`&XvU!P%gmPz-}ncbdc+D*Tqyt56g^wW=}leMod{CVCXq9-VY z3>bG%V?RPQVqHyOx)G$^dKx>X516Fd9s4pA7GF`76*S)ouRjQBy^)ZpbojWm+_j<) zWBW*oc6_K-`xs4c9HszPx9BnP3`%g4mwTva_`TZYR%D^6bi?A2J}wM`l8OT#KGvGi z(5xoCHSwmR0*)B#KZoV)?m!($ZU}K>xSXvxI@FLHU|bzqHbx20gi!{FE%#f^!Dfc+ zn>gX;8~)$zQY}is_34nF=2KrEMa9N(v;XT{_d2)a+Kae#-YD&gLJgkDdtGDl?1y63 z3FW45%DnC-#dx>VYJL8Yi127rTWllbz7$tt3VgMGHCpyokfQ_clXNr7XOspM^d&OS zALRS1NIcD47Gmu7oUuY%OxR9qgr}$*WkD4>mhvIWIhV*O>ywyEm|HbUy0;~m4F#cw zLXR46pN!GO7L(k~j(F@52S&yPOOy5jQqv1EeM^1luDi(T&`#N|`hdD+Azp|@*3}iA&d>aWEQgH@k!`_i%Wnz6hBKD!?eFt)pHW36+W35B zg>3)0mE$${CL&tsH;+Y%&^{k0=OV&jBkl{rk0QdY`Jln5P3{E)Jxz;RX1I7#m7H+x zRIce_)<_yNR#`;t>@XN5#hbpWXRwh}b8hW?xld9nk>+7U@Pl(I@3d%gXWm2<--jzO z`U3)1K2A}onMHSqQ$=sCskkcq<ZYI~t@=?6-Vq;Pv&5 z3yMT?faU1gvQImH4vQ=buk2*qKUz)+S(SK%A|*3 z*BrD@CgxM_5JQkI2tFXhfO8B6%DE8#QxC zThC3-9g~xIxc8*<)k_j*Gxwaf+xHCBcd?{_q~k7zGkXp-M;5nCR)$jyzLy%aqzPh2 z`TP$z(dlhWl1C}x@f~o2{#V~RLp@ESe@@SI7wKwWBNnUrnG0XSr&tvCZF*R z_L5#E1yM`!$KC9^?CUr0%L1E-HLBA9f*1s&PmJDZ69r_%F+}-g#QBsXRz?>FPU@TM z?8@|{>^W18y}P>9SqUGVh*e%XRYIB?($o%2SdSUgXYoEMsz{dS zgIB2>B(2o`gPnQS^SjO2GZSyWTsP|$<|PL{qAWY&9;mTVU$;Hoz<_c$TP2;w2&Uh+ zS%JnKDhD5MrYZ-)V02UO^M0~`sQ)#7Z5HcJbxuKR8&ifF@(n@-Hsr*-dqODd=8rB6 zs0x!-JVv>!?zCM%dk$ zrr+=Fgz7|e8xl=Gkk|sKs_e8Fon5GtH!?_K-%aG9z8rSC91z8GO=UySTC7#yqr` z<2DN$6@A{2_k*8l>Sxk}@Hp{G46xX_jX>L)-xI1kvpm@;W7FB~jZ2+gq^S=-GTshY z`wj7?78X*UF0TjrkW6acX! zSgkH6vl~DMo-$S6uB9~+ zPT!*k0Mq#@R!ZCA$9?d5djVjn_mrsj0d||xjTlc|8?JGoXs`mVPH4wkMBwFr0k1dK A!2kdN literal 0 HcmV?d00001 diff --git a/logiklib/zeroasic/z1012/docs/z1012_Block_Diagram.png b/logiklib/zeroasic/z1012/docs/z1012_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..71dcfd7310b565b1c2a3be53a228fe080fb25da6 GIT binary patch literal 55932 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

!|eoz+!KSSX4Lm5AKnIG}`77?e& z$jB4?C(@cPlyn2LEfjf_SJ#qLQ@ixZSYCO22BjxkeU^&a4)Ey5&LK87HXfo4ocuJf zt*x!S%>%ai`T6gGtpe_)d{XX0l_?&7=-|PFC2lT|Ti9J&X9ELtE8q+=J6)rqqCi6V zz>KCaNCh`6q=F4M3Q})NL78B0@1fbrL8z`YJ`+N*E!-cpujJg%il9#Tke5mJd7@t-)<}vo(l|KJYEvih- zB)*P8ANJg51A`fe!U{1&K0w6+*|f#Ke`qXFBOxv$)Yia4A%XS*i0Z$hS8gh|jLF)5 z387XFXkEz{Qt+ufj^O(gVzv2`4`Wz+q#m}_rN!e7 zr2QCo3Hb+g+P=3=iH7LG5?w@}EFMkslYFYCYQ@6)@|o8%@xQ~@AEw{*e0=b^Q3XGl z`+MsZ&E!Y)xlxFeyvU^yZ)%3I9^43R8K;wNY}4H)!jiDM6p5~u_<|%gj|&%>l8t-5 zvYhiXV=9_ip-nj^c_OX!-zT_e<{eGyP8)%C1e@{64p0Uy?ANWE-f9 zY~1_3A2#O{%(=ZgR;_Rg8}9)QYNo{o$jXAagE% zIIQ9RJWFkodY5SDl7PO;Y>igqZb_b>8fvZJw(73S(kn9+wPfWD-wcVv^;@v=zF)=y z+J}+*aK5lMFQq@tFs3>)xXhVq7}9+&+tv{z-(U6L|LzzU=~V^7g+H@3`Lf30a01gv zJGuYa<6eEgDJ-_HK)v@^?gpNfP|ZofQ?`B99xxB%?$KLN)n~u#dCy`h_^kXSV1&f=Rs#HgFQ8NbojZlh>U}w231l z7~$KdIYoht2_6Sf-*GUV0PlQ!^{GZi^Mx@2R-KoZclD-`R|e))jb#6m0?6gCBaiL` zrPV@IZ-rlpWiI#{VhS=it@*XQys(1ngGx+USs5=_a&&ihZ+JP@9%`$4zSzBcLRm}? zmvJIVM%6?u?Q%-ZeZ_88Owy?o)0{&f>BS=f!m8#fZ2cNq_$&QDdcG0x z4l~B-AdLl__GBc1TU8RTu1Kk!4M<+dz4=jX8%ESDar5()TIgaAg6&4FY)vRvRZxj> z>n?VC{a`y_g%rDW+g^O0?t#RyLSLd97#2fy^m0%v&9f@|L;gGp`8WWB8a5KT%_pp2 z9%2SM1r`{_!jZMPiZ(`2m0?Je*kH%;EZ54xt>jm|n6R>8SZ#E-VwmMzcZ}Yf7Penl zIud8bWL!($26Kg}nhDe_c=a$};?G&4_;Igh_=gOB<_8uqNY1H!7jeey$B<2zEi=rl z%eg!3kNFVq`Jbru(Z1J$+T0%E%QE19YLuM-#03MJVlu-S_FJY z#y;C@fG)2#wT)F%n5EESh7{+w8&;L7iP-=wy#y!x53Rj2&xbZOa+j{3L3CmqcW9$Pd&KfSzwQ309yW=* zYMxwqkbNgJr-+3+m1~08N}%(t7lFaQ3Ddo}fT6z7-~TUk3lI+@nS|=ObS_IBIW5ce zV?Oe#`ycNDwiyOo(d28u&P}CM4%czVO{nZRJnZc&e(pRKF{5Y4eyYx)l8!jWQ)gXd z?J6%3Y^XuQ*Awqt@aQgb8gHhC5Hq}6>Y=Y=9i`lg5Me3|fes1$>b+(u-d%zCaOkfsa=c2j2+Q@N6 zN^FGjhY0VpBtj!l%7wZ}PL5#NHC(2m9Va%L(?wO65WKe>tJq(7XCT6OQJTm*Zr;fV zxr;GtmSmBGZk&*T&QhJLOVMnhjvN{5WuB$Q+1_QobKObGj!nz(C*R%)plR)0w34x4 zz}NV@@3FgEKH#QJVEauluMk+zr=q=cLBmfq&cy(rynNcCokEh(Z4Mk3L9+P#*jLO5 ztO!}=BUyGM^6j)3d(MDeL6|3b1PzPDA)okw{vZOeC=-Mk=ARFSc^Ocbl4*9Q7$+^X zde%UVIh_J;h-N=A@#C~m)M()M++e00mngB<_Ue9-Fl@PGhUamDa+1O;cK5+9XbjL%uN(x8iUUvU7k2esPH8C

``5d^ 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 literal 0 HcmV?d00001 diff --git a/logiklib/zeroasic/z1060/docs/z1060_Block_Diagram.png b/logiklib/zeroasic/z1060/docs/z1060_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..58bf1a6b91a3eec12ee8b98af138bfc44428ed85 GIT binary patch literal 27039 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 UBCl`>@KPlPPgg&ebxsLQ0KK>{5&!@I literal 0 HcmV?d00001 diff --git a/logiklib/zeroasic/z1062/docs/z1062_Block_Diagram.png b/logiklib/zeroasic/z1062/docs/z1062_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8183122af3767788a5259820d0d7dfd8742966a9 GIT binary patch literal 55916 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 Date: Thu, 11 Sep 2025 21:44:01 -0400 Subject: [PATCH 04/21] Add z1002 README --- logiklib/zeroasic/z1002/README.md | 96 +++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 logiklib/zeroasic/z1002/README.md diff --git a/logiklib/zeroasic/z1002/README.md b/logiklib/zeroasic/z1002/README.md new file mode 100644 index 0000000..bbbfcfb --- /dev/null +++ b/logiklib/zeroasic/z1002/README.md @@ -0,0 +1,96 @@ +# Z1002 eFPGA + +The Z1002 eFPGA is a fixed-size eFPGA architecture consisting of configurable logic blocks (CLBs), I/O blocks (IOBs), and a clock I/O block for clock distribution. + +## Z1002 Architecture + +A summary of Z1002 resources is shown in the table below + +Resource Type | Count +---------------------|------ +Lookup Tables (LUTs) | 8192 +Registers | 8192 +GPIOs | 2048 +Max Clock Domains | 4 + +The Z1002 architecture XML file provides a complete specification of how logic resources are arranged in this grid, the port lists of all logic resources, and how logic resources are organized and connected. Hierarchical representations of logic blocks are provided where needed to enable correct, efficient packing and placement of a user's netlist. The architecture XML also provides a delay model for the eFPGA and FASM feature metadata to enable logic block bitstream generation. The Z1002 routing graph XML file encapsulates a complete model of the eFPGA interconnect architecture and contains the FASM feature metadata for interconnect bitstream generation. + +The following sections summarize the architecture features of Z1002. + +### Array and Grid Model + +Z1002 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of CLBs is surrounded on the perimeter by four banks of IOBs, one per side of the array. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where the clock IOB is placed. + +![z1002_array_diagram](./z1002_Block_Diagram.png ) + +For modeling in VPR, this array of components is arranged on a 36x36 (X,Y) grid. The lower left corner of Z1002 (the clock IOB) is located at (1,1) on this grid. All locations at X=0, X=19, Y=0, and Y=19 are modeled as empty. This perimeter of empty locations is required to model the architecture in VPR correctly. + +### Logic Resource Types + +Brief descriptions and block diagrams for Z1002 logic resources are shown below. + +#### Configurable Logic Block (CLB) + +Each configurable logic block (CLB) consists of 8 4-input basic logic elements (BLEs). A block diagram of the BLE is shown below. The BLE contains a 4-input lookup table (LUT) a configurable flip-flop, and a multiplexer that selects whether the primary output of the BLE comes from the flip-flop or directly from the LUT. The flip-flop output is also routed out of the BLE as a secondary output; this secondary output is connected only to local interconnect in the CLB. + +![ble_block_diagram](./BLE4_Block_Diagram.png ) + +The BLEs in a CLB share 18 common inputs through the CLB local interconnect, an array of multiplexers referred to as the CLB crossbar. Each BLE input is driven by a dedicated crossbar multiplexer that selects from a subset of the CLB inputs, BLE primary outputs, and BLE secondary outputs. The CLB inputs are subdivided between north, south, east, and west sides of the CLB to improve their interface to the eFPGA global interconnect. The BLE primary outputs are also outputs of the CLB and route directly to eFPGA global interconnect. The overall CLB block diagram is shown below. The BLE output feedback paths to the crossbar are not shown in the diagram to preserve diagram clarity. + +![clb_block_diagram](./CLB4_Block_Diagram.png) + +#### I/O Block (IOB) + +General purpose I/O blocks (IOBs) are provided to provide a consistent signal interface between signals external to the eFPGA and reconfigurable logic. Each IOB contains eight iopad primitives. Each iopad primitive can operate either in input mode or output mode. The IOB thus supports a maximum of eight user I/O signals in any combination of inputs and outputs. During RTL-to-bitstream generation, each top level RTL port directly maps to an iopad primitives via pin constraints. + +The figure below shows a block diagram of the iopad primitive. Each iopad enables a single signal to be connected . The data direction is determined during bitstream generation and stored in a configuration bit that is directly wired to an output enable signal pad_oe that is accessible as a top level signal of the eFPGA. When in input mode, the pad_in signal is received from external logic and passed to eFPGA logic via the inpad signal. Similarly, in output mode the outpad signal is received from eFPGA logic and passed to pad_out. + +![iob_block_diagram](./IOB_Block_Diagram.png) + +#### Clock I/O Block (Clock IOB) + +A dedicated I/O block is provided that is only used for delivering clocks to the programmable logic. This I/O block is referred to as the clock IOB. It is constructed from the same iopad primitive as the general purpose I/O blocks, but internally connected to the eFPGA clock network rather than to programmable interconnect. + +## Z1002 Pin Constraints + +Z1002 implements the signals in the table below as valid pin names for specifying pin constraints in a JSON pin constraints file (PCF). Standard bus notatation using square brackets is required for all pins in the PCF. For example, to constrain a user input signal `foo` to bit 17 of `gpio_in_east`, the following content should be included in the PCF file + +``` + "foo": { + "direction": "input", + "pin": "gpio_in_east[17]" + }, +``` + +> **_NOTE:_** User clock signals must be mapped to the gpio_in_clk bus + +Pin Name | Direction | MSB | LSB | Purpose +--------------------------|-----------|-----|-----|--------- +gpio_in_clk | input | 3 | 0 | User clocks +gpio_in_south | input | 511 | 0 | South side GPIO inputs +gpio_in_north | input | 511 | 0 | North side GPIO inputs +gpio_in_west | input | 511 | 0 | West side GPIO inputs +gpio_in_east | input | 511 | 0 | East side GPIO inputs +gpio_out_south | output | 511 | 0 | South side GPIO outputs +gpio_oe_south | output | 511 | 0 | South side GPIO output enables +gpio_out_north | output | 511 | 0 | North side GPIO outputs +gpio_oe_north | output | 511 | 0 | North side GPIO output enables +gpio_out_west | output | 511 | 0 | West side GPIO outputs +gpio_oe_west | output | 511 | 0 | West side GPIO output enables +gpio_out_east | output | 511 | 0 | East side GPIO outputs +gpio_oe_east | output | 511 | 0 | East side GPIO output enables + +## Z1002 Bitstream Mapping + +The Z1002 bitstream format is organized into a four-dimensional array of configuration bits. The four dimensions are the VPR grid X coordinate, VPR grid Y coordinate, word address, and bit index. + +The table below shows the minimum and maximum array values for this array. Note that not all positions in the array contain valid configuration bits. + +Index | Min | Max | +------------|------|-----| +X | 0 | 35 | +Y | 0 | 35 | +Address | 0 | 142 | +Bit Index | 0 | 7 | + +The Z1002 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1002 VPR architecture file and routing graph XML file. \ No newline at end of file From fc0767998ef566c74dc66fde3d3dd035433bd0ef Mon Sep 17 00:00:00 2001 From: Peter Grossmann <105726632+petergrossmann21@users.noreply.github.com> Date: Thu, 11 Sep 2025 21:46:27 -0400 Subject: [PATCH 05/21] Update image links --- logiklib/zeroasic/z1002/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/logiklib/zeroasic/z1002/README.md b/logiklib/zeroasic/z1002/README.md index bbbfcfb..bbd42dd 100644 --- a/logiklib/zeroasic/z1002/README.md +++ b/logiklib/zeroasic/z1002/README.md @@ -21,7 +21,7 @@ The following sections summarize the architecture features of Z1002. Z1002 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of CLBs is surrounded on the perimeter by four banks of IOBs, one per side of the array. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where the clock IOB is placed. -![z1002_array_diagram](./z1002_Block_Diagram.png ) +![z1002_array_diagram](./docs/z1002_Block_Diagram.png ) For modeling in VPR, this array of components is arranged on a 36x36 (X,Y) grid. The lower left corner of Z1002 (the clock IOB) is located at (1,1) on this grid. All locations at X=0, X=19, Y=0, and Y=19 are modeled as empty. This perimeter of empty locations is required to model the architecture in VPR correctly. @@ -33,11 +33,11 @@ Brief descriptions and block diagrams for Z1002 logic resources are shown below. Each configurable logic block (CLB) consists of 8 4-input basic logic elements (BLEs). A block diagram of the BLE is shown below. The BLE contains a 4-input lookup table (LUT) a configurable flip-flop, and a multiplexer that selects whether the primary output of the BLE comes from the flip-flop or directly from the LUT. The flip-flop output is also routed out of the BLE as a secondary output; this secondary output is connected only to local interconnect in the CLB. -![ble_block_diagram](./BLE4_Block_Diagram.png ) +![ble_block_diagram](../z1000/docs/BLE4_Block_Diagram.png ) The BLEs in a CLB share 18 common inputs through the CLB local interconnect, an array of multiplexers referred to as the CLB crossbar. Each BLE input is driven by a dedicated crossbar multiplexer that selects from a subset of the CLB inputs, BLE primary outputs, and BLE secondary outputs. The CLB inputs are subdivided between north, south, east, and west sides of the CLB to improve their interface to the eFPGA global interconnect. The BLE primary outputs are also outputs of the CLB and route directly to eFPGA global interconnect. The overall CLB block diagram is shown below. The BLE output feedback paths to the crossbar are not shown in the diagram to preserve diagram clarity. -![clb_block_diagram](./CLB4_Block_Diagram.png) +![clb_block_diagram](../z1000/docs/CLB4_Block_Diagram.png) #### I/O Block (IOB) @@ -45,7 +45,7 @@ General purpose I/O blocks (IOBs) are provided to provide a consistent signal in The figure below shows a block diagram of the iopad primitive. Each iopad enables a single signal to be connected . The data direction is determined during bitstream generation and stored in a configuration bit that is directly wired to an output enable signal pad_oe that is accessible as a top level signal of the eFPGA. When in input mode, the pad_in signal is received from external logic and passed to eFPGA logic via the inpad signal. Similarly, in output mode the outpad signal is received from eFPGA logic and passed to pad_out. -![iob_block_diagram](./IOB_Block_Diagram.png) +![iob_block_diagram](../z1000/docs/IOB_Block_Diagram.png) #### Clock I/O Block (Clock IOB) @@ -93,4 +93,4 @@ Y | 0 | 35 | Address | 0 | 142 | Bit Index | 0 | 7 | -The Z1002 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1002 VPR architecture file and routing graph XML file. \ No newline at end of file +The Z1002 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1002 VPR architecture file and routing graph XML file. From 1f642754d8ca6f62afa561ce0b9b790204ccb3f3 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:47:08 -0400 Subject: [PATCH 06/21] Add hard macro block diagrams --- .../zeroasic/z1010/docs/BRAM_Block_Diagram.png | Bin 0 -> 10475 bytes .../zeroasic/z1010/docs/DSP_Block_Diagram.png | Bin 0 -> 17639 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 logiklib/zeroasic/z1010/docs/BRAM_Block_Diagram.png create mode 100644 logiklib/zeroasic/z1010/docs/DSP_Block_Diagram.png diff --git a/logiklib/zeroasic/z1010/docs/BRAM_Block_Diagram.png b/logiklib/zeroasic/z1010/docs/BRAM_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f736e46d84f4722126b38c68dca592fca714d3 GIT binary patch literal 10475 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 literal 0 HcmV?d00001 diff --git a/logiklib/zeroasic/z1010/docs/DSP_Block_Diagram.png b/logiklib/zeroasic/z1010/docs/DSP_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..2161108771ab7b534c618f0f3170e04429b7e1f2 GIT binary patch literal 17639 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 literal 0 HcmV?d00001 From a487ff3d25d26538ce0cc422518208d20bdec6cf Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:49:06 -0400 Subject: [PATCH 07/21] Add z1010 README --- logiklib/zeroasic/z1010/README.md | 127 ++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 logiklib/zeroasic/z1010/README.md diff --git a/logiklib/zeroasic/z1010/README.md b/logiklib/zeroasic/z1010/README.md new file mode 100644 index 0000000..d31f1ca --- /dev/null +++ b/logiklib/zeroasic/z1010/README.md @@ -0,0 +1,127 @@ +# Z1010 eFPGA + +The Z1010 eFPGA is a fixed-size eFPGA architecture consisting of configurable logic blocks (CLBs), I/O blocks (IOBs), and a clock I/O block for clock distribution. + +## Z1010 Architecture + +A summary of Z1010 resources is shown in the table below + +Resource Type | Count +---------------------|------ +Lookup Tables (LUTs) | 1664 +Registers | 1664 +GPIOs | 1024 +DSPs | 4 +BRAMs (16Kbit) | 4 +Max Clock Domains | 4 + +The Z1010 architecture XML file provides a complete specification of how logic resources are arranged in this grid, the port lists of all logic resources, and how logic resources are organized and connected. Hierarchical representations of logic blocks are provided where needed to enable correct, efficient packing and placement of a user's netlist. The architecture XML also provides a delay model for the eFPGA and FASM feature metadata to enable logic block bitstream generation. The Z1010 routing graph XML file encapsulates a complete model of the eFPGA interconnect architecture and contains the FASM feature metadata for interconnect bitstream generation. + +The following sections summarize the architecture features of Z1010. + +### Array and Grid Model + +Z1010 logic resources are organized into an 18x18 array of components, depicted in the figure below. A 16x16 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. + +![z1010_array_diagram](./docs/z1010_Block_Diagram.png ) + +For modeling in VPR, this array of components is arranged on a 20x20 (X,Y) grid. The lower left corner of Z1010 (the clock IOB) is located at (1,1) on this grid. All locations at X=0, X=19, Y=0, and Y=19 are modeled as empty. This perimeter of empty locations is required to model the architecture in VPR correctly. + +### Logic Resource Types + +Brief descriptions and block diagrams for Z1010 logic resources are shown below. + +#### Configurable Logic Block (CLB) + +Each configurable logic block (CLB) consists of 8 4-input basic logic elements (BLEs). A block diagram of the BLE is shown below. The BLE contains a 4-input lookup table (LUT) a configurable flip-flop, and a multiplexer that selects whether the primary output of the BLE comes from the flip-flop or directly from the LUT. The flip-flop output is also routed out of the BLE as a secondary output; this secondary output is connected only to local interconnect in the CLB. + +![ble_block_diagram](../z1000/docs/BLE4_Block_Diagram.png ) + +The BLEs in a CLB share 18 common inputs through the CLB local interconnect, an array of multiplexers referred to as the CLB crossbar. Each BLE input is driven by a dedicated crossbar multiplexer that selects from a subset of the CLB inputs, BLE primary outputs, and BLE secondary outputs. The CLB inputs are subdivided between north, south, east, and west sides of the CLB to improve their interface to the eFPGA global interconnect. The BLE primary outputs are also outputs of the CLB and route directly to eFPGA global interconnect. The overall CLB block diagram is shown below. The BLE output feedback paths to the crossbar are not shown in the diagram to preserve diagram clarity. + +![clb_block_diagram](../z1000/docs/CLB4_Block_Diagram.png) + +#### DSP Block + +Each DSP block consists of one configurable arithmetic circuit whose operating modes are suitable for various types of digital signal processing. DSP block modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the DSP block. + +A block diagram of the DSP block is shown below. Three data inputs, a clock, and an asynchronous reset signal are provided. All inputs may optionally be re-registered; synthesis software infers when these registers should be used. Two of the three inputs serve primarily as inputs to an 18x18 multiplier; however, they may also be routed to an adder circuit to use the block only for wide addition operations. These two inputs are 18 bits wide. A third 40-bit input is provided to enable fused multiply-add operations. Additional operating modes enable the block to function as an accumulator or a multiply-accumulator. For high-performance DSP, the multiply-accumulator mode may optionally be pipelined; users must model this pipelining in their HDL code to ensure correct inference. + +![dsp_block_diagram](./docs/DSP_Block_Diagram.png ) + +#### BRAM + +Each block BRAM (BRAM) consists of one configurable SRAM circuit. The underlying memory primitive is a 1K x 16 bit true dual port memory macro. Control circuitry surrounding this macro enables emulation of single port RAM and dual port RAM. Emulation of other memory dimensions with the same number of bits is also supported; a complete table of supported memory sizes is shown below. For memory widths wider than 8 bits, byte enables are supported to individually write specific bytes at a given address. + +Word Width | Data Width +---------------------|----------- +512 | 32* +1024 | 16 +2048 | 8 +4096 | 4 +8192 | 2 +16384 | 1 + +*supported in single port mode only + +BRAM modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the BRAM. To ensure that the desired BRAM mode is selected, consult synthesis software documentation for HDL style guidelines. + +A block diagram of the BRAM is shown below. The BRAM has dedicated I/O interfaces for two complete SRAM ports. Note that not all signals may be used in all modes. Dedicated signals are provided for clock enable, read enable, write enable, and byte enables in addition to the signaling for clock, address, and data. Depending on HDL coding styles chosen, users may include or exclude clock enable, read enable, and/or byte enables signals from their designs and rely on synthesis software to connect them to constant values that ensure user functionality is preserved. + +![bram_block_diagram](./docs/BRAM_Block_Diagram.png ) + +#### I/O Block (IOB) + +General purpose I/O blocks (IOBs) are provided to provide a consistent signal interface between signals external to the eFPGA and reconfigurable logic. Each IOB contains eight iopad primitives. Each iopad primitive can operate either in input mode or output mode. The IOB thus supports a maximum of eight user I/O signals in any combination of inputs and outputs. During RTL-to-bitstream generation, each top level RTL port directly maps to an iopad primitives via pin constraints. + +The figure below shows a block diagram of the iopad primitive. Each iopad enables a single signal to be connected . The data direction is determined during bitstream generation and stored in a configuration bit that is directly wired to an output enable signal pad_oe that is accessible as a top level signal of the eFPGA. When in input mode, the pad_in signal is received from external logic and passed to eFPGA logic via the inpad signal. Similarly, in output mode the outpad signal is received from eFPGA logic and passed to pad_out. + +![iob_block_diagram](../z1000/docs/IOB_Block_Diagram.png) + +#### Clock I/O Block (Clock IOB) + +A dedicated I/O block is provided that is only used for delivering clocks to the programmable logic. This I/O block is referred to as the clock IOB. It is constructed from the same iopad primitive as the general purpose I/O blocks, but internally connected to the eFPGA clock network rather than to programmable interconnect. + +## Z1010 Pin Constraints + +Z1010 implements the signals in the table below as valid pin names for specifying pin constraints in a JSON pin constraints file (PCF). Standard bus notatation using square brackets is required for all pins in the PCF. For example, to constrain a user input signal `foo` to bit 17 of `gpio_in_east`, the following content should be included in the PCF file + +``` + "foo": { + "direction": "input", + "pin": "gpio_in_east[17]" + }, +``` + +> **_NOTE:_** User clock signals must be mapped to the gpio_in_clk bus + +Pin Name | Direction | MSB | LSB | Purpose +--------------------------|-----------|-----|-----|--------- +gpio_in_clk | input | 3 | 0 | User clocks +gpio_in_south | input | 255 | 0 | South side GPIO inputs +gpio_in_north | input | 255 | 0 | North side GPIO inputs +gpio_in_west | input | 255 | 0 | West side GPIO inputs +gpio_in_east | input | 255 | 0 | East side GPIO inputs +gpio_out_south | output | 255 | 0 | South side GPIO outputs +gpio_oe_south | output | 255 | 0 | South side GPIO output enables +gpio_out_north | output | 255 | 0 | North side GPIO outputs +gpio_oe_north | output | 255 | 0 | North side GPIO output enables +gpio_out_west | output | 255 | 0 | West side GPIO outputs +gpio_oe_west | output | 255 | 0 | West side GPIO output enables +gpio_out_east | output | 255 | 0 | East side GPIO outputs +gpio_oe_east | output | 255 | 0 | East side GPIO output enables + +## Z1010 Bitstream Mapping + +The Z1010 bitstream format is organized into a four-dimensional array of configuration bits. The four dimensions are the VPR grid X coordinate, VPR grid Y coordinate, word address, and bit index. + +The table below shows the minimum and maximum array values for this array. Note that not all positions in the array contain valid configuration bits. + +Index | Min | Max | +------------|------|-----| +X | 0 | 19 | +Y | 0 | 19 | +Address | 0 | 111 | +Bit Index | 0 | 7 | + +The Z1010 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1010 VPR architecture file and routing graph XML file. \ No newline at end of file From 1192d0192f709c8ec531bc2edcd5978653c17cde Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:54:51 -0400 Subject: [PATCH 08/21] Add z1012 README --- logiklib/zeroasic/z1010/README.md | 2 +- logiklib/zeroasic/z1012/README.md | 127 ++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 logiklib/zeroasic/z1012/README.md diff --git a/logiklib/zeroasic/z1010/README.md b/logiklib/zeroasic/z1010/README.md index d31f1ca..133423d 100644 --- a/logiklib/zeroasic/z1010/README.md +++ b/logiklib/zeroasic/z1010/README.md @@ -121,7 +121,7 @@ Index | Min | Max | ------------|------|-----| X | 0 | 19 | Y | 0 | 19 | -Address | 0 | 111 | +Address | 0 | 115 | Bit Index | 0 | 7 | The Z1010 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1010 VPR architecture file and routing graph XML file. \ No newline at end of file diff --git a/logiklib/zeroasic/z1012/README.md b/logiklib/zeroasic/z1012/README.md new file mode 100644 index 0000000..d457a71 --- /dev/null +++ b/logiklib/zeroasic/z1012/README.md @@ -0,0 +1,127 @@ +# Z1012 eFPGA + +The Z1012 eFPGA is a fixed-size eFPGA architecture consisting of configurable logic blocks (CLBs), I/O blocks (IOBs), and a clock I/O block for clock distribution. + +## Z1012 Architecture + +A summary of Z1012 resources is shown in the table below + +Resource Type | Count +---------------------|------ +Lookup Tables (LUTs) | 6656 +Registers | 6656 +GPIOs | 2048 +DSPs | 16 +BRAMs (16Kbit) | 16 +Max Clock Domains | 4 + +The Z1012 architecture XML file provides a complete specification of how logic resources are arranged in this grid, the port lists of all logic resources, and how logic resources are organized and connected. Hierarchical representations of logic blocks are provided where needed to enable correct, efficient packing and placement of a user's netlist. The architecture XML also provides a delay model for the eFPGA and FASM feature metadata to enable logic block bitstream generation. The Z1012 routing graph XML file encapsulates a complete model of the eFPGA interconnect architecture and contains the FASM feature metadata for interconnect bitstream generation. + +The following sections summarize the architecture features of Z1012. + +### Array and Grid Model + +Z1012 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. + +![z1012_array_diagram](./docs/z1012_Block_Diagram.png ) + +For modeling in VPR, this array of components is arranged on a 36x36 (X,Y) grid. The lower left corner of Z1012 (the clock IOB) is located at (1,1) on this grid. All locations at X=0, X=19, Y=0, and Y=19 are modeled as empty. This perimeter of empty locations is required to model the architecture in VPR correctly. + +### Logic Resource Types + +Brief descriptions and block diagrams for Z1012 logic resources are shown below. + +#### Configurable Logic Block (CLB) + +Each configurable logic block (CLB) consists of 8 4-input basic logic elements (BLEs). A block diagram of the BLE is shown below. The BLE contains a 4-input lookup table (LUT) a configurable flip-flop, and a multiplexer that selects whether the primary output of the BLE comes from the flip-flop or directly from the LUT. The flip-flop output is also routed out of the BLE as a secondary output; this secondary output is connected only to local interconnect in the CLB. + +![ble_block_diagram](../z1000/docs/BLE4_Block_Diagram.png ) + +The BLEs in a CLB share 18 common inputs through the CLB local interconnect, an array of multiplexers referred to as the CLB crossbar. Each BLE input is driven by a dedicated crossbar multiplexer that selects from a subset of the CLB inputs, BLE primary outputs, and BLE secondary outputs. The CLB inputs are subdivided between north, south, east, and west sides of the CLB to improve their interface to the eFPGA global interconnect. The BLE primary outputs are also outputs of the CLB and route directly to eFPGA global interconnect. The overall CLB block diagram is shown below. The BLE output feedback paths to the crossbar are not shown in the diagram to preserve diagram clarity. + +![clb_block_diagram](../z1000/docs/CLB4_Block_Diagram.png) + +#### DSP Block + +Each DSP block consists of one configurable arithmetic circuit whose operating modes are suitable for various types of digital signal processing. DSP block modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the DSP block. + +A block diagram of the DSP block is shown below. Three data inputs, a clock, and an asynchronous reset signal are provided. All inputs may optionally be re-registered; synthesis software infers when these registers should be used. Two of the three inputs serve primarily as inputs to an 18x18 multiplier; however, they may also be routed to an adder circuit to use the block only for wide addition operations. These two inputs are 18 bits wide. A third 40-bit input is provided to enable fused multiply-add operations. Additional operating modes enable the block to function as an accumulator or a multiply-accumulator. For high-performance DSP, the multiply-accumulator mode may optionally be pipelined; users must model this pipelining in their HDL code to ensure correct inference. + +![dsp_block_diagram](./docs/DSP_Block_Diagram.png ) + +#### BRAM + +Each block BRAM (BRAM) consists of one configurable SRAM circuit. The underlying memory primitive is a 1K x 16 bit true dual port memory macro. Control circuitry surrounding this macro enables emulation of single port RAM and dual port RAM. Emulation of other memory dimensions with the same number of bits is also supported; a complete table of supported memory sizes is shown below. For memory widths wider than 8 bits, byte enables are supported to individually write specific bytes at a given address. + +Word Width | Data Width +---------------------|----------- +512 | 32* +1024 | 16 +2048 | 8 +4096 | 4 +8192 | 2 +16384 | 1 + +*supported in single port mode only + +BRAM modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the BRAM. To ensure that the desired BRAM mode is selected, consult synthesis software documentation for HDL style guidelines. + +A block diagram of the BRAM is shown below. The BRAM has dedicated I/O interfaces for two complete SRAM ports. Note that not all signals may be used in all modes. Dedicated signals are provided for clock enable, read enable, write enable, and byte enables in addition to the signaling for clock, address, and data. Depending on HDL coding styles chosen, users may include or exclude clock enable, read enable, and/or byte enables signals from their designs and rely on synthesis software to connect them to constant values that ensure user functionality is preserved. + +![bram_block_diagram](./docs/BRAM_Block_Diagram.png ) + +#### I/O Block (IOB) + +General purpose I/O blocks (IOBs) are provided to provide a consistent signal interface between signals external to the eFPGA and reconfigurable logic. Each IOB contains eight iopad primitives. Each iopad primitive can operate either in input mode or output mode. The IOB thus supports a maximum of eight user I/O signals in any combination of inputs and outputs. During RTL-to-bitstream generation, each top level RTL port directly maps to an iopad primitives via pin constraints. + +The figure below shows a block diagram of the iopad primitive. Each iopad enables a single signal to be connected . The data direction is determined during bitstream generation and stored in a configuration bit that is directly wired to an output enable signal pad_oe that is accessible as a top level signal of the eFPGA. When in input mode, the pad_in signal is received from external logic and passed to eFPGA logic via the inpad signal. Similarly, in output mode the outpad signal is received from eFPGA logic and passed to pad_out. + +![iob_block_diagram](../z1000/docs/IOB_Block_Diagram.png) + +#### Clock I/O Block (Clock IOB) + +A dedicated I/O block is provided that is only used for delivering clocks to the programmable logic. This I/O block is referred to as the clock IOB. It is constructed from the same iopad primitive as the general purpose I/O blocks, but internally connected to the eFPGA clock network rather than to programmable interconnect. + +## Z1012 Pin Constraints + +Z1012 implements the signals in the table below as valid pin names for specifying pin constraints in a JSON pin constraints file (PCF). Standard bus notatation using square brackets is required for all pins in the PCF. For example, to constrain a user input signal `foo` to bit 17 of `gpio_in_east`, the following content should be included in the PCF file + +``` + "foo": { + "direction": "input", + "pin": "gpio_in_east[17]" + }, +``` + +> **_NOTE:_** User clock signals must be mapped to the gpio_in_clk bus + +Pin Name | Direction | MSB | LSB | Purpose +--------------------------|-----------|-----|-----|--------- +gpio_in_clk | input | 3 | 0 | User clocks +gpio_in_south | input | 511 | 0 | South side GPIO inputs +gpio_in_north | input | 511 | 0 | North side GPIO inputs +gpio_in_west | input | 511 | 0 | West side GPIO inputs +gpio_in_east | input | 511 | 0 | East side GPIO inputs +gpio_out_south | output | 511 | 0 | South side GPIO outputs +gpio_oe_south | output | 511 | 0 | South side GPIO output enables +gpio_out_north | output | 511 | 0 | North side GPIO outputs +gpio_oe_north | output | 511 | 0 | North side GPIO output enables +gpio_out_west | output | 511 | 0 | West side GPIO outputs +gpio_oe_west | output | 511 | 0 | West side GPIO output enables +gpio_out_east | output | 511 | 0 | East side GPIO outputs +gpio_oe_east | output | 511 | 0 | East side GPIO output enables + +## Z1012 Bitstream Mapping + +The Z1012 bitstream format is organized into a four-dimensional array of configuration bits. The four dimensions are the VPR grid X coordinate, VPR grid Y coordinate, word address, and bit index. + +The table below shows the minimum and maximum array values for this array. Note that not all positions in the array contain valid configuration bits. + +Index | Min | Max | +------------|------|-----| +X | 0 | 19 | +Y | 0 | 19 | +Address | 0 | 115 | +Bit Index | 0 | 7 | + +The Z1012 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1012 VPR architecture file and routing graph XML file. \ No newline at end of file From 9000f19ef5790bcc00174a3146c778c39da6e7b3 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:58:20 -0400 Subject: [PATCH 09/21] Add z1060 README --- logiklib/zeroasic/z1060/README.md | 127 ++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 logiklib/zeroasic/z1060/README.md diff --git a/logiklib/zeroasic/z1060/README.md b/logiklib/zeroasic/z1060/README.md new file mode 100644 index 0000000..307b53b --- /dev/null +++ b/logiklib/zeroasic/z1060/README.md @@ -0,0 +1,127 @@ +# Z1060 eFPGA + +The Z1060 eFPGA is a fixed-size eFPGA architecture consisting of configurable logic blocks (CLBs), I/O blocks (IOBs), and a clock I/O block for clock distribution. + +## Z1060 Architecture + +A summary of Z1060 resources is shown in the table below + +Resource Type | Count +---------------------|------ +Lookup Tables (LUTs) | 1664 +Registers | 1664 +GPIOs | 1024 +DSPs | 4 +BRAMs (16Kbit) | 4 +Max Clock Domains | 4 + +The Z1060 architecture XML file provides a complete specification of how logic resources are arranged in this grid, the port lists of all logic resources, and how logic resources are organized and connected. Hierarchical representations of logic blocks are provided where needed to enable correct, efficient packing and placement of a user's netlist. The architecture XML also provides a delay model for the eFPGA and FASM feature metadata to enable logic block bitstream generation. The Z1060 routing graph XML file encapsulates a complete model of the eFPGA interconnect architecture and contains the FASM feature metadata for interconnect bitstream generation. + +The following sections summarize the architecture features of Z1060. + +### Array and Grid Model + +Z1060 logic resources are organized into an 18x18 array of components, depicted in the figure below. A 16x16 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. + +![z1060_array_diagram](./docs/z1060_Block_Diagram.png ) + +For modeling in VPR, this array of components is arranged on a 20x20 (X,Y) grid. The lower left corner of Z1060 (the clock IOB) is located at (1,1) on this grid. All locations at X=0, X=19, Y=0, and Y=19 are modeled as empty. This perimeter of empty locations is required to model the architecture in VPR correctly. + +### Logic Resource Types + +Brief descriptions and block diagrams for Z1060 logic resources are shown below. + +#### Configurable Logic Block (CLB) + +Each configurable logic block (CLB) consists of 8 6-input basic logic elements (BLEs). A block diagram of the BLE is shown below. The BLE contains a 6-input lookup table (LUT) a configurable flip-flop, and a multiplexer that selects whether the primary output of the BLE comes from the flip-flop or directly from the LUT. The flip-flop output is also routed out of the BLE as a secondary output; this secondary output is connected only to local interconnect in the CLB. + +![ble_block_diagram](../z1000/docs/BLE4_Block_Diagram.png ) + +The BLEs in a CLB share 24 common inputs through the CLB local interconnect, an array of multiplexers referred to as the CLB crossbar. Each BLE input is driven by a dedicated crossbar multiplexer that selects from a subset of the CLB inputs, BLE primary outputs, and BLE secondary outputs. The CLB inputs are subdivided between north, south, east, and west sides of the CLB to improve their interface to the eFPGA global interconnect. The BLE primary outputs are also outputs of the CLB and route directly to eFPGA global interconnect. The overall CLB block diagram is shown below. The BLE output feedback paths to the crossbar are not shown in the diagram to preserve diagram clarity. + +![clb_block_diagram](./docs/CLB6_Block_Diagram.png) + +#### DSP Block + +Each DSP block consists of one configurable arithmetic circuit whose operating modes are suitable for various types of digital signal processing. DSP block modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the DSP block. + +A block diagram of the DSP block is shown below. Three data inputs, a clock, and an asynchronous reset signal are provided. All inputs may optionally be re-registered; synthesis software infers when these registers should be used. Two of the three inputs serve primarily as inputs to an 18x18 multiplier; however, they may also be routed to an adder circuit to use the block only for wide addition operations. These two inputs are 18 bits wide. A third 40-bit input is provided to enable fused multiply-add operations. Additional operating modes enable the block to function as an accumulator or a multiply-accumulator. For high-performance DSP, the multiply-accumulator mode may optionally be pipelined; users must model this pipelining in their HDL code to ensure correct inference. + +![dsp_block_diagram](../z1010/docs/DSP_Block_Diagram.png ) + +#### BRAM + +Each block BRAM (BRAM) consists of one configurable SRAM circuit. The underlying memory primitive is a 1K x 16 bit true dual port memory macro. Control circuitry surrounding this macro enables emulation of single port RAM and dual port RAM. Emulation of other memory dimensions with the same number of bits is also supported; a complete table of supported memory sizes is shown below. For memory widths wider than 8 bits, byte enables are supported to individually write specific bytes at a given address. + +Word Width | Data Width +---------------------|----------- +512 | 32* +1024 | 16 +2048 | 8 +4096 | 4 +8192 | 2 +16384 | 1 + +*supported in single port mode only + +BRAM modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the BRAM. To ensure that the desired BRAM mode is selected, consult synthesis software documentation for HDL style guidelines. + +A block diagram of the BRAM is shown below. The BRAM has dedicated I/O interfaces for two complete SRAM ports. Note that not all signals may be used in all modes. Dedicated signals are provided for clock enable, read enable, write enable, and byte enables in addition to the signaling for clock, address, and data. Depending on HDL coding styles chosen, users may include or exclude clock enable, read enable, and/or byte enables signals from their designs and rely on synthesis software to connect them to constant values that ensure user functionality is preserved. + +![bram_block_diagram](../z1010/docs/BRAM_Block_Diagram.png ) + +#### I/O Block (IOB) + +General purpose I/O blocks (IOBs) are provided to provide a consistent signal interface between signals external to the eFPGA and reconfigurable logic. Each IOB contains eight iopad primitives. Each iopad primitive can operate either in input mode or output mode. The IOB thus supports a maximum of eight user I/O signals in any combination of inputs and outputs. During RTL-to-bitstream generation, each top level RTL port directly maps to an iopad primitives via pin constraints. + +The figure below shows a block diagram of the iopad primitive. Each iopad enables a single signal to be connected . The data direction is determined during bitstream generation and stored in a configuration bit that is directly wired to an output enable signal pad_oe that is accessible as a top level signal of the eFPGA. When in input mode, the pad_in signal is received from external logic and passed to eFPGA logic via the inpad signal. Similarly, in output mode the outpad signal is received from eFPGA logic and passed to pad_out. + +![iob_block_diagram](../z1000/docs/IOB_Block_Diagram.png) + +#### Clock I/O Block (Clock IOB) + +A dedicated I/O block is provided that is only used for delivering clocks to the programmable logic. This I/O block is referred to as the clock IOB. It is constructed from the same iopad primitive as the general purpose I/O blocks, but internally connected to the eFPGA clock network rather than to programmable interconnect. + +## Z1060 Pin Constraints + +Z1060 implements the signals in the table below as valid pin names for specifying pin constraints in a JSON pin constraints file (PCF). Standard bus notatation using square brackets is required for all pins in the PCF. For example, to constrain a user input signal `foo` to bit 17 of `gpio_in_east`, the following content should be included in the PCF file + +``` + "foo": { + "direction": "input", + "pin": "gpio_in_east[17]" + }, +``` + +> **_NOTE:_** User clock signals must be mapped to the gpio_in_clk bus + +Pin Name | Direction | MSB | LSB | Purpose +--------------------------|-----------|-----|-----|--------- +gpio_in_clk | input | 3 | 0 | User clocks +gpio_in_south | input | 255 | 0 | South side GPIO inputs +gpio_in_north | input | 255 | 0 | North side GPIO inputs +gpio_in_west | input | 255 | 0 | West side GPIO inputs +gpio_in_east | input | 255 | 0 | East side GPIO inputs +gpio_out_south | output | 255 | 0 | South side GPIO outputs +gpio_oe_south | output | 255 | 0 | South side GPIO output enables +gpio_out_north | output | 255 | 0 | North side GPIO outputs +gpio_oe_north | output | 255 | 0 | North side GPIO output enables +gpio_out_west | output | 255 | 0 | West side GPIO outputs +gpio_oe_west | output | 255 | 0 | West side GPIO output enables +gpio_out_east | output | 255 | 0 | East side GPIO outputs +gpio_oe_east | output | 255 | 0 | East side GPIO output enables + +## Z1060 Bitstream Mapping + +The Z1060 bitstream format is organized into a four-dimensional array of configuration bits. The four dimensions are the VPR grid X coordinate, VPR grid Y coordinate, word address, and bit index. + +The table below shows the minimum and maximum array values for this array. Note that not all positions in the array contain valid configuration bits. + +Index | Min | Max | +------------|------|-----| +X | 0 | 19 | +Y | 0 | 19 | +Address | 0 | 176 | +Bit Index | 0 | 7 | + +The Z1060 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1060 VPR architecture file and routing graph XML file. \ No newline at end of file From f40e3e8bcfb7ee6672d31e788351fe3f429bad68 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 21:58:44 -0400 Subject: [PATCH 10/21] Add CLB6 block diagram --- .../zeroasic/z1060/docs/CLB6_Block_Diagram.png | Bin 0 -> 22446 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 logiklib/zeroasic/z1060/docs/CLB6_Block_Diagram.png diff --git a/logiklib/zeroasic/z1060/docs/CLB6_Block_Diagram.png b/logiklib/zeroasic/z1060/docs/CLB6_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd812dc0c026b38f914c4c18aa58c38f45ffa68 GIT binary patch literal 22446 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 literal 0 HcmV?d00001 From e166c1c93661fc0a882df8bf99dcc2f784afa870 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 22:01:36 -0400 Subject: [PATCH 11/21] Add z1062 README --- logiklib/zeroasic/z1062/README.md | 127 ++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 logiklib/zeroasic/z1062/README.md diff --git a/logiklib/zeroasic/z1062/README.md b/logiklib/zeroasic/z1062/README.md new file mode 100644 index 0000000..086004d --- /dev/null +++ b/logiklib/zeroasic/z1062/README.md @@ -0,0 +1,127 @@ +# Z1062 eFPGA + +The Z1062 eFPGA is a fixed-size eFPGA architecture consisting of configurable logic blocks (CLBs), I/O blocks (IOBs), and a clock I/O block for clock distribution. + +## Z1062 Architecture + +A summary of Z1062 resources is shown in the table below + +Resource Type | Count +---------------------|------ +Lookup Tables (LUTs) | 6656 +Registers | 6656 +GPIOs | 2048 +DSPs | 16 +BRAMs (16Kbit) | 16 +Max Clock Domains | 4 + +The Z1062 architecture XML file provides a complete specification of how logic resources are arranged in this grid, the port lists of all logic resources, and how logic resources are organized and connected. Hierarchical representations of logic blocks are provided where needed to enable correct, efficient packing and placement of a user's netlist. The architecture XML also provides a delay model for the eFPGA and FASM feature metadata to enable logic block bitstream generation. The Z1062 routing graph XML file encapsulates a complete model of the eFPGA interconnect architecture and contains the FASM feature metadata for interconnect bitstream generation. + +The following sections summarize the architecture features of Z1062. + +### Array and Grid Model + +Z1062 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. + +![z1062_array_diagram](./docs/z1062_Block_Diagram.png ) + +For modeling in VPR, this array of components is arranged on a 36x36 (X,Y) grid. The lower left corner of Z1062 (the clock IOB) is located at (1,1) on this grid. All locations at X=0, X=19, Y=0, and Y=19 are modeled as empty. This perimeter of empty locations is required to model the architecture in VPR correctly. + +### Logic Resource Types + +Brief descriptions and block diagrams for Z1062 logic resources are shown below. + +#### Configurable Logic Block (CLB) + +Each configurable logic block (CLB) consists of 8 6-input basic logic elements (BLEs). A block diagram of the BLE is shown below. The BLE contains a 6-input lookup table (LUT) a configurable flip-flop, and a multiplexer that selects whether the primary output of the BLE comes from the flip-flop or directly from the LUT. The flip-flop output is also routed out of the BLE as a secondary output; this secondary output is connected only to local interconnect in the CLB. + +![ble_block_diagram](../z1060/docs/BLE6_Block_Diagram.png ) + +The BLEs in a CLB share 24 common inputs through the CLB local interconnect, an array of multiplexers referred to as the CLB crossbar. Each BLE input is driven by a dedicated crossbar multiplexer that selects from a subset of the CLB inputs, BLE primary outputs, and BLE secondary outputs. The CLB inputs are subdivided between north, south, east, and west sides of the CLB to improve their interface to the eFPGA global interconnect. The BLE primary outputs are also outputs of the CLB and route directly to eFPGA global interconnect. The overall CLB block diagram is shown below. The BLE output feedback paths to the crossbar are not shown in the diagram to preserve diagram clarity. + +![clb_block_diagram](../z1060/docs/CLB6_Block_Diagram.png) + +#### DSP Block + +Each DSP block consists of one configurable arithmetic circuit whose operating modes are suitable for various types of digital signal processing. DSP block modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the DSP block. + +A block diagram of the DSP block is shown below. Three data inputs, a clock, and an asynchronous reset signal are provided. All inputs may optionally be re-registered; synthesis software infers when these registers should be used. Two of the three inputs serve primarily as inputs to an 18x18 multiplier; however, they may also be routed to an adder circuit to use the block only for wide addition operations. These two inputs are 18 bits wide. A third 40-bit input is provided to enable fused multiply-add operations. Additional operating modes enable the block to function as an accumulator or a multiply-accumulator. For high-performance DSP, the multiply-accumulator mode may optionally be pipelined; users must model this pipelining in their HDL code to ensure correct inference. + +![dsp_block_diagram](../z1010/docs/DSP_Block_Diagram.png ) + +#### BRAM + +Each block BRAM (BRAM) consists of one configurable SRAM circuit. The underlying memory primitive is a 1K x 16 bit true dual port memory macro. Control circuitry surrounding this macro enables emulation of single port RAM and dual port RAM. Emulation of other memory dimensions with the same number of bits is also supported; a complete table of supported memory sizes is shown below. For memory widths wider than 8 bits, byte enables are supported to individually write specific bytes at a given address. + +Word Width | Data Width +---------------------|----------- +512 | 32* +1024 | 16 +2048 | 8 +4096 | 4 +8192 | 2 +16384 | 1 + +*supported in single port mode only + +BRAM modes are selected via bitstream configuration. Users write HDL code that models their desired arithmetic operations and synthesis software infers the correct operating mode of the BRAM. To ensure that the desired BRAM mode is selected, consult synthesis software documentation for HDL style guidelines. + +A block diagram of the BRAM is shown below. The BRAM has dedicated I/O interfaces for two complete SRAM ports. Note that not all signals may be used in all modes. Dedicated signals are provided for clock enable, read enable, write enable, and byte enables in addition to the signaling for clock, address, and data. Depending on HDL coding styles chosen, users may include or exclude clock enable, read enable, and/or byte enables signals from their designs and rely on synthesis software to connect them to constant values that ensure user functionality is preserved. + +![bram_block_diagram](../z1010/docs/BRAM_Block_Diagram.png ) + +#### I/O Block (IOB) + +General purpose I/O blocks (IOBs) are provided to provide a consistent signal interface between signals external to the eFPGA and reconfigurable logic. Each IOB contains eight iopad primitives. Each iopad primitive can operate either in input mode or output mode. The IOB thus supports a maximum of eight user I/O signals in any combination of inputs and outputs. During RTL-to-bitstream generation, each top level RTL port directly maps to an iopad primitives via pin constraints. + +The figure below shows a block diagram of the iopad primitive. Each iopad enables a single signal to be connected . The data direction is determined during bitstream generation and stored in a configuration bit that is directly wired to an output enable signal pad_oe that is accessible as a top level signal of the eFPGA. When in input mode, the pad_in signal is received from external logic and passed to eFPGA logic via the inpad signal. Similarly, in output mode the outpad signal is received from eFPGA logic and passed to pad_out. + +![iob_block_diagram](../z1000/docs/IOB_Block_Diagram.png) + +#### Clock I/O Block (Clock IOB) + +A dedicated I/O block is provided that is only used for delivering clocks to the programmable logic. This I/O block is referred to as the clock IOB. It is constructed from the same iopad primitive as the general purpose I/O blocks, but internally connected to the eFPGA clock network rather than to programmable interconnect. + +## Z1062 Pin Constraints + +Z1062 implements the signals in the table below as valid pin names for specifying pin constraints in a JSON pin constraints file (PCF). Standard bus notatation using square brackets is required for all pins in the PCF. For example, to constrain a user input signal `foo` to bit 17 of `gpio_in_east`, the following content should be included in the PCF file + +``` + "foo": { + "direction": "input", + "pin": "gpio_in_east[17]" + }, +``` + +> **_NOTE:_** User clock signals must be mapped to the gpio_in_clk bus + +Pin Name | Direction | MSB | LSB | Purpose +--------------------------|-----------|-----|-----|--------- +gpio_in_clk | input | 3 | 0 | User clocks +gpio_in_south | input | 511 | 0 | South side GPIO inputs +gpio_in_north | input | 511 | 0 | North side GPIO inputs +gpio_in_west | input | 511 | 0 | West side GPIO inputs +gpio_in_east | input | 511 | 0 | East side GPIO inputs +gpio_out_south | output | 511 | 0 | South side GPIO outputs +gpio_oe_south | output | 511 | 0 | South side GPIO output enables +gpio_out_north | output | 511 | 0 | North side GPIO outputs +gpio_oe_north | output | 511 | 0 | North side GPIO output enables +gpio_out_west | output | 511 | 0 | West side GPIO outputs +gpio_oe_west | output | 511 | 0 | West side GPIO output enables +gpio_out_east | output | 511 | 0 | East side GPIO outputs +gpio_oe_east | output | 511 | 0 | East side GPIO output enables + +## Z1062 Bitstream Mapping + +The Z1062 bitstream format is organized into a four-dimensional array of configuration bits. The four dimensions are the VPR grid X coordinate, VPR grid Y coordinate, word address, and bit index. + +The table below shows the minimum and maximum array values for this array. Note that not all positions in the array contain valid configuration bits. + +Index | Min | Max | +------------|------|-----| +X | 0 | 19 | +Y | 0 | 19 | +Address | 0 | 207 | +Bit Index | 0 | 7 | + +The Z1062 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1062 VPR architecture file and routing graph XML file. \ No newline at end of file From 799b934a0723748d42c4fa687b5f411a7af211b4 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Thu, 11 Sep 2025 22:03:20 -0400 Subject: [PATCH 12/21] Fix links --- logiklib/zeroasic/z1012/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/logiklib/zeroasic/z1012/README.md b/logiklib/zeroasic/z1012/README.md index d457a71..9cdbb82 100644 --- a/logiklib/zeroasic/z1012/README.md +++ b/logiklib/zeroasic/z1012/README.md @@ -47,7 +47,7 @@ Each DSP block consists of one configurable arithmetic circuit whose operating m A block diagram of the DSP block is shown below. Three data inputs, a clock, and an asynchronous reset signal are provided. All inputs may optionally be re-registered; synthesis software infers when these registers should be used. Two of the three inputs serve primarily as inputs to an 18x18 multiplier; however, they may also be routed to an adder circuit to use the block only for wide addition operations. These two inputs are 18 bits wide. A third 40-bit input is provided to enable fused multiply-add operations. Additional operating modes enable the block to function as an accumulator or a multiply-accumulator. For high-performance DSP, the multiply-accumulator mode may optionally be pipelined; users must model this pipelining in their HDL code to ensure correct inference. -![dsp_block_diagram](./docs/DSP_Block_Diagram.png ) +![dsp_block_diagram](../z1010/docs/DSP_Block_Diagram.png ) #### BRAM @@ -68,7 +68,7 @@ BRAM modes are selected via bitstream configuration. Users write HDL code that A block diagram of the BRAM is shown below. The BRAM has dedicated I/O interfaces for two complete SRAM ports. Note that not all signals may be used in all modes. Dedicated signals are provided for clock enable, read enable, write enable, and byte enables in addition to the signaling for clock, address, and data. Depending on HDL coding styles chosen, users may include or exclude clock enable, read enable, and/or byte enables signals from their designs and rely on synthesis software to connect them to constant values that ensure user functionality is preserved. -![bram_block_diagram](./docs/BRAM_Block_Diagram.png ) +![bram_block_diagram](../z1010/docs/BRAM_Block_Diagram.png ) #### I/O Block (IOB) From 1e1b48aef963ea6ed6db826fce1ac81728aa0adb Mon Sep 17 00:00:00 2001 From: Peter Grossmann <105726632+petergrossmann21@users.noreply.github.com> Date: Thu, 11 Sep 2025 22:17:55 -0400 Subject: [PATCH 13/21] Add BLE6 block diagram --- .../zeroasic/z1060/docs/BLE6_Block_Diagram.png | Bin 0 -> 14697 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 logiklib/zeroasic/z1060/docs/BLE6_Block_Diagram.png diff --git a/logiklib/zeroasic/z1060/docs/BLE6_Block_Diagram.png b/logiklib/zeroasic/z1060/docs/BLE6_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..179a57eeb02bf666542ba4275d5677a8ae52bfab GIT binary patch literal 14697 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�U5E$p-;(>pAhM=e30@YaN0Yq=(~h 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 Date: Thu, 11 Sep 2025 22:18:43 -0400 Subject: [PATCH 14/21] Fix links --- logiklib/zeroasic/z1060/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/logiklib/zeroasic/z1060/README.md b/logiklib/zeroasic/z1060/README.md index 307b53b..f09e137 100644 --- a/logiklib/zeroasic/z1060/README.md +++ b/logiklib/zeroasic/z1060/README.md @@ -35,7 +35,7 @@ Brief descriptions and block diagrams for Z1060 logic resources are shown below. Each configurable logic block (CLB) consists of 8 6-input basic logic elements (BLEs). A block diagram of the BLE is shown below. The BLE contains a 6-input lookup table (LUT) a configurable flip-flop, and a multiplexer that selects whether the primary output of the BLE comes from the flip-flop or directly from the LUT. The flip-flop output is also routed out of the BLE as a secondary output; this secondary output is connected only to local interconnect in the CLB. -![ble_block_diagram](../z1000/docs/BLE4_Block_Diagram.png ) +![ble_block_diagram](../z1060/docs/BLE6_Block_Diagram.png ) The BLEs in a CLB share 24 common inputs through the CLB local interconnect, an array of multiplexers referred to as the CLB crossbar. Each BLE input is driven by a dedicated crossbar multiplexer that selects from a subset of the CLB inputs, BLE primary outputs, and BLE secondary outputs. The CLB inputs are subdivided between north, south, east, and west sides of the CLB to improve their interface to the eFPGA global interconnect. The BLE primary outputs are also outputs of the CLB and route directly to eFPGA global interconnect. The overall CLB block diagram is shown below. The BLE output feedback paths to the crossbar are not shown in the diagram to preserve diagram clarity. @@ -124,4 +124,4 @@ Y | 0 | 19 | Address | 0 | 176 | Bit Index | 0 | 7 | -The Z1060 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1060 VPR architecture file and routing graph XML file. \ No newline at end of file +The Z1060 bitstream map file specifies a mapping from these array indices to each FASM feature defined in the Z1060 VPR architecture file and routing graph XML file. From 839c4a9175a80c63fd37e3cba0e6fc5abc06ad2a Mon Sep 17 00:00:00 2001 From: Peter Grossmann <105726632+petergrossmann21@users.noreply.github.com> Date: Thu, 11 Sep 2025 22:53:53 -0400 Subject: [PATCH 15/21] Repair image resolution --- .../zeroasic/z1060/docs/BRAM_Block_Diagram.png | Bin 0 -> 492 bytes .../zeroasic/z1060/docs/DSP_Block_Diagram.png | Bin 0 -> 30160 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 logiklib/zeroasic/z1060/docs/BRAM_Block_Diagram.png create mode 100644 logiklib/zeroasic/z1060/docs/DSP_Block_Diagram.png diff --git a/logiklib/zeroasic/z1060/docs/BRAM_Block_Diagram.png b/logiklib/zeroasic/z1060/docs/BRAM_Block_Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..b58adab6b8c591e640343fe486359794daabacce GIT binary patch literal 492 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 TzY+0UNxAt_%O!DU+kF2E6KGYd literal 0 HcmV?d00001 From cdd3a80c78ad5b3c6d1407163a282ddd2ae7303e Mon Sep 17 00:00:00 2001 From: Peter Grossmann <105726632+petergrossmann21@users.noreply.github.com> Date: Thu, 11 Sep 2025 22:57:11 -0400 Subject: [PATCH 16/21] Repair image resolution --- .../z1010/docs/BRAM_Block_Diagram.png | Bin 10475 -> 18910 bytes .../zeroasic/z1010/docs/DSP_Block_Diagram.png | Bin 17639 -> 30160 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/logiklib/zeroasic/z1010/docs/BRAM_Block_Diagram.png b/logiklib/zeroasic/z1010/docs/BRAM_Block_Diagram.png index c9f736e46d84f4722126b38c68dca592fca714d3..2724e27ea3d0908aa017565cffe2f6e02a2c412d 100644 GIT binary patch literal 18910 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 literal 10475 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 diff --git a/logiklib/zeroasic/z1010/docs/DSP_Block_Diagram.png b/logiklib/zeroasic/z1010/docs/DSP_Block_Diagram.png index 2161108771ab7b534c618f0f3170e04429b7e1f2..d92389a2707b8c080d38d6e5933383107b94ffdb 100644 GIT binary patch literal 30160 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 TzY+0UNxAt_%O!DU+kF2E6KGYd literal 17639 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 From c0772a9a980c80723918dcca2a9cf230a25c96da Mon Sep 17 00:00:00 2001 From: Peter Grossmann <105726632+petergrossmann21@users.noreply.github.com> Date: Thu, 11 Sep 2025 23:03:36 -0400 Subject: [PATCH 17/21] Improve image matching to other diagrams --- .../z1010/docs/BRAM_Block_Diagram.png | Bin 18910 -> 15541 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/logiklib/zeroasic/z1010/docs/BRAM_Block_Diagram.png b/logiklib/zeroasic/z1010/docs/BRAM_Block_Diagram.png index 2724e27ea3d0908aa017565cffe2f6e02a2c412d..d2bc17e383ca39a84477efe6db8f777fd9772958 100644 GIT binary patch literal 15541 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 literal 18910 zcmeHvd03Oz)^99UqzY)Mq9CLc6|Dn;lqocK zL>X$4AQFiXLR6H9$dt$!l7IoilmrM#NJ5hP25hSwpZlGAzn=4)@8165BMI-j_u6Z( zy@ucVZ7%-c?xOjb-e({XNOQOAw?BeF3sXU$PYM=)0(`UHrPmJlZ$Z?LE{-5v)0$!6 z!@{7Qdv=0AWtb&1M?M8UYn*aD5CsD1E?50q@M^sP3Igqp+Wqa$eQ~~A#wJX3SG;Af zLgPlj0kuz@7qo7;RG|B9YyPoyKc}s8)3`X5_tN=%W8Ld*r=;LjdYLN>Rs~z%e!8P} zM=fH+w!<0fM%C=c;!5blM_N$;ZCXv*#KTvN+?92wf*(8B0Y8uJlkbj8sG8ETe+`NX9pwr~*w%DSypUNge`0+EhCTaeWwrau?kd1trkl?QmPcE;Ki5_M?KJGqx=OeLz0f-(yQH~32DHi4##eZ z4~G8*4Ul=I6Y#3W-#`52O2{H9#$JEh>Jna_=^{v{zcN@r=W6mZ|NI_ikeC^ zK%kjEZRC*X^6M*UmT**>=q^}3qzl?4f+58)q`(SEV|?~ty&q!Yd|Jg)$L=u$$8OW4 ziOW1q5a@n=c#;4ZX7xFImkt#KT1Ew|FU#Ht_?1!U?!UkM%N5dq!mC{8g4;jdueIKs z2P&v?^H^;ZY8JW6X}OW+{@nd2;Fv976cnYVRjjJKllRi)JU*N(7eP*oMZm6`cO6-C zqs0U35Q9=iS50sKGaYVfrC}FZ)%8w{6mG!vjM{y+%N; zbc9N#m}dsgNgAKFJGtIHfD7JmmA~zr#clV;wJ%Nco+K;|xi&uaI6f|})6O9#{3iY* z!>`}z%66JJeD~VLA&3j}hR<4PbVWOT{_tPsPZ&)a0RHlg25gmN-52|{jkwBKI)_Zw zNz=MFe1u43THh?ljiomxjWGjdk59OIXI#X_V(7H!tj3Cfhc`bWlKV!kCB~p4MzG(s zl8Zibyqp0kEGCe@id`C#v3hGIpL^{^|E0mu!evCPk2>$7GjE=x`X^bK)g`nV7_DcR z<>i#SNbOlM8uft8iLav7x#Mo454BeB6+8Nwq9XnHIe87oXnf`+D9g=)~b#kJa4A!p>UO4Ew5@b9LDYaKi%91G9~lcjC*nF$}f3 zt&=XV=FONqx=2c`_xrTm7bV9@?petiMX>IAV#A6?dSdjLLqa##5X`a}BNfe?4pLS9 zTcrGWgF?xtk2EMD2^}*QE2)LkT9ua%wOUN~cFK_+9jvjq0B_yx^DNXI*sz)38UjX# z6C(+7AzU;?sjSkR>AT4c()~1Y7wxT+zj)#m0|9e2UE#iCo{n=2vZS02C{AzKX%kCc zcacP+v#X#;As&uE_}@jw7cmAlO=Dv@5@M~%S6&u-9Ja-350*W>0^U4Nimm9s(9QC>B4|TQZfLmyle4e?Qei9Q1y5i{AP2}r7cUL`-K4|brNz~IKXQr#&fyCV^sZ?9@Fk1P zflGmU=kTyE|4TPu(Xc{u*SvFjB@pmquK$E^s(JnyUp4(}nyAr=g`k|2511mCQ*V4Z zt6>Acf2JZ_WnIllv7N>O;R{{A#UXBKvz`QqA)Oi?{KhhH$OJ0c zE$+UteD(yZ{OaNm3;5PdevJ$#8(Audh+D@6D<{Cjj*8SdcLkhOmydhRe~Y^QyRQ9j zA^)l%`L`zjBQ%NE7QC0NT=__5;E*roa>R#vgP! zh@5-;$=HU?YO-6I^TM5Mo1=GKpB>nrW^*wVma&}Z|FHX{812N23uq$RypHT{)eqYJ zk(t(IKcopSdpDbA+2=ZShtWy$_$OIv?P0Q(_<^x)^?TN2XV05S|9TvJ%f?r;(gN!L&KwYktJD z^-bgkXE4E5E5Fq9 zy)OH*@=l0wWB?KKgoI{&9x1r^tZb8=(LcP?RwI=I?^G1S8Z-xhq+qNqd_SV7+&<1s z-OAlUX} z%Re&TiQ8Q@!jaR&E9Wi3VF)_C zLmTF*DOIU7X~YF;b{5#sutqvk%!8EP#3&VfrRWxZ-OE|0;^L~d(ilwD!k#_So-}nA ztT8`N=|IXm0Lg$PM_^Dcl#5wQ<~?yf*|2ADes>;UA`*i0t>;ZlLwHJ+Pc%Pr?%fIVsIu0ZonLr>_;CDM1>9 zFH_+FL+7qIv{b24Ttp~C(q!D`MAw??>etVG+$MaInNK-er#F3-|3|6e-9uv=S=sA{ z`sSjWGn+M=o}Tb%ck?q6Zu{kvHU>gm~g~3*ROdr1)r51 zXB(|?R{)097}%$3@Gx4bQfv$KP zVi`rvu;*z!>#ll4rl9kHR_bHeGXB@9TE0a?A933tBZFR&Y)k=PErlBL6Y-31hK9aq zU8K&fa0+K5)J^3VvHsK7VLcztdKKr8X|H(0nyyAf5n5vh&5tW9(Y57!lu=(3D5o;H zb)5?=QFyj*0tx|tSXT&bmOQf%r}pKXSAjydM{2e4d8n50mt~ZC0}KTM4il%^*l4Zp z@$yirk#ZKpZgS(1R-5`n$3+?Kq+%kL$FR98Hh8iL*=UgL%V<5)BD{H-CNb>t;MXG6 zJWH>G=E%mE?#W-CmZ#iiIBo)_8Ox`BOzJZp@x2VY~ z?KbwbKkr0lAJlx$*c@Jtdn)%lubkn~Cz5*KPUk1Qj#1O$=Qzi#A8`m3W6S-l-!8~l z8OT}~Q)46>Y`>hos+-O~Oo)wou4Wt-##dC%0cz3D+%Y2d@u8CQYo&%sdADTicElh(Hh8R&_4Tf!8Y zb6d#~672LV;o(+nLTb|~?)jZ!UNCaTbjuB=gLNi;_VcwCM-hzB1_we!){&=z#r4y% zvdfy!hnADaK5uKH#RP#R-sAE;$w=W7n~~RDm42K~R8WEAyS+@j%_Zb0HZ{3vV_Si3 zG!E*W=)?-PgRfE+Fmj?}lxdp?@HMMD{RX55bFcKs&+AuhCv6*ldw!>BPjvZR#Vz1G z>}i)<1$|&`eMO4al%Vlj!n#JYZF)QoV|GVt(&6?ySqxiZ*#-IFK# zd8R!rIm74A=$bA~=qqe80yp2>!0u{jS&Ad@M63i>)`2xJ{=d`+9 zgm!H+9hGv$aKa$02%IUO=4ghk=?I;~@spTA%GW}|59{XkY81KwZL2NrOP8bi^$jt} zQAtdvN!)cy2M^8-MJre6RjIfUWDMhT17~iuuEvqJ4KWQ2Jfs8H8s*v=V)1qd$%sbC zA3#l2N!MS&DlrcW}y1HmKf}5Ni+G#eE zhku%$gX(X^vJ}ttJV$&S-LIZFqHPbVl$V^g#9yHwH zRxY|ucPZ$&2el(%zgvB5(zM?i z@G=JKRc|dvv{TfbT$n*!#F^#xn)=jdQib9O!?uqKVQjVyRJ;tH9#r)UbY{bjFb7feY4al=KJA z@3UM%cwt#=830V*ZK$`GKdA2`k4)8wgQ3$>`1xFNQdn?{Jx=^h72)FhbEp~%`VyRC z4?G)apIF%D_T;gGN1nf>$$rJ~?>JmRM#VaeP1v>evo7b%>(^L0{8mg3!qBd5%5>(u zoO)2Xc8FG2%m>>h8nw1b!e-3x0BI_04~|chZ^;OmU)!oCW!k#~=z^X>v%ffVjTN?u z_Y&gnVo5%5(C6GoR)=I67H#yhxKf9E85(A*7@bKhGfCDRF z6My3I?R%!BYBMohVL})`;wpfO44sNBO{(Kf8b=d~L?d5kCr#rv9?aoX%D0RXJg(1g z?peL{k;~!Px96s1D7?m+I5Fi0Rn8vGPB_Q5z;e>eDTaQ}_vKiB9cSJL~+i&!B5EeKjy!fgZ}HU&%SjuNFO z{^EwizXm~X-X-7?Sc{ zDj)VBYSYYT8w|6ELXxN)8w3A#aPYEejdcp1tPqy6%nq`WWLyAEAkQ?Aqrrs%z|imd zAqF>E!fPajbW?LM5`aVy>q9l>P7Bc7cmcFoRvvV`r|K@xv+{qwE&N9af3I)*XQlLB z3-pf)^1ZI+Kid!b*KE)K2pjra$p3Sy!hfPoGU+t-VC4{j$kQb7)>!(_j}ur3T?j!j zxZ7BR6Zhb?YXM#Yi4mXkzj<_zYjFf8rYfp4b)NU^PUM~J;IE0bGAgOd=@@Q0vi-)q z;4Q8!_aR4hGS1=kV7^5VRO9~nfrQf(D{ndi)1mqb@bDg9vxEsiNSfKjMU2=eJ$#pg z!<9ot9Vi1!JEd$GPbc_h6Sb_@f6xZs@8?P^-kn5JO%xO>%t(t(>@-$4$k>#5giJ2Sp-~BaEvrj4yOmu33WKD- z1?r3o_MO7h?Hzb5vUFx;dzKE3Xjnw-2?N$TEsV?3)w165p)vwo;d#4xj|Pf}i0{3i zv0`SD!?(C#=WKFnf&XtA0->7whb^a{S5kdLufjtm5;U0FhGCEhSZ$ymv6CXc!9=`z z0Ds0qybv@UAq}$zbJeuwy*sNgzRITBvlLhAcswrJm{UkBgYDEhNW>acN9_-nTCJ`Y z^wxdYvhv?!6#4+n3#(QsOZAK`uMn%Y%qNXxbMngmq zu<;*umjFY8m+VgRBmx^UXgFienWJ&|z)&cFwa_Bz?@^5Sh!J2Nu3(VX{5lj3Jp@Z! z#McwWX9$|q+~;ln7gS#8RsL~cEuwfI`2?@1)T&ZqHmZ#Y1{+dEXM`hPhgD#RwI^;d z1c}1E&l~$1aTFbTywOzK5p28--=X*Bhuis+5m&KZB2=9gY*(9KAyIm7jKdDg<|qCG z)q&FOsK?*%kCcsB_C@#Ba75xxLGitU`Pr=T>&M098=EpivL*)Rvw|?&*f@pvM|d9p zaV`+(w;+^q@t-sdgk0FcIB`(L!ZWW@=>Kv0;L$L>Glr=#A3Rg$!ozJDh?e`jU? zqw?E`#UW%#V|bGGIMX3fdVOr0mfKK9mTq0F@YEl7j$})mQ)LU&c zfpvmFuZ{BqfcCsbNC*FFRxP~WJ#Zye8WOVB1amT}yaKPg4v=zNaoWmwfJI?myG~3> ze5h?!oMsvAj@dX%qR>4$q!qrshFuR_007Dm)j)@RjY_cBou%^hMpFo{0A9)-RMZp&83A2)ccG-D%s>s2s|66W zPurZw=M75jSpeA~qoQNL;cQxL#LSJfERQeHyf|BxIs*-l|0kHsN`24@r}N9|spzs>AG7%xUaJr*Ac5 zBIioZ5Xtj;RrN*T^tvo#HYNLaz+hGvf;16sBiGssW)(H9(SLW{IXs6Bfx-zP@;>5d zh$w2TbYL270^GR(9R@@JNE$GKUXzWE9k)pULwU4(@2JO~6&g%s0&1dM#3gCTCe2@O z{wg!A0;G~-$>I>cNb%U;m2SW^f#sfrRMG1XAY36e!l?jujJcZX8NuR^9v4^mde!E@ z9J`NhcF5m?Rjrol)II5!P`UnhOI@FDW~6$-O*>@t|H6DL)>6_$P^AFMGV=h+>rm_b zdn-YwWijx3<^Ta7U?)anPD`v0z2c;agdKh`Fka$$}9G9giQ9YMIo+)U~-?CG& zJp`3@1Hm-}9R_gOK9m!kLCQ-7egkAr8@>XT|9#qA4-U9Z0=oI-T=N6C1_Ii)bFS$C z(9J=I&z_qrvH?w~PWNnH0Bpi(jnC%*Z`J%d?;5MX#S+kZ*SY?{-xK`DswiID1CzyZ zWbw8hoaGA)2flgr-Zt{{bg8lQ#DQ=_uQjThJMY$!DQ?jYk!fZXXSBBi>=c#7gnnCE zV44`!b0jOAEwrCL!mLioH8 z0%OdyPw|_*gRnGMnGde8!^CylhlTSPZxgPfP>q2Hr)+D@}vwH{Kc=$i$gq!3^rTg8B(;3l_hsl zg%{vd2@}N0zMUgh;}m!eC5xR>qz9?E_i{z!!PFc)Q>6H1B)sdyXCbp}_yVgxX44;j zQocq0a^JO?RkU5WVCJ#@PrfZ38uk+6p!=+U7b+O2BRi@vp?pH8d<$H2i@bB6{O(QF zJ%IZ0-J|5?kC0T^K@l@)m%52w&-BxGT3rN@p5e+@63GF4?iTsb@2@mY-1kAg8h^Yl zW|umSKD;cU9JyiEdHf8f*4d8xW--Ehfzh1TBU)eXWAZwOrhn@aR6-K>4gwc3p!K&l zCAgmlSnT!|f2?7&pscpNKa1U@-kMVkTSmLODRYsRUr)pgsj_yrmQO1k%Y>sZ5S{i2 z1C>9#^GzIGpa5%roOO3cus+}qQ(D(i1-95V104NmR zIZy9(Mpr^qccuQ@z7QadlV=7@{{(28kqQCt(H3LCdsmO#b?gS{Uo_yF7X}PC_>ZB! zpeMxu)hq}qJD@6kYNp>__IH)lf)(RS0!L{@9@^U4%5iOFOX5v{tPTSC{-Pa1mbR4w zd?FPsEsXpUF{2QZ#Q-a9{FcfQyh2%EcOOgz_^^Lr%s9O(VeZBy44^Q90v-Q|A8yev zgR>|BLHHsHSAdnAG{!u83oz+b7YNQ->_<5TS3X*Oa?C|VJIdjgF=E1Pt6o>GHYkUE zGyVc0^j<^{MWHz=hSMQ=Ojcu{%=*-4Db*E}YFcIYNdlc4xV^whjd}j}7?>Pm4VyCI zW9pr!t<}E)7iekF8|bT2D^tc|nh7 z8^3fr&~L#p8%wOaeYY>!Zp5&D;~mXr>oq^YeS6rKt55=WKudOig!R#F*=8wv^1gJ+ zZQ5l$FO6ft5AO=H{b@ZmgD0oIEDfuwk_Fe;>81W=PqH_(v}>+X{z}igme6^!w9uxY zR^Lh%pR|#09@wiB=>@mp_D}uDE-8lcrEzr*@tqO`v*orIMsvgZx#se6>S2R~)$E65 zI(~~>(CZ##d0lj_>uItPRZ#w~7Xl^{RMm!mp3YS$@&>QeY5bWn~Y;+APuv*8bpMeAIz|+Ew zRh-V#NB>A$+Ve8Zoc)fDVC;~Q#k$e97f)Ce_yByHq2q-eo^35V(adetWc^x`w?Bu! zb!(}t{wzj%lhydWaoH4JGV&M=Bio2GNK13e&XnZnzL27#GX)7ff^TZj7zQ1M{$Q2v zr7I2mnrz55QF2~&R=STGA2mwBlsPNb_bpvoRVj~h^hU~twfUMPDxT7J5nj8fiCTUp zB00M16JLI2s#SBL z3qhV(N(Wa-&M#{vQo5e-P~~q*3hhOfYoS76G5doqbtpUG zA8txYrd(h(s-2(NP?#P*0uB+O?$$Qg?M-V#_> zoNU3frY}l)(zXRVF1&XrPl#k10kbrZD>FMb=-m|DGy~8eM$aU*$K1fpI~_Y#K5lgj zNsh|(>^_B9og+U0d&VQfn{2pUT&$AH*qQ(z3bh_W;ft-M)g1!+t*B_}S1)LMPrpW+ zhZ*T;0lK^){hfdzm65S{MQ_b>+u*8T1}PFL!~_h=k$|Kl`li$Zm@`XXR!pDg_!T!0L2 z$u+cU{*(m7soNg!^5+pBdEd}1b=SccNYsvYXG9%+muVF;+m?ic?@O|Q(YqzrKKRmt z+hAk%E_dVF&xvu)gFjcGSg?_3?2NlG|O_F;$g-pvj%Aa{?g0BAJ@bmj4nYd;ZZiQ zj34ke+G9(r*pUhrFM?>l@oOxgfYN>Y|)59M+FIi)b46m_k!f%2`K)>-f8-dU?obKrgVnJPQS7XovJ zYlniv+Qklciowi=-Xtop(qm%_zn1|jnj?VltbzM~s#>XpkofojOLhU56la<&+YOW^ zx6^61aW=Br1j176&>13TOuQ8(V>F9zY2aAN&&{K>ZV0XD)lfF4Z!{_63^5mtgP(af`%kX=!5u}+Ha~D5 z&@oX@((X0xzZCd-0D(m|hLtDwV6)FGIR$wDPQ|6d8K;#h1jhh(b%ZWA{vzv>}>6l&0k>e*PWGX!*=ZkG~G+ zjl73JtmjXrwCf^XL-hRC&cPj`oq%2X0gC8v6h_YO;@bSgw8~koi0XFzzYy-oy*w!6 zla==6!cjk^w6Cvkw3N*Ar31{2xg1?7Co9F{rw~70uE(B=sID zVCdb$d%VaXsI(P>HsX39rJhz#&A=!xDuC_2c`uPy0=UueFZfDG^}%ldy-fV;68OKM z(3#8We}@|WDA{H?AMfqx|0l3jI!0xiJ$LDDzbvP&1TMnOT6N+5KR?%_0Pq$lFApyL z0~cSnoEoT#D?3~de*X8DK%?NVRS59MRa}5GX9@!CFEg!~c62?s2+*<$W(TGUSVj%x rqktmZ9t0Yj?U4X~YNb)BepVa$Q!V#o2JknTK)ZLje~WWGeD;3<8^KJy From cb9d85188eb1ecb814aedbf13de845e804034f33 Mon Sep 17 00:00:00 2001 From: Peter Grossmann <105726632+petergrossmann21@users.noreply.github.com> Date: Thu, 11 Sep 2025 23:05:24 -0400 Subject: [PATCH 18/21] Repair image resolution --- .../z1060/docs/CLB6_Block_Diagram.png | Bin 22446 -> 48324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/logiklib/zeroasic/z1060/docs/CLB6_Block_Diagram.png b/logiklib/zeroasic/z1060/docs/CLB6_Block_Diagram.png index 5fd812dc0c026b38f914c4c18aa58c38f45ffa68..23d634bedc3512b0a8a3c4d394fc1b43b119b89b 100644 GIT binary patch literal 48324 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

>n=RpC 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%0DlB4c|)F&ksB~UnQ(H*q9 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 literal 22446 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 From 2456144aae9c6cfec08804163e4b0f7b639149ec Mon Sep 17 00:00:00 2001 From: Peter Grossmann <105726632+petergrossmann21@users.noreply.github.com> Date: Thu, 11 Sep 2025 23:07:26 -0400 Subject: [PATCH 19/21] Repair image --- .../z1010/docs/z1010_Block_Diagram.png | Bin 2091 -> 27052 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/logiklib/zeroasic/z1010/docs/z1010_Block_Diagram.png b/logiklib/zeroasic/z1010/docs/z1010_Block_Diagram.png index 9b0c1ff870aa9408ae3f5eb7eb10c8c739c94218..e347b860ba18bbddf3cd2606ee12938052b24928 100644 GIT binary patch literal 27052 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 Sn*wiGV(@hJb6Mw<&;$Ve42*mL delta 2064 zcmY*adpOhkAOFrZiU=*vj$2F-xsNH!5Zc)+&B$dqNV&{ynpCD(B`LW?ZPFY<2y@A{ zLTEK{I7GCmk&HuABuV(K-|sxX=Q+>kdEU?Gc|EV!`}N2BRx<>uR?*AEV%(GzwG;sW zQ1Wnh@d5x)tmN;oMe1j?rSH6{XHAjs@NjX$B@;f<+oO&J?s~qoKP-_Xc{9T4qQ1TA zkbRmYm2Ovgrxz-PExPIxu3%Njq^`S=YPO@)-Q|eFUac})uOk}E`o`WjS3bNo5(z{H zMD(*u@9+1;wCPwHh(vjvD`!2mF(sW80LYP*9g}#6f?yyZOj;lV*gII887fwlp?rm@);-GirhQGCkvn|?tb z&oO}+Q;$$-`j;1eKj$3vJS2?4U30*1#k#jE&+V-2!)l|(5xxHIq|x(5`i4;JB#D*>Odb#Z3y#ZyPv5%JlK#L zWL^_qK1z?wg46p+Eq7VgU@KGJb-eh~wZLzV={9BHdMf03^T{s{V&W47IsX&ay~-=S z@*?5K_z3foaxH-~{;JmE>35avV`@!b)yBJ@wJgRu>YavRY$hD0wIkEC%(9`%9ZLle zwcHD|v>%h$3)maAs)jdZI1Pp2reg2f<9?YV$t@On8y$(bL(c5X^R^c4h2*9ewAM|n z!P{OE(SaQl#jfQhSoq1P30WaiQ6#(5|{sk`f)zz&zJzAYzeV_WIWnFl< z!tYIMYKym7TL64jX=>>` z8sAy#xC$gJ_HI-`)_ybk3=TEU7xBFBaFX#C|2k769kahr z&1*zl`C}+WT)lnzees68PqS4vTaclY`4;}NwOkIOnHGq@-h0tMVBVh#wvcMnVgf`d z2-cVsyWWPOwy_h~k{YuU{3?(uBMbc}jI9lJX8F+dPFLV=uP${~Ax0+R)s{|{lBWiB zDEh%kKjKDp_*Tkxf1&Ru*j=FY+Pq7NDOMc!BdAvmkXIi5jhlJ;{8#%krzhTgzG~Gi z&QA?~Kwoyj-_zuwzifH3js@jyuw-3FiI(5Cz(8ZpRRj0&AC^rb%$YJj%Om1!DP=vbLK3m3hRfo)bf8aw*(gjEmW}%J7=u)J?*1{xAuEl~n6&<{P-$Yq zmw$Zrj2l+qB%$BiSUv8cRa- zSJ{TbP>4t}PXyIaoR(_k6&d6Y50H5`6=f4;1qQO58o6@hQM@z&5`=Yp3b)Boln!TaUPtK^u zr8CEs%8(#CV=hUJO*Qm4;!2p5pVZJ3CflUVMc3w`C4A3W_=seP!`=;iVrreHh7j=5 zRajuLa|@BVIj z!Gw4YPqGjEUuOLo1pCp<_sz2c0ZUi;XzP46hOuJ{D;m+NX9NJ#1?n)>Es0}(g#6tA iu+(!>vIPOh4f#f_kD Date: Fri, 12 Sep 2025 00:54:32 -0400 Subject: [PATCH 20/21] Expand module test --- tests/test_fpga_modules.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_fpga_modules.py b/tests/test_fpga_modules.py index 0a07280..e3c5a78 100644 --- a/tests/test_fpga_modules.py +++ b/tests/test_fpga_modules.py @@ -9,13 +9,23 @@ from logiklib.demo.K6_N8_12x12_BD import K6_N8_12x12_BD from logiklib.demo.K6_N8_28x28_BD import K6_N8_28x28_BD from logiklib.zeroasic.z1000 import z1000 +from logiklib.zeroasic.z1002 import z1002 +from logiklib.zeroasic.z1010 import z1010 +from logiklib.zeroasic.z1012 import z1012 +from logiklib.zeroasic.z1060 import z1060 +from logiklib.zeroasic.z1062 import z1062 all_modules = (K6_N8_3x3, K4_N8_6x6, K6_N8_12x12_BD, K6_N8_28x28_BD, - z1000) + z1000, + z1002, + z1010, + z1012, + z1060, + z1062) def test_all_modules(): From 9ff005eb1fe2f38970f19e9e45b037dc05d1de36 Mon Sep 17 00:00:00 2001 From: petergrossmann21 Date: Fri, 12 Sep 2025 00:55:55 -0400 Subject: [PATCH 21/21] Fix spelling --- logiklib/zeroasic/z1010/README.md | 2 +- logiklib/zeroasic/z1012/README.md | 2 +- logiklib/zeroasic/z1060/README.md | 2 +- logiklib/zeroasic/z1062/README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/logiklib/zeroasic/z1010/README.md b/logiklib/zeroasic/z1010/README.md index 133423d..78b4918 100644 --- a/logiklib/zeroasic/z1010/README.md +++ b/logiklib/zeroasic/z1010/README.md @@ -21,7 +21,7 @@ The following sections summarize the architecture features of Z1010. ### Array and Grid Model -Z1010 logic resources are organized into an 18x18 array of components, depicted in the figure below. A 16x16 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. +Z1010 logic resources are organized into an 18x18 array of components, depicted in the figure below. A 16x16 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additional two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. ![z1010_array_diagram](./docs/z1010_Block_Diagram.png ) diff --git a/logiklib/zeroasic/z1012/README.md b/logiklib/zeroasic/z1012/README.md index 9cdbb82..6d079cb 100644 --- a/logiklib/zeroasic/z1012/README.md +++ b/logiklib/zeroasic/z1012/README.md @@ -21,7 +21,7 @@ The following sections summarize the architecture features of Z1012. ### Array and Grid Model -Z1012 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. +Z1012 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additional two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. ![z1012_array_diagram](./docs/z1012_Block_Diagram.png ) diff --git a/logiklib/zeroasic/z1060/README.md b/logiklib/zeroasic/z1060/README.md index 307b53b..36b28e5 100644 --- a/logiklib/zeroasic/z1060/README.md +++ b/logiklib/zeroasic/z1060/README.md @@ -21,7 +21,7 @@ The following sections summarize the architecture features of Z1060. ### Array and Grid Model -Z1060 logic resources are organized into an 18x18 array of components, depicted in the figure below. A 16x16 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. +Z1060 logic resources are organized into an 18x18 array of components, depicted in the figure below. A 16x16 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additional two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. ![z1060_array_diagram](./docs/z1060_Block_Diagram.png ) diff --git a/logiklib/zeroasic/z1062/README.md b/logiklib/zeroasic/z1062/README.md index 086004d..c742b44 100644 --- a/logiklib/zeroasic/z1062/README.md +++ b/logiklib/zeroasic/z1062/README.md @@ -21,7 +21,7 @@ The following sections summarize the architecture features of Z1062. ### Array and Grid Model -Z1062 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additonal two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. +Z1062 logic resources are organized into an 34x34 array of components, depicted in the figure below. A 32x32 array of logic blocks is surrounded on the perimeter by four banks of IOBs, one per side of the array. One column of logic blocks is consumed by four DSP blocks. Four block RAMs (BRAMs) consume an additional two columns. Corner array locations are used for programmable interconnect only with the exception of the lower left corner, where a special IOB for delivering clocks is placed. ![z1062_array_diagram](./docs/z1062_Block_Diagram.png )