FIFO(同步+异步)

不管是同步FIFO还是异步FIFO都要判断full不能写和empty不能读

关键:full和empty信号如何产生

1.计数器

2.地址位扩展一位

 

2022.4.14

1.什么是FIFO?区别?  FIFO是一个基础的数据缓存器,与普通的存储器的区别是没有外部读写地址线,其数据地址由其内部读写指针决定,完成后自动+1。

2.什么时候使用FIFO?  ①在处理跨时钟域时可以使用FIFO进行数据的缓冲 ②对于不同宽度的数据接口传输数据时,例如DSP可能是16位数据输入,单片机位8位数据输出,使用FIFO达到数据匹配。

3.重要概念  

FIFO的宽度:指的是FIFO一次读写操作的数据位 例如4位    FIFO的深度:指的是FIFO可以存储多少个N位的数据,比如8个8位的数据。

 

读信号和写信号工作在不同的时钟域,同步即为同一个时钟,异步即为不同时钟。

判断寄存器的状态需要进行两次判断,分别为写满状态和读空状态。通过比较读写地址指针来判断FIFO写满还是读空,比较时,需要将写(读)时钟同步到读(写)时钟,用两级寄存器实现。

什么是地址指针?用来判断FIFO读写状态   举例如下:若FIFO是16位数据,需要四比特数来表示16个数据,FIFO的指针数要比地址数多一位?

因为用最高位来判断是否折回,若写指针1 0000,读指针0 0000,则为满,1 0011 和 0 0011 同样为满。若两个指针MSB相同,说明两个指针折回次数相同,若地址位一样则表示为空。

 

 

跨时钟域

1.单时钟相当于同步设计,整个系统中只有一个时钟,更少产生亚稳态,更少违背建立和保持时间。

2.多时钟问题:①频率不同 ②频率相同相位不同 

设计难题:亚稳态以及为违背建立和保持时间。 如果一个时钟域的输出在另一个时钟域中的时钟上升沿发生改变,则会导致第二个时钟进入亚稳态,导致一整个系统进入亚稳态导致一系列的错误。

 

多时钟设计的处理技术:在多时钟的设计中,仿真和综合遵循一定的准则将会带来很大的好处:

①时钟命名规则 

1)系统sys_clk 发送tx_clk 接受rx_clk 同一个时钟域命名时应该使用同一个前缀,可以使每个工程师辨别每个特定信号使用的时钟域,可以确定直接使用该信号还是加同步器后再使用。

 

②分模块设计

1)每个模块中只应当有一个时钟

2)当信号在跨时钟域传输时,使用同步器模块(作用是使得所有信号在进入一个时钟域模块时,与该模块时钟域同步)

3)同步器模块规模应尽可能小,优点在STA分析变得简单,因为每个模块的信号都与时钟保持同步,设计成了同步的。(且对于同步器模块不需要进行STA分析),只需要保证满足保持时间的要求。?什么意思?

跨时钟域时,需要加此模块,将信号从原来的时钟域转换到将使用该信号的时钟域。

 

posted @ 2022-04-11 21:20  十点三十睡觉  阅读(433)  评论(0编辑  收藏  举报