(1)單口RAM
1.無讀使能rden信號的ModelSim功能仿真:
在不使用讀使能rden信號的情況下,單口RAM仿真結果表明:
1.寫使能wren為高時,寫數據操作有效;
2.寫使能wren為低時,讀數據操作有效;
3.寫有效(高)時,輸出端q輸出為剛寫入的數據;
4.一般選擇輸出寄存一拍。
2.有讀使能rden信號的ModelSim功能仿真:
在使用讀使能rden信號的情況下,單口RAM仿真結果表明:
1.讀使能rdren為高時,讀數據操作有效;
2.寫有效(高)時,讀使能信號為低,則輸出為上次讀使能信號有效時的數據;
3.寫有效(高)時,讀也有效(高)時,輸出端q輸出為剛寫入的數據。
另外,由於地址和數據在時鍾上升沿改變,因而此刻有效值仍為改變前的值。在下一上升沿,改變后的值有效。再下一個上升沿,輸出端q數據讀出。所以,由時序結果好像是經過“兩拍”后輸出數據。這源於數據是邊沿有效而不是中央有效(時序約束中也有涉及),同理SignalTap II中抓取的數據也會有這個情況。對於邊沿有效,在時鍾上升沿,信號的有效值為改變前的結果。
(2)雙口RAM
雙口RAM的仿真選用了真雙口RAM,有兩組PORT(A、B),初始內部數據為0。
仿真結果如下:
testbench中利用非阻塞賦值,在仿真時刻完成右值的更新,在仿真結束時刻完成左值的賦值。所以和單口RAM仿真中提到的一樣,信號在第一個時鍾沿改變數值,在第二個時鍾沿有效,在第三個時鍾沿輸出數據(由於輸出寄存一拍),這和實際情況也一致。
說明下圖中幾個標尺的解釋:
1.在25000ps時刻,地址0寫入數據f0h,在下一個時鍾沿q_a端輸出f0h,后面同理。
2.在155000ps時刻,A端口對地址2進行寫操作,而B端口對地址2進行讀操作,出現了Mixed Port Read-During_Write情況,在配置IP核時,我們選擇了讀端口輸出Old memory contents appear,故此時B端口讀出地址2原先的值f2h。同理,在165000ps時刻,B端口讀出地址2原先的值02h。
另外對於下面的設置,有點不理解,不知和上面有何區別。