Menu
CoddyTech

Lưu trữ bằng mảng thanh ghi

Thuộc phần Thiết kế và xác minh RTL trong hành trình Verilog của Coddy. Bài học 22 trên 38.

Một mảng không đóng gói có thể mô hình hóa các từ trong bộ nhớ phần cứng. Lệnh ghi có xung nhịp cập nhật một từ được chọn; thao tác đọc liên tục chọn một từ mà không cần xung nhịp đọc. Quá trình tổng hợp có thể triển khai các mảng nhỏ bằng thanh ghi hoặc suy ra tài nguyên bộ nhớ với những mẫu được hỗ trợ. Đừng bao giờ cho rằng một từ chưa được ghi sẽ bắt đầu bằng 0.

Đoạn trích liên quan; các khai báo và kết nối xung quanh được cung cấp trong thử thách.

reg [7:0] mem [0:3];
always @(posedge clk)
    if(we) mem[waddr] <= data;
assign q = mem[raddr];

Thao tác ghi được kích hoạt theo cạnh, còn thao tác đọc lấy từ dữ liệu đã lưu được chọn.

Xác định rõ thời điểm cho phép ghi và đọc; không phụ thuộc vào nội dung ban đầu chưa được xác định của bộ nhớ.

challenge icon

Thử thách

Trung bình

Triển khai bốn từ 8 bit. Ở cạnh lên, we ghi dữ liệu vào mem[waddr]. q là phép đọc tổ hợp bất đồng bộ từ mem[raddr]. Bộ nhớ không có tín hiệu đặt lại hoặc nội dung initial; testbench ghi vào từng địa chỉ được quan sát trước khi đọc địa chỉ đó. Các giá trị được quan sát sau cạnh lên, vì vậy thao tác ghi vào cùng địa chỉ sẽ hiển thị trong q. Các cột đầu ra: q. Tất cả tín hiệu điều khiển và dữ liệu đều ổn định trước mỗi cạnh lên của xung nhịp; kết quả được quan sát sau đó.

Hoàn thiện design.v và giữ nguyên tên module cùng các cổng. testbench.v bị khóa sẽ thay đổi đầu vào và in ra các đầu ra sau khi chúng ổn định. Testbench chọn một kịch bản bằng đối số của trình mô phỏng, chẳng hạn như +CASE=1; không cần đầu vào tiêu chuẩn. Không thêm lệnh in, độ trễ hoặc lệnh kết thúc mô phỏng vào thiết kế. Đầu ra mong đợi gồm một hàng giá trị thập phân cho mỗi lần quan sát, cách nhau bằng một dấu cách và kết thúc bằng ký tự xuống dòng.

Tự làm thử

module dut (input clk, input we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
    // Thay phần giữ chỗ này bằng thiết kế của bạn.
    assign q = 0;
endmodule
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Thiết kế và xác minh RTL

Tự luyện tập: Trình biên dịch Verilog online