一 RAM
1.BRAM 和分布式RAM
BRAM就是block ram 顾名思义就是块ram,一般是用的逻辑内部的已经有的存储资源做的。
分布是RAM站在逻辑的角度也是RAM,但是实际上是用寄存器和LUT搭的。
2.IP核生成RAM 和IP核生成FIFO:
通过IP的调用生成的RAM和FIFO。
3.以及他们的调用:
自己点开一个IP核的界面就可以调用了 。
二:实际应用
1.RAM中初始化
一般实际应用中,一种是ram在例化的时候,可以在ip里面设置初始值。这样每次复位都会有初始值写入。另一种是逻辑实现,顺次地址自加然后写入一些值。
2.RAM冲突
读写冲突、写写冲突(双口的)
读写冲突发生在同一时间对同一个地址进行读写操作时。例如,当一个端口正在向某个地址写入数据,而另一个端口同时从该地址读取数据时,就会发生读写冲突。在这种情况下,读取的数据可能是未更新的旧数据,或者是一个未知的状态。
我们是通过空满指示信号保证的读写冲突。
但是一般用读写地址作比较判断RAM的空满,都不直接使用RAM使用的读写地址,一般是读写的时序,使用打拍子后的读地址或者写地址,与另一个没有打拍的地址比较作为空满的判断。
3.应用
代码中定位信号的增加,可以分为输入部分的定位和输出部分的定位,以及中间编码部分的定位。
代码中一般也要增加异常复位,一般这种异常复位包括CPU给过来的复位,状态异常自己生成的复位(ram中满了,空了,状态机死了等)
ram的定位一般可以包括:输入,输出计数,信号sop 和eop ,en的计数,ram状态跳转时候的一些计数。
二 :RAM仿真
RAM仿真最好初始化一下ram中的值,一般设备上的存储器件初始化都会写0的,所以仿真的时候也要记得初始化ram。初始化ram的代码可以找AI帮忙写一写。
不过不仿真初始化,用高阻态可以观察一下哪些信号有异常也是比较好的。