RAM模式:雙口RAM
1.條件:單一時鍾,輸入位寬:8,輸出位寬:32;
圖1.1 仿真總體波形圖
圖1.2 8位寫入32位讀出
圖1.3和圖1.4 從wren為0之后讀出的數據才不會產生讀出數據不定或者出錯的情況
仿真出的一些注意點:
(1)如上圖1.2,當8位寫入,32位讀出時,從ram中讀出的數據的順序跟ram中存入的數據的順序是相反的。例如,在ram中的地址0,1,2,3中的存入的內容是2a,2b,2c,2d,則在讀出時從地址0中讀出的內容是2d2c2b2a;
(2)如上圖1.3、圖1.4,當從ram中讀出數據時,在無其他限定條件的情況下,讀取地址會與寫入地址一起產生,但實際q的輸出得滯后一個總長度的讀取地址的時間延遲之后才開始按地址讀取並輸出ram中存的數據,但在wren使能的情況下,即使有讀取地址產生,此時讀出的數據仍然是會產生不確定的錯誤的,只有在wren為0之后,重新從地址0開始讀取出的數據才是穩定可靠的。(注:至於這種情況發生的原因,可能因為讀和寫共用同一時鍾,所以,在寫數據時讀出的話,發生了爭用的情況,不過這只是猜想,有待驗證)
2.條件:讀、寫時鍾分開(讀時鍾是寫時鍾的1/2分頻),輸入位寬:8,輸出位寬:32;
圖2.1 總體仿真時序圖
圖2.2 在wren有效時,從ram中讀出的q數據會出錯,特別是在最后一個讀出地址處
綜上所述,如果要使用簡單雙口ram ip(即一寫入端口一讀出端口),無論是在單時鍾,還是在讀寫分別為獨立時鍾的情況下,進行數據讀取,都必須要放在wren為0之后才開始讀取才穩妥,否則,讀出的數據可能就是出錯的數據,而非自己預期想要的數據。