FPGA兩片RAM的桌球操作

2021-09-27 07:08:07 字數 1563 閱讀 9532

在資料處理的乙個週期內,為了避免同時對ram讀和寫,因此利用桌球操作將讀寫分開,在乙個週期內僅對一片ram讀,對另一片ram寫,下個週期後再換回來。因此,實際上一片ram的操作週期是兩個資料處理週期。

scyc :資料處理週期

exsig :ram切換訊號

wsig :ram寫訊號

rsig : ram讀訊號

addr1 :ram1讀寫位址

addr2 :ram2讀寫位址

dat_i : ram寫資料

dat_o :模組輸出資料

時序圖如下所示,在每個wsig和rsig訊號來時,在exsig為高電平時寫ram1、讀ram2,當exsig為低電平時,寫ram2.讀ram1,由此避免了在乙個scyc週期內對一片ram進行讀寫。

具體實現**如下:

always@(posedge clk,negedge rst_n)if(

!rst_n) begin

w1clk<=

1'b0;

w2clk<=

1'b0;

r1clk<=

1'b0;

r2clk<=

1'b0;

endelse

if(exsig==

1'b1)

if(wsig)

w1clk<=

1'b1;

else

if(rsig)

r2clk<=

1'b1;

else begin

w1clk<=

1'b0;

r2clk<=

1'b0;

endelse

if(exsig==

1'b0)

if(wsig)

w2clk<=

1'b1;

else

if(rsig)

r1clk<=

1'b1;

else begin

w2clk<=

1'b0;

r1clk<=

1'b0;

endelse begin

w1clk<=

1'b0;

w2clk<=

1'b0;

r1clk<=

1'b0;

r2clk<=

1'b0;

end

ram的讀寫位址是在每次讀訊號後發生變化

always@(posedge clk,negedge rst_n)if(

!rst_n) begin

addr1<=

5'd0;

addr2<=

5'd0;

endelse

if(r1clk)

addr1<=addr1+

1'b1;

else

if(r2clk)

addr2<=addr2+

1'b1;

舊作兩片 回憶起曾經的心情

那些消逝了的和未曾存在的 似水流年依然 幼稚的彷徨 我可以凝視著 陽光暖的 明亮 睡意悠揚 淹沒了憂傷 只留下一片 金黃於零六年末洪慶校區8f jx 下午數學課昏睡時夢遊之作,後寫到語文期末考試卷子上 中午,太陽叫我起床 透過窗子的溫暖 一半刺眼,一半慈祥 總覺得少了點什麼呢 我想應該去流浪 讓心隨...

FPGA內部雙口RAM的時序

關於fpga內部雙口ram的時序總結 1 儲存時,雙口ram的儲存是在寫時鐘的上公升沿到來時完成的,因此要在寫時鐘的上公升沿到來時,資料跟寫位址都已經是個穩定的狀態,這樣才能保證資料的正確儲存。2 讀資料時,雙口ram的讀取實在讀時鐘的上公升沿到來時完成的,因此要在讀時鐘的上公升沿到來時,讀位址已經...

關於FPGA內部雙口RAM的時序總結

關於fpga內部雙口ram的時序總結 1 儲存時,雙口ram的儲存是在寫時鐘的上公升沿到來時完成的,因此要在寫時鐘的上公升沿到來時,資料跟寫位址都已經是個穩定的狀態,這樣才能保證資料的正確儲存。2 讀資料時,雙口ram的讀取實在讀時鐘的上公升沿到來時完成的,因此要在讀時鐘的上公升沿到來時,讀位址已經...