重要接口部件——SRAM

重要接口部件——SRAM

SRAM在數學模型中對應着靜態數組。

當給出地址下標後,數組會輸出所存儲的數據值。當給出數據地址(Address),並被時鐘上升採樣後,SRAM的數據輸出Q端將會輸出存儲的數據;當SRAM處於存儲數據改寫狀態時,SRAM將在時鐘上升沿採樣數據輸入D端的信號,並將其存儲到內部單元中。

下面時SRAM的Verilog仿真模型:

module spram #(parameter ADDR_WIDTH=6 ,DATA_WIDTH=8)(
	input [(DATA_WIDTH-1):0] data,
	input [(ADDR_WIDTH-1):0] addr,
	input we, 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) begin
		ram[addr] <= data;
    end
	addr_reg <= addr;
end
assign q = ram[addr_reg];
endmodule

SRAM的時序

標準的SRAM讀寫時序如下圖所示,改圖源自SMIC65nmSRAM模型,其他廠家SRAM時序圖也基本一樣。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QtD0VTeD-1591415780730)(重要接口不簡——SRAM.assets/1591280708658.png)]

同步SRAM的時序與寄存器(D觸發器)的最大區別就是讀取的數據內容相對於寄存器晚一個時鐘節拍,寫時序則是完全一樣(在時鐘沿鎖存)。

SRAM時序於APB讀寫時序基本一致。

寄存器堆

無論時RegFile還是SRAM,如果地址位寬於數據存儲深度比例較大,都會有較大的面積浪費。

例如256×256的RAM,地址位寬爲256位,數據存儲個數位256個,在ASIC中回有較大的MUX單元浪費,而相對FPGA,也有一些額外的開銷浪費,所以在使用時儘量用小的地址位寬。

此外在FPGA中,只有SRAM而沒有RegFile,而在CPLD中則存在異步SRAM,即類似組合電路的RAM,一旦給出地址,數據立刻輸出。

雙口RAM

除了上面的單口RAM外,還有一種支持雙地址操作的RAM,稱爲雙口RAM(Dual Port RAM)。

雙口RAM分成兩種:一種是簡單雙口RAM,採用單一時鐘,支持一個都地址口和一個寫地址口;另外一種時真雙口RAM,真雙口RAM支持兩個時鐘,同時支持完整的兩套地址讀寫。

在低端FPGA種一般只有簡單雙口RAM,只有在高端的FPGA中才有真雙口RAM,這是因爲真雙口RAM的成本代價很高,而簡單雙口RAM的設計相對容易。

在ASIC工藝廠商裏同樣只有真雙口RAM與雙口Register File,而沒有簡單的雙口RAM。

下面內容時一個簡單雙口RAM的行爲模型:

module dpram #(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) begin
		ram[write_addr] <= data;
    end
	q_out <= ram[read_addr]; // read old data!
end
assign q = q_out ;
endmodule

源自:《通信IC設計》,摘錄下來,只做學習;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章