FPGA 內部雙口塊RAM 讀寫實現

2021-08-28 04:02:57 字數 3116 閱讀 3469

由xilinx官網文件pg058 「logicore ip block memory generator v8.2」

fpga 內部塊ram 的讀時序如下圖:

可知,塊ram的讀延時為兩個時鐘週期。

fpga 內部塊ram 的寫時序如下圖:

可知,塊ram 的寫延時為0,但是ram 中的內容是在寫的下乙個時鐘改變。

在ise下實現對fpga內部塊ram 的讀寫**:

module top(input user_clk);`define dly #1reg fpga_enable=0;

reg[3:0] fpga_write_enable=4'h0;

reg[31:0] fpga_address=0;

reg[31:0] fpga_write_data=0;

reg[31:0] fpga_read_data_reg=0;

wire[31:0] fpga_read_data;

reg[10:0] count=0;

always @ (posedge user_clk)

begin

count <= count + 1;

if(count<=100)

begin

fpga_enable <= 0;

fpga_write_enable <= 4'h0;

end

else if((count <= 105)&&(count >100))

begin

fpga_enable <= 1;

fpga_write_enable <= 4'hf;

fpga_address <= fpga_address + 4;

fpga_write_data <= fpga_write_data + 1;

end

else if((count <= 110)&&(count >105))

begin

fpga_enable <= 0;

fpga_write_enable <= 4'h0;

fpga_address <= 0;

fpga_write_data <= 0;

end

else if((count <= 117)&&(count >110))

begin

fpga_enable <= 1;

fpga_write_enable <= 4'h0;

fpga_read_data_reg <= fpga_read_data;

fpga_address <= fpga_address + 4;

end

else if(count == 118)

begin

fpga_enable <= 0;

count <= count;

end

end

bbbb your_instance_name (

.clka(user_clk), // input clka

.ena(fpga_enable), // input ena

.wea(fpga_write_enable), // input [3 : 0] wea

.addra(fpga_address), // input [31 : 0] addra

.dina(fpga_write_data), // input [31 : 0] dina

.douta(fpga_read_data), // output [31 : 0] douta

.clkb(clkb), // input clkb

.enb(enb), // input enb

.web(web), // input [3 : 0] web

.addrb(addrb), // input [31 : 0] addrb

.dinb(dinb), // input [31 : 0] dinb

.doutb(doutb) // output [31 : 0] doutb

);

endmodule

效果圖:

從上圖可以看出,在位址4~20裡面寫入了1-5的數,資料讀出的時候對應位址的資料都延時了兩個時鐘週期才輸出。

FPGA內部雙口RAM的時序

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

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

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

FPGA內部計算小數

謂定點小數,就是小數點的位置是固定的。我們是要用整數來表示定點小數,由於小數點的位置是固定的,所以就沒有必要儲存它 如果儲存了小數點的位置,那就是浮點數了 既然沒有儲存小數點的位置,那麼計算機當然就不知道小數點的位置,所以這個小數點的位置是我們寫程式的人自己需要牢記的。先以10進製為例。如果我們能夠...