Menu
CoddyTech

Cổng đọc có 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 23 trên 38.

Một thao tác đọc có đăng ký sẽ ghi nhận dữ liệu trong bộ nhớ tại cạnh xung nhịp và giữ nguyên giá trị đó sau đó. Tín hiệu cho phép đọc có thể giữ lại đầu ra trước đó trong các chu kỳ bị vô hiệu hóa. Đặt lại thanh ghi đọc không yêu cầu xóa mọi từ trong bộ nhớ. Với các phép gán đọc và ghi không chặn, biểu thức đọc sẽ thấy từ trước cạnh xung nhịp.

Đ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.

always @(posedge clk) begin
    if(we) mem[waddr] <= data;
    if(rst) q <= 0;
    else if(re) q <= mem[raddr];
end

Thanh ghi đầu ra chỉ cập nhật ở cạnh đã chỉ định và khi nhánh cho phép được kích hoạt.

Độ trễ khi đọc tài liệu, hành vi khi tắt tính năng đọc và trạng thái nào được xóa khi đặt lại.

challenge icon

Thử thách

Trung bình

Triển khai bộ nhớ 8 bit gồm bốn từ, với thao tác ghi đồng bộ và thao tác đọc có đăng ký vào q. we ghi dữ liệu ở cạnh lên. rst chỉ xóa q một cách đồng bộ; nếu không, re nạp q từ mem[raddr] trước cạnh lên; khi re=0, q giữ nguyên. Bộ nhớ không được đặt lại, và thao tác ghi không phụ thuộc vào rst. Nếu thao tác đọc và ghi cùng địa chỉ tại một cạnh, q nhận từ cũ. Các bài kiểm tra khởi tạo các từ trước khi bật thao tác đọc. 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 mô-đun cùng các cổng. testbench.v bị khóa sẽ cung cấp các thay đổi đầu vào và in đầu ra sau khi chúng ổn định. Tệp này 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 thao tác 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ác giá trị 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 rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, output reg [7:0] q);
    // Thay phần giữ chỗ này bằng thiết kế của bạn.
    initial 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