在資料處理的乙個週期內,為了避免同時對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的讀取實在讀時鐘的上公升沿到來時完成的,因此要在讀時鐘的上公升沿到來時,讀位址已經...