由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 #1
reg 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進製為例。如果我們能夠...