指针认为是读空,当最高位不同的时候,读指针等于写指针认为是写满;
同步电路。由于两者读写指针比较是在不同时钟域下进行,因此为了避免亚稳态需要进行同步设计。此处
通常采用格雷码进行比较(传输端首先 BIN TO GRAY,经过两级触发器在目的端同步,然后 GRAY TO BIN,进行
下一步的比较,得出空满状态),保证一次只有一位数据变化,利用格雷码结合两级触发器进行同步后,可以
严格保证至少数据不会出错(起码是原地踏步,不会造成满状态写入的情况),中间加的两级触发器会对实际
状态做延迟比较(避免了空读和满写),也属于保守预估,最多是不是真空/真满情况下告知空满,但是不会
导致数据出错,属于保守的方法。
FIFO 深度计算,计算主要考虑最坏的情况,例如 100wclk 里面进来 80 个这种,需要考虑 200 个时钟内连
续进来 160 个的情况,然后计算深度也是根据“平均进来一个出去几个,然后乘以最大连续量即可得到 FIFO
深度”这样的方式考虑最大深度。
同步 FIFO 由于驱动时钟同步,因此可省去中间同步器以及格雷码编码机制,其作用原理和异步 FIFO 类似。
4
、双端口
RAM
的实现
/
要求自己写双端口
RAM
(
H:\Desktop\Hardware_study\Async_Dual_port_ram
)
FPGA 内部 RAM 资源分为 Block RAM 和 Distribute RAM,前者一般用于大量数据的缓存,后者多用于小部分数据
缓存。就速度而言由于 Distribute RAM 利用 FPGA 内部 Slicem 的 LUT 存储资源,少量存储的话速度比较快,但是大
量存储会对布线造成影响,难以保证时序。
FPGA 可以配置 Single-port-ram, Simple-port-ram, True-port-ram 等形式的 RAM,读写模式有 write-first, read-first,
no-change 等模式,write-first 表明输出端口的数据和写入的数据相同,read-first 表明输出端口的数据为当前地址之
前存储的数据,
no-change
表明输出数据为写入之前一刻的数据不变;
Single-port-ram 同时只能进行读或写操作;True-port-ram 可同时进行读写操作,但是要避免地址冲突,不能两
个端口同时对一个地址写入,Simple-port-ram 实际上是 True-port-ram 只开启了 A 端口的写入和 B 端口的输出。
5、两级触发器同步/ 应用场合/ MTBF 的计算以及 2-FF 的计算
两级触发器通常用于异步时钟域之间的单比特信号传输,通常是控制信号。其抑制亚稳态传播的原理并不是避
免亚稳态的发生,也无法避免出错信号的继续传输,而是尽量减少亚稳态传播的概率。根据触发器
MTBF
(平均故
障时间间隔)计算,一级触发器的 MTBF = (e^(tmet/c1) / c2*f*a) 两级触发器 MTBF = (MTBF1)*(MTBF2),相当于不稳
定态在第一级触发器后被阻断了传播。如果条件更苛刻可考虑三级触发器。
6、握手机制/ 代码(H:\Desktop\Hardware_study\Async_Dual_port_ram)
握手机制通常用于数据传输速率要求不高但要求准确的场合,两边的握手信号都需要各自时钟域的同步器进行
同步。当接收端经过同步电路接收到
req
信号后锁存总线数据,然后发出
ack
信号,
ack
经过同步电路后到达发送端,
发送端接受后撤销 req 信号,接收端也撤销掉 ack 信号,一次握手完成。
评论2
最新资源