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];
endThanh 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.
Thử thách
Trung bìnhTriể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;
endmoduleBà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
1RTL tổ hợp đáng tin cậy
Giá trị mặc định ngăn chốtBộ mã hóa ưu tiênKiểm tra one-hotGiải mã case an toànÔn tập: Bộ định tuyến yêu cầu2Độ rộng bit và số học có dấu
Bảo toàn các bit nhớPhép so sánh có dấuDịch phải số họcTràn số và bão hòaÔn tập: hiệu có dấu5Bộ nhớ và bảng tra cứu
Bảng ROM tổ hợpLưu trữ bằng mảng thanh ghiCổng đọc có thanh ghiChuyển tiếp dữ liệu khi đọc và ghiÔn tập: Ngân hàng có hai cổng đọcTự luyện tập: Trình biên dịch Verilog online