小鱼FPGA 小鱼FPGA
“格雷码;跨时钟域同步;异步FIFO常用于跨时钟域数据缓冲;参数化可配的异步FIFO”
01 — 异步FIFO结构
异步FIFO的整体结构大致如下:
Write_control:控制写操作与满信号(w_full)的判断与产生。
Read_control:控制读操作与空信号(r_empty)的判断与产生。
RAM:双端口数据存取RAM。
Bin_to_gray:二进制码转格雷码模块。用于将读写地址二进制码转成格雷码。
SYN:跨时钟同步模块,即将读地址的格雷码(r_g_addr)向w_clk同步;将写地址的格雷码(w_g_addr)向r_clk同步。主要操作就是通过寄存器打两拍。
02 — 关键点解释
1.跨时钟域传递信号做时钟同步一般通过打两拍。
2.采用格雷码编码,因为格雷码每次跳转只会有一位发生变化,所以如果出现不确定状态也只会有两种状况,即正确变化了和不变。因此在读写时钟不一样的情况下,纵使读写时钟同步过程中出现毛刺,也不会使得FIFO在实际空或者满之后,FIFO却没有正确的产生出空满信号。只有可能是实际没有空或者满,但产生了空满信号,但这对于FIFO的功能不会有影响,只会使得FIFO的读或者写操作暂停。
3.读比写时钟更快,只会只出现实际没满,但误判为满;不会对功能(数据流)造成错误。
4.写比读时钟更快,只会出现实际没空,但误判为空;不会对功能(数据流)造成错误。
公众号回复:“ASYN_FIFO”获取示例设计代码。