| meta: |
| id: xilinx_bitstream |
| title: Xilinx FPGA Bitstream |
| license: Apache-2.0 |
| endian: be |
| seq: |
| - id: padding |
| terminator: 0xaa |
| - id: magic |
| contents: [0x99, 0x55, 0x66] |
| - id: contents |
| type: packet |
| repeat: eos |
| types: |
| packet: |
| seq: |
| - id: header |
| size: 4 |
| type: header |
| - id: data |
| if: header.opcode != opcode::nop |
| size: header.word_count * 4 |
| type: |
| switch-on: header.register_address |
| cases: |
| register::crc: reg_crc |
| register::timer: reg_timer |
| register::wbstar: reg_wbstar |
| register::cmd: reg_cmd |
| register::cor0: reg_cor0 |
| register::cor1: reg_cor1 |
| register::idcode: reg_idcode |
| register::mask: reg_mask |
| register::ctl0: reg_ctl0 |
| register::ctl1: reg_ctl1 |
| register::far: reg_far |
| register::fdri: reg_fdri |
| header: |
| seq: |
| - id: type |
| type: b3 |
| - id: opcode |
| type: b2 |
| enum: opcode |
| - id: register_address |
| type: b14 |
| enum: register |
| if: type == 0x1 |
| - id: reserved |
| type: b2 |
| if: type == 0x1 |
| - id: word_count |
| type: b11 |
| if: type == 0x1 |
| - id: word_count |
| type: b27 |
| if: type == 0x2 |
| reg_crc: |
| seq: |
| - id: expected_crc |
| type: u4 |
| reg_timer: |
| seq: |
| - id: timer_usr_mon |
| type: b1 |
| enum: enable |
| - id: timer_cfg_mon |
| type: b1 |
| enum: enable |
| - id: timer_value |
| type: b30 |
| reg_wbstar: |
| seq: |
| - id: rs |
| type: b2 |
| doc: 'RS[1:0] pin value on next warm boot.' |
| - id: rs_ts_b |
| type: b1 |
| doc: 'Whether RS[1:0] are tristated on next warm boot.' |
| enum: tristate_enable |
| - id: start_address |
| type: b29 |
| doc: 'Address of bitstream to start on next warm boot.' |
| reg_cmd: |
| seq: |
| - id: command |
| type: u4 |
| enum: command |
| reg_cor0: |
| seq: |
| - id: pwrdwn_stat |
| type: b1 |
| enum: cor0_pwrdwn_stat |
| - id: done_pipe |
| type: b1 |
| doc: 'When set, adds a register between DONEIN and any configuration logic' |
| - id: drive_done |
| type: b1 |
| enum: cor0_drive_done |
| - id: single |
| type: b1 |
| doc: 'When set, readback is a single-shot operation and must be reset by loading RCAP into CMD.' |
| - id: oscfsel |
| type: b6 |
| doc: 'CCLK frequency in MHz when in Master modes' |
| - id: ssclksrc |
| type: b2 |
| enum: cor0_ssclksrc |
| - id: done_cycle |
| type: b3 |
| enum: cor0_startup_phase |
| - id: match_cycle |
| type: b3 |
| enum: cor0_startup_phase_no_wait |
| - id: lock_cycle |
| type: b3 |
| enum: cor0_startup_phase_no_wait |
| - id: gts_cycle |
| type: b3 |
| enum: cor0_startup_phase |
| - id: gwe_cycle |
| type: b3 |
| enum: cor0_startup_phase |
| reg_cor1: |
| seq: |
| - id: reserved |
| type: u4 |
| reg_idcode: |
| seq: |
| - id: idcode |
| type: u4 |
| reg_mask: |
| seq: |
| - id: mask |
| type: u4 |
| reg_ctl0: |
| seq: |
| - id: efuse_key |
| type: b1 |
| enum: ctl0_efuse_key |
| - id: icap_select |
| type: b1 |
| enum: ctl0_icap_select |
| - id: reserved1 |
| type: b17 |
| - id: overtemp_power_down |
| type: b1 |
| enum: enable |
| - id: reserved2 |
| type: b1 |
| - id: config_fallback |
| enum: disable |
| type: b1 |
| - id: reserved3 |
| type: b1 |
| - id: glutmask_b |
| type: b1 |
| enum: ctl0_glutmask_b |
| - id: farsrc |
| type: b1 |
| enum: ctl0_farsrc |
| - id: dec |
| type: b1 |
| enum: enable |
| - id: sbits |
| type: b2 |
| enum: ctl0_sbits |
| - id: persist |
| type: b1 |
| enum: enable |
| - id: gts_usr_b |
| type: b1 |
| enum: tristate_enable |
| reg_ctl1: |
| seq: |
| - id: reserved |
| type: u4 |
| reg_far: |
| seq: |
| - id: reserved |
| type: b7 |
| - id: block_type |
| type: b2 |
| enum: far_block_type |
| - id: is_bottom_half_rows |
| type: b1 |
| - id: row_address |
| type: b5 |
| - id: column_address |
| type: b10 |
| - id: minor_address |
| type: b7 |
| reg_fdri: |
| seq: |
| - id: frames |
| type: frame |
| repeat: eos |
| frame: |
| seq: |
| - id: config_word |
| type: u4 |
| repeat: expr |
| repeat-expr: 101 |
| enums: |
| opcode: |
| 0: nop |
| 1: read |
| 2: write |
| 3: reserved |
| register: |
| 0: crc |
| 1: far |
| 2: fdri |
| 3: fdro |
| 4: cmd |
| 5: ctl0 |
| 6: mask |
| 7: stat |
| 8: lout |
| 9: cor0 |
| 10: mfwr |
| 11: cbc |
| 12: idcode |
| 13: axxs |
| 14: cor1 |
| 16: wbstar |
| 17: timer |
| 22: bootsts |
| 24: ctl1 |
| 31: bspi |
| enable: |
| 0: disabled |
| 1: enabled |
| disable: |
| 0: enabled |
| 1: disabled |
| tristate_enable: |
| 0: tristate |
| 1: driven |
| command: |
| 0: 'null' |
| 1: wcfg |
| 2: mfw |
| 3: dghigh_lfrm |
| 4: rcfg |
| 5: start |
| 6: rcap |
| 7: rcrc |
| 8: aghigh |
| 9: switch |
| 10: grestore |
| 11: shutdown |
| 12: gcapture |
| 13: desync |
| 15: iprog |
| 16: crcc |
| 17: ltimer |
| 18: bspi_read |
| 19: fall_edge |
| cor0_pwrdwn_stat: |
| 0: done_pin |
| 1: powerdown_pin |
| cor0_startup_phase_no_wait: |
| 0: startup_phase_0 |
| 1: startup_phase_1 |
| 2: startup_phase_2 |
| 3: startup_phase_3 |
| 4: startup_phase_4 |
| 5: startup_phase_5 |
| 6: startup_phase_6 |
| 7: no_wait |
| cor0_startup_phase: |
| 0: startup_phase_1 |
| 1: startup_phase_2 |
| 2: startup_phase_3 |
| 3: startup_phase_4 |
| 4: startup_phase_5 |
| 5: startup_phase_6 |
| 6: track_done |
| 7: keep |
| cor0_ssclksrc: |
| 0: cclk |
| 1: userclk |
| 2: jtagclk |
| 3: jtagclk |
| cor0_drive_done: |
| 0: open_drain |
| 1: drive_high |
| ctl0_efuse_key: |
| 0: battery_backed_ram |
| 1: efuse |
| ctl0_icap_select: |
| 0: top |
| 1: bottom |
| ctl0_glutmask_b: |
| 0: exclude_memory_cells_in_readback |
| 1: include_memory_cells_in_readback |
| ctl0_farsrc: |
| 0: efar |
| 1: far |
| ctl0_sbits: |
| 0: read_write |
| 1: write_only |
| 2: none |
| far_block_type: |
| 0: clb_io_clk |
| 1: block_ram |
| 2: cfg_clb |