赞
踩
双时钟fifo是遵循先入先出的原则,且读写的数据,在独立的线路上传输,所以连续的bit位传输,可以在不同的时钟下进行,可以有效地解决跨时钟域传输的问题。
双时钟fifo写法简述:
两个时钟,rd_clk,wr_clk.
读命令模块:当有读请求,判断是否读空信号为1,非空则发出读命令。组合逻辑
写命令模块:当有写请求,判断是否写满信号为1,非满则发出写命令。组合逻辑
存储模块:双口ram,当读为1,将读指针,指向的数据发送出去;当写为1,则将数据写入写指针所在的地址位。时序逻辑 q<= mem[rptr;mem[wptr]]<=d;
读指针模块:当有读信号来,读指针+1;输出到存储器模块。时序逻辑rd_clk
写指针模块:当有写信号来,写指针+1;输出到存储器模块。时序逻辑wr_clk
usedword模块: usedword=写指针-读指针+存储器的总容量
跨时钟,数据传输的处理部分,为空,满信号的输出判断做准备。
bintogray模块:将usedword转变为格雷码。(每一次只有一位不同的特性,降低跨时钟传输的错误率)
将转换好的格雷码转分别换到 rd_clk,wr_clk.的频率上,再分别输出为二进制码。
读、写命令利用同步寄存器解决控制bit位的传输。(同步寄存器链可以解决,单bit控制使能位的跨时钟域问题,降低亚稳态发生概率)
读时钟下的握手模块:输出读时钟下的写满和读空;输出至读控制模块,作为输出读命令的控制条件。
写时钟下的握手模块:输出写时钟下的写满和读空;输出至写控制模块,作为输出写命令的控制条件。
系统闭环循环,相互激励,相互控制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。