Entity: reconfig_icap_fsm

Diagram

std_logic clk std_logic reset std_logic_vector(31 downto 0) icap_out std_logic_vector(31 downto 0) in_data std_logic in_data_valid std_logic out_data_full std_logic_vector(31 downto 0) icap_in std_logic icap_csb std_logic icap_rw std_logic in_data_rden std_logic_vector(31 downto 0) out_data std_logic out_data_valid std_logic_vector(31 downto 0) status

Description

EMACS settings: -- tab-width: 4; indent-tabs-mode: t -- vim: tabstop=4:shiftwidth=4:noexpandtab

kate: tab-width 4; replace-tabs off; indent-width 4;

Authors: Paul Genssler

Entity: ICAP FSM

Description:

This module parses the data stream to the Xilinx "Internal Configuration Access Port" (ICAP) primitives to generate control signals. Tested on:

  • Virtex-6
  • Virtex-7

License:

Copyright 2007-2016 Technische Universitaet Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and

limitations under the License.

Ports

Port name Direction Type Description
clk in std_logic
reset in std_logic high-active reset
icap_in out std_logic_vector(31 downto 0) data that will go into the icap
icap_out in std_logic_vector(31 downto 0) data from the icap
icap_csb out std_logic
icap_rw out std_logic
in_data in std_logic_vector(31 downto 0) new configuration data
in_data_valid in std_logic input data is valid
in_data_rden out std_logic possible to send data
out_data out std_logic_vector(31 downto 0) data read from the fifo
out_data_valid out std_logic data from icap is valid
out_data_full in std_logic receiving buffer is full, halt icap
status out std_logic_vector(31 downto 0) status vector

Signals

Name Type Description
cur_state t_state
nxt_state t_state
sync_state t_sync_state
sync_state_flag boolean flag will be (re)set in the clocking process for the main fsm
icap_enable boolean
icap_read boolean
icap_in_r std_logic_vector(31 downto 0)
in_data_swap std_logic_vector(31 downto 0) icap bit switching
icap_out_swap std_logic_vector(31 downto 0)
icap_error std_logic icap status word signals
icap_sync std_logic
icap_abort std_logic
icap_status_valid std_logic
readback_cnt unsigned(26 downto 0)
readback_cnt_en boolean
readback_cnt_rst boolean
in_data_valid_d std_logic delayed signals
in_data_valid_re std_logic rising edge on in_data_valid signal
pr_reset boolean status word signals
status_error boolean

Constants

Name Type Value Description
sync_s_dummy std_logic_vector(31 downto 0) x"FFFFFFFF"
sync_s_bus_p_0 std_logic_vector(31 downto 0) x"000000BB"
sync_s_bus_p_1 std_logic_vector(31 downto 0) x"11220044"
sync_s_sync std_logic_vector(31 downto 0) x"AA995566"
sync_s_regW std_logic_vector(31 downto 0) x"30008001"
sync_s_dsync std_logic_vector(31 downto 0) x"0000000D"
cmd_nop std_logic_vector(31 downto 0) x"20000000"
cmd_reg_wcfg std_logic_vector(4 downto 0) "00001" write cfg data prior to write
reg_fdro std_logic_vector(4 downto 0) "00011" read cfg data register

Types

Name Type Description
t_state (ready,
abort0,
abort1,
abort2,
abort3,
write,
writing,
pre_reg_read0,
pre_reg_read1,
pre_stream_read0,
read,
reading,
post_read)
t_sync_state (none,
dummy0,
bus_width0,
bus_width1,
dummy1,
synced,
cmdWrite,
dsynced)
detect the status of the synchronization

Processes

Description
readback counter process

Description
update sync status

State machines

  • update sync status
state transitions cluster_sync_state sync_state none none dummy0 dummy0 none->dummy0 in_data = sync_s_dummy    dummy0->none in_data /= sync_s_dummy    bus_width0 bus_width0 dummy0->bus_width0 in_data = sync_s_bus_p_0    bus_width0->none not (in_data = sync_s_bus_p_1)    bus_width1 bus_width1 bus_width0->bus_width1 in_data = sync_s_bus_p_1    bus_width1->none not (in_data = sync_s_dummy)    dummy1 dummy1 bus_width1->dummy1 in_data = sync_s_dummy    dummy1->none in_data /= sync_s_dummy    synced synced dummy1->synced in_data = sync_s_sync    cmdWrite cmdWrite synced->cmdWrite in_data = sync_s_regW    cmdWrite->synced not (in_data = sync_s_dsync)    dsynced dsynced cmdWrite->dsynced in_data = sync_s_dsync    dsynced->none