![[IMG]](https://lh3.googleusercontent.com/-kqrQNgwyr9s/VR-91rq5FZI/AAAAAAAACHU/ste26QmFW18/w1358-h729-no/ram.png)
¤RAM viết tắt của cụm từ Random Access Memory, bộ nhớ truy cập ngẫu nhiên. ¤Thời gian đọc và ghi với các ô nhớ là như nhau, dù đang ở bất kỳ vị trí nào trên bộ nhớ, mỗi ô nhớ của RAM đều có một địa chỉ. ¤Thông thường mỗi ô nhớ là một Byte. ¤RAM có cơ chế đọc ghi dữ liệu hoàn toàn khác với băng, đĩa có cơ chế đọc ghi tuần tự. ¤RAM khác với ROM là bộ nhớ chỉ đọc.
2, Phân loại.
- Single port RAM là RAM chỉ có một kênh đọc và ghi, một đường vào địa chỉ, các
động tác đọc ghi trên kênh này chỉ có thể thực hiện lần lượt.
- Dual-port RAM là RAM có hai kênh đọc ghi riêng biệt tương ứng hai kênh địa chỉ, các kênh đọc ghi này có thể dùng chung xung nhịp đồng bộ cũng có thể không dung chung. Đối với Dual-port RAM có thể đọc và ghi đồng thời trên hai kênh.
- Synchronous RAM - RAM đồng bộ là RAM thực hiện thao tác đọc hoặc ghi đồng bộ.
- Asynchronous RAM- RAM không đồng bộ là RAM thực hiện thao tác đọc hoặc ghi
không đồng bộ, thời gian kể từ khi có các tín hiệu yêu cầu đọc ghi cho tới khi thao tác thực hiện xong thuần túy là trễ tổ hợp.
![[IMG]](https://lh3.googleusercontent.com/-kqrQNgwyr9s/VR-91rq5FZI/AAAAAAAACHU/ste26QmFW18/w1358-h729-no/ram.png)
-- Khối RAM có 2 thành phần chính là khối giải mã địa chỉ và dãy các thanh ghi, khối giải mã địa chỉ sẽ đọc địa chỉ và quyết định sẽ truy cập tới vị trí thanh ghi nào để thực hiện thao tác đọc hoặc ghi. Kích thước của khối RAM thường được ký hiệu là Mx N-bit trong đó M là số lượng thanh ghi, N là số bit trên 1 thanh ghi. Ví dụ 128 x 8 bit là khối RAM gồm 128 thanh ghi, mỗi thanh ghi 8 bit. Số bit cần thiết cho kênh địa chỉ là ADDR_WIDTH = [log2 M], nếu M = 128 nên số ADDR_WIDTH = 7. (COPY SÁCH

Single Port RAM Synchronous Read/Write
MÃ:
module ram_sp_sr_sw ( clk , // Clock Input address , // Address Input data , // Data bi-directional cs , // tín hiệu điều khiển cho phép đọc và ghi we , // Write Enable/Read Enable oe // Output Enable ); parameter DATA_WIDTH = 8 ; parameter ADDR_WIDTH = 8 ; parameter RAM_DEPTH = 1 << ADDR_WIDTH; //--------------Input Ports----------------------- input clk ; input [ADDR_WIDTH-1:0] address ; input cs ; input we ; input oe ; //--------------Inout Ports----------------------- inout [DATA_WIDTH-1:0] data ; //--------------Internal variables---------------- reg [DATA_WIDTH-1:0] data_out ; reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1]; //--------------Code Starts Here------------------ // Tri-State Buffer control // output : When we = 0, oe = 1, cs = 1 assign data = (cs && oe && ! we) ? data_out : 8'bz; // Memory Write Block // Write Operation : When we = 1, cs = 1 always @ (posedge clk) begin : MEM_WRITE if ( cs && we ) begin mem[address] = data; end end // Memory Read Block // Read Operation : When we = 0, oe = 1, cs = 1 always @ (posedge clk) begin : MEM_READ if (cs && ! we && oe) begin data_out = mem[address]; end else ; end endmodule
MÃ:
module ram_dp_sr_sw ( clk , // Clock Input address_0 , // address_0 Input data_0 , // data_0 bi-directional cs_0 , // Chip Select we_0 , // Write Enable/Read Enable oe_0 , // Output Enable address_1 , // address_1 Input data_1 , // data_1 bi-directional cs_1 , // Chip Select we_1 , // Write Enable/Read Enable oe_1 // Output Enable ); parameter data_0_WIDTH = 8 ; parameter ADDR_WIDTH = 8 ; parameter RAM_DEPTH = 1 << ADDR_WIDTH; //--------------Input Ports----------------------- input [ADDR_WIDTH-1:0] address_0 ; input cs_0 ; input we_0 ; input oe_0 ; input [ADDR_WIDTH-1:0] address_1 ; input cs_1 ; input we_1 ; input oe_1 ; //--------------Inout Ports----------------------- inout [data_0_WIDTH-1:0] data_0 ; inout [data_0_WIDTH-1:0] data_1 ; //--------------Internal variables---------------- reg [data_0_WIDTH-1:0] data_0_out ; reg [data_0_WIDTH-1:0] data_1_out ; reg [data_0_WIDTH-1:0] mem [0:RAM_DEPTH-1]; //--------------Code Starts Here------------------ // Memory Write Block // Write Operation : When we_0 = 1, cs_0 = 1 always @ (posedge clk) begin : MEM_WRITE if ( cs_0 && we_0 ) begin mem[address_0] <= data_0; end else if (cs_1 && we_1) begin mem[address_1] <= data_1; end end // Tri-State Buffer control // output : When we_0 = 0, oe_0 = 1, cs_0 = 1 assign data_0 = (cs_0 && oe_0 && ! we_0) ? data_0_out : 8'bz; // Memory Read Block // Read Operation : When we_0 = 0, oe_0 = 1, cs_0 = 1 always @ (posedge clk) begin : MEM_READ_0 if (cs_0 && ! we_0 && oe_0) begin data_0_out <= mem[address_0]; end else begin data_0_out <= 0; end end //Second Port of RAM // Tri-State Buffer control // output : When we_0 = 0, oe_0 = 1, cs_0 = 1 assign data_1 = (cs_1 && oe_1 && ! we_1) ? data_1_out : 8'bz; // Memory Read Block 1 // Read Operation : When we_1 = 0, oe_1 = 1, cs_1 = 1 always @ (posedge clk) begin : MEM_READ_1 if (cs_1 && ! we_1 && oe_1) begin data_1_out <= mem[address_1]; end else begin data_1_out <= 0; end end endmodule
-- Các tín hiệu điều khiển thao tác đối với RAM bao gồm CS – chip select, với mọi
thao tác thì đều yêu cầu CS phải ở mức cao. WE – write enable bằng 1 nếu cần ghi dữ liệu vào RAM. Tín hiệu OE – output enable bằng 1 nếu là đọc dữ liệu từ RAM, với thiết kế như vậy thì WE và OE không bao giờ đồng thời bằng 1.
3,Một số ví dụ khác.
128 x 8-bit synchronous single-port RAM with common read and write addresses:
MÃ:
module ram_single(q, a, d, we, clk); output[7:0] q; input [7:0] d; input [6:0] a; input we, clk; reg [7:0] mem [127:0]; always @(posedge clk) begin if (we) mem[a] <= d; q <= mem[a]; end endmodule
MÃ:
module bram_tdp #( parameter DATA = 72, parameter ADDR = 10 ) ( // Port A input wire a_clk, input wire a_wr, input wire [ADDR-1:0] a_addr, input wire [DATA-1:0] a_din, output reg [DATA-1:0] a_dout, // Port B input wire b_clk, input wire b_wr, input wire [ADDR-1:0] b_addr, input wire [DATA-1:0] b_din, output reg [DATA-1:0] b_dout ); // Shared memory reg [DATA-1:0] mem [(2**ADDR)-1:0]; // Port A always @(posedge a_clk) begin a_dout <= mem[a_addr]; if(a_wr) begin a_dout <= a_din; mem[a_addr] <= a_din; end end // Port B
always @(posedge b_clk) begin
Bạn có đam mê ngành thiết kế vi mạch
Liên hệ đăng ký tham gia Hội Thảo & Khóa Học Thiết Kế Vi Mạch
HotLine: 0972 800 931 Ms Duyên