1. 程式人生 > >單口RAM,雙口RAM,FIFO

單口RAM,雙口RAM,FIFO

總結:單口ram只有一組資料線、地址線,不能同時讀寫;雙口ram有兩組資料線、地址線。
在電路上的區別就是在latch的兩邊有幾個開關管。
在這裡插入圖片描述
在這裡插入圖片描述

單口與雙口的區別在於,單口只有一組資料線與地址線,因此讀寫不能同時進行。而雙口有兩組資料線與地址線,讀寫可同時進行。FIFO讀寫可同時進行,可以看作是雙口。
    雙口RAM分偽雙口RAM(Xilinx稱為Simple two-dual RAM)與雙口RAM(Xilinx稱為true two-dual RAM)。偽雙口RAM,一個埠只讀,另一個埠只寫;而雙口RAM兩個埠都可以讀寫。
    FIFO也是一個埠只讀,另一個埠只寫。FIFO與偽雙口RAM的區別在於,FIFO為先入先出,沒有地址線,不能對儲存單元定址;而偽雙口RAM兩個埠都有地址線,可以對儲存單元定址。


    非同步時鐘域的快取只要是雙口器件都可以完成。但FIFO不需對地址進行控制,是最方便的。

摘錄:

根據我的設計經驗,其實FIFO的核心還是一片RAM。只不過把RAM的操作封裝了一下,添加了兩個指標,也就是兩個地址暫存器,一個寫地址暫存器,一個讀地址暫存器。 當FIFO初始化時,讀地址暫存器和寫地址暫存器皆為零; 當FIFO寫一個數據時,把資料寫入當前地址暫存器指向的RAM地址,然後寫地址暫存器加1;如果加到RAM的底部了,就再次變為零; 當FIFO讀資料時,把讀地址暫存器的資料讀出來,然後讀地址暫存器加1;如果讀到RAM的底部了,就再次變為零; 如果讀地址暫存器追上寫地址暫存器,就說明讀空了,沒資料可讀了; 如果寫地址暫存器的值又追上了讀地址暫存器,就說明寫滿了,沒法寫了; 大概就是這樣了。

FIFO就是一個雙口BRAM,外部加上一些控制電路構成的,要想充分理解FIFO,最好先了解一下雙口BRAM