实时画状态图 https://hifpga.com/fsm/
一个时钟周期传输64bit
tlp格式
RX状态机
digraph pcie_pio_rx {
PIO_RX_RST_STATE
PIO_RX_MEM_RD32_DW1DW2
PIO_RX_MEM_WR32_DW1DW2
PIO_RX_MEM_RD64_DW1DW2
PIO_RX_MEM_WR64_DW1DW2
PIO_RX_MEM_WR64_DW3
PIO_RX_WAIT_STATE
PIO_RX_RST_STATE -> PIO_RX_MEM_WR32_DW1DW2
PIO_RX_MEM_WR32_DW1DW2 -> PIO_RX_WAIT_STATE
PIO_RX_RST_STATE -> PIO_RX_MEM_RD32_DW1DW2
PIO_RX_MEM_RD32_DW1DW2 -> PIO_RX_WAIT_STATE
PIO_RX_RST_STATE -> PIO_RX_MEM_RD64_DW1DW2
PIO_RX_MEM_RD64_DW1DW2 -> PIO_RX_WAIT_STATE
PIO_RX_RST_STATE -> PIO_RX_MEM_WR64_DW1DW2
PIO_RX_MEM_WR64_DW1DW2 -> PIO_RX_MEM_WR64_DW3
PIO_RX_MEM_WR64_DW3 -> PIO_RX_WAIT_STATE
PIO_RX_WAIT_STATE -> PIO_RX_RST_STATE[label = "!wr_busy | compl_done"]
subgraph cluster_sgh {
}
}
tx状态机:
digraph pcie_pio_tx {
PIO_TX_RST_STATE
PIO_TX_CPLD_QW1_FIRST
PIO_TX_CPLD_QW1_TEMP
PIO_TX_CPLD_QW1
PIO_TX_RST_STATE -> PIO_TX_CPLD_QW1_FIRST -> PIO_TX_CPLD_QW1_TEMP ->PIO_TX_CPLD_QW1
PIO_TX_CPLD_QW1 -> PIO_TX_RST_STATE
subgraph cluster_sgh {
}
}
rx模块接收tlp 如果是写mem tlp 则直接使能bram模块,在bram模块中将要写的地址数据读出来做读改写操作 再将数据写入
如果是读请求模块 则将信号发往tx模块 tx模块与bram模块交互 然后将cpld发送出去 再发送complete信号