FPGA中重要介面部件的設計 一

2021-09-27 03:07:27 字數 2609 閱讀 5243

1.sram在數學中對應靜態陣列。

(1)當給出資料位址(address),並被時鐘上公升沿取樣後,sram的資料輸出q端將會輸出儲存的資料;

(2)當sram處於儲存資料改寫狀態時,sram將會在時鐘上公升沿取樣資料輸入d端的訊號,並將其儲存到內部單元中。

sram的verilog**模型:

// a sram

module sram_6_8 #(parameter addr_width=6

,data_width=8

)(input [

data_width-1

:0] data,

input [

addr_width-1

:0] addr,

input we,

input clk,

output [

data_width-1

:0] q)

;reg [

data_width-1

:0] ram [2*

addr_width-1

:0];

reg [

addr_width-1

:0] addr_reg;

always@ (posedge clk) begin

if(we)

ram[addr]

<= data;

addr_reg <= addr;

endassign q = ram[addr_reg]

;endmodule

2.同步sram的時序與暫存器(d觸發器)最大的區別在於:讀取的資料內容相對於暫存器晚乙個時鐘節拍,而寫時序是一樣的(在時鐘沿鎖存)。sram時序與apb讀寫時序基本一致。

1.除以上的單口ram外,還有支援雙位址操作的ram,稱為雙口ram(dual port ram)。

2.雙口ram分為兩種:

(1)簡單雙口ram,採用單一時鐘,支援乙個讀位址口和乙個寫位址口;

(2)真雙口ram,支援兩個時鐘,同時支援完整的兩套位址讀寫。

簡單雙口ram的verilog模型:

module ram_6_8 #(parameter addr_width=6

,data_width=8

)(input [

data_width-1

:0] data,

input [

addr_width-1

:0] read_addr,

input [

addr_width-1

:0] write_addr,

input we,

input clk,

output [

data_width-1

:0] q)

;reg [

data_width-1

:0] ram [2*

addr_width-1

:0];

reg [

data_width-1

:0] q_out;

always@ (posedge clk) begin

if(we)

ram[write_addr]

<= data;

q_out <= ram[read_addr]

;//read old data!

endassign q = q_out;

endmodule

1.移位暫存器實際上就是多個d觸發器串聯在一起,實現資料的固定延遲。實現n個週期的延遲需要n-1個觸發器串接實現。

2.移位暫存器的另一種實現方式:通過雙口ram完成延遲:讀位址與寫位址相鄰,且每週期都移動乙個位置,並形成乙個固定差值,即延遲節拍數。

標準基於d觸發器的移位暫存器**如下:

module shift_reg_8_16 #(parameter taps=8

,width=16

)(input clk,

input rst_n,

input [

width-1

:0] d_in,

output [

width-1

:0] d_out);

generate

genvar i;

//利用generate語句自動生成並行多位移位暫存器

for(i =

0;i <

width

;i = i +1)

begin:shift_reg

reg [

taps-1

:0] r_reg;

wire [

taps-1

:0] r_next;

always@ (posedge clk or negedge rst_n)if(

!rst_n)

r_reg <=0;

else

r_reg <= r_next;

//更新移位暫存器狀態,可以在此處修改左移、右移或者狀態

assign r_next =

;assign d_out[i]

= r_reg[0]

;end

endgenerate

endmodule

FPGA重要的設計思想

fpga重要設計思想 1.速度和面積互換原則。以面積換速度可以實現很高的資料吞吐率,其實串 並轉換 就是一種以面積換速度的思想 2.桌球操作。桌球操作的處理流程為 輸入資料流通過 輸入資料選擇單元 將資料流等時分配到兩個資料緩衝區,通過 輸入資料選擇單元 和 輸出資料選擇單元 按節拍 相互配合的切換...

基於FPGA的VGA介面設計(一)

介面類的設計幾乎是每個fpga設計者都需要做的東西,可以試想一下,乙個沒有介面的設計,我們想要的指令無法傳遞到fpga,fpga中需要反饋的資料也無法被我們所知 因此,在寫這篇部落格以前,我回顧了一下我的學習過程,發現不知不覺中學習了很多種介面,其實在學習的時候並不知道,所以有時候我們得回頭看看,總...

基於FPGA的VGA介面設計(三)

在之前的文章中介紹了有關vga的掃瞄方式 行場同步時序,繼續記錄一下vga時序中的具體引數是怎麼來的。我們經常會看到有關vga解析度這樣的描述 640x480 60hz 當然還有其他的解析度形式,意思就是說,1s之內重新整理60張,每張的有效顯示區域是640x480個畫素點,來看一下下圖中詳細的描述...