Skip to content

Instantly share code, notes, and snippets.

@mwwhited
Last active March 30, 2023 21:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mwwhited/74f67d9d1674179274d02f40d5405fb7 to your computer and use it in GitHub Desktop.
Save mwwhited/74f67d9d1674179274d02f40d5405fb7 to your computer and use it in GitHub Desktop.
Xilinx Native FIFO

XILINX FIFO Generator - Native Interface

Summary

The intent of this documnent is to describe the state flow of a XILINX Native FIFO with Independent Clocks

Configuration

  • Native Interface
  • Independent Clocks
  • Block RAM
  • Write Acknowledgement
  • Valid Flag
  • Synchronized Reset

Reset

@startuml

state FIFO_Register {
    [*] --> wr_en : clear
    [*] --> rd_en : clear
    [*] --> rst : clear
}

state ResetRequested {
    [*] -> wr_en : clear
    [*] -> rd_en : clear
    [*] -> rst : set
}

state ResetProcessing {
    [*] --> rst : clear
}


[*] --> ResetRequested
ResetRequested --> ResetProcessing : [wr_rst_busy && rd_rst_busy]
ResetRequested --> ResetRequested : [ELSE]

ResetProcessing --> ResetComplete : [~wr_rst_busy && ~rd_rst_busy]
ResetProcessing --> ResetProcessing : [ELSE]

ResetComplete --> [*]

@enduml

Write

@startuml

state FIFO_Register {
    [*] --> wr_en : clear
    [*] --> rd_en : clear
    [*] --> din : *'bZ
}

state WriteRequest {
    [*] --> wr_en : clear
    [*] --> din : *Value
}

state WriteStart {
    [*] --> wr_en : set
}

state WriteProcessing {
    [*] --> wr_en : clear

}

state WriteComplete {
}
state NoWrite {
}

[*] --> WriteRequest
WriteRequest --> WriteStart : [~wr_ack]
WriteRequest --> WriteRequest : [ELSE]
WriteRequest --> NoWrite : [full]
WriteStart --> WriteProcessing
WriteProcessing --> WriteComplete : [wr_ack]
WriteProcessing --> WriteProcessing : [ELSE]
WriteComplete --> [*]
NoWrite --> [*]

@enduml

Read

@startuml

state FIFO_Register {
    [*] --> rd_en : clear
    [*] --> dout : *'bZ
}

state ReadRequest {
    [*] --> rd_en : clear
}

state ReadStart {
    [*] --> rd_en : set
}

state ReadProcessing {
    [*] --> rd_en : clear
}
state ReadComplete { 
    [*] --> dout : *Value
}
state NoRead { 

}

[*] --> ReadRequest

ReadRequest --> ReadStart : [~valid]
ReadRequest --> ReadRequest : [ELSE]
ReadRequest --> NoRead : [empty]

ReadStart --> ReadProcessing

ReadProcessing --> ReadComplete : [valid]
ReadProcessing --> ReadProcessing : [ELSE]


ReadComplete --> [*]
NoRead --> [*]

@enduml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment