5 / 24 · Khái niệm
Đọc phép truyền thanh ghi tại các cạnh xung nhịp
Tách trạng thái cũ và trạng thái tiếp theo, rồi theo dõi cách tín hiệu cho phép giữ giá trị đã lưu.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Mọi thanh ghi đều đọc trạng thái cũ
Bắt đầu bằng việc xác định thông tin phải tồn tại giữa các chu kỳ. Bộ tích lũy, toán hạng đã ghi nhận, số đếm vòng lặp và valid đầu ra là trạng thái. Tổng của bộ tích lũy hiện tại và toán hạng là giá trị tổ hợp. Chỉ ghi một biến chưa đủ để giải thích sự lưu trữ; hãy xác định sự kiện ghi nhận giá trị của nó.
Bộ tích lũy này chỉ cộng x tại cạnh lên khi en được kích hoạt. Khi en thấp, nó giữ giá trị. Giá trị trung gian chín bit làm rõ phép cộng; chọn tám bit thấp của nó xác định hành vi modulo-256. Phép gán không chặn trong always_ff lên lịch trạng thái tiếp theo bằng các giá trị đọc tại cạnh hiện tại. Đọc khối như các phép gán phần mềm tức thời sẽ diễn giải sai khi có nhiều thanh ghi.
logic [7:0] acc;
logic [8:0] next_sum;
assign next_sum = {1'b0, acc} + {1'b0, x};
always_ff @(posedge clk) begin
if (rst) acc <= 8'd0;
else if (en) acc <= next_sum[7:0];
endĐặt lại là đồng bộ và ưu tiên hơn tín hiệu cho phép. Bỏ phép gán tuần tự khi en thấp nghĩa là giữ thanh ghi. Ngược lại, bỏ phép gán trên một đường tổ hợp có thể tạo ra chốt ngoài ý muốn. Với logic trạng thái tiếp theo tổ hợp, hãy đặt giá trị mặc định rồi ghi đè trong các điều kiện cụ thể.
| Cạnh | rst | en | x | acc cũ | acc mới |
|---|---|---|---|---|---|
| 0 | 1 | 1 | 9 | Chưa biết | 0 |
| 1 | 0 | 1 | 7 | 0 | 7 |
| 2 | 0 | 0 | 100 | 7 | 7 |
| 3 | 0 | 1 | 250 | 7 | 1 |
Tại cạnh 2, đầu vào 100 đang hiển thị không được chấp nhận. Tại cạnh 3, 7+250=257 thu hẹp thành 1. Phân biệt việc đưa dữ liệu ra với việc chấp nhận dữ liệu vẫn thiết yếu khi en sau này trở thành valid AND ready.
Với a<=x; b<=a;, a cũ=5 và x=9 tạo ra a mới=9, b=5. Nếu b phải nhận 9, hãy nối đầu vào của nó với x. Hoàn thành cột trạng thái cũ trước, rồi tính tất cả giá trị trạng thái tiếp theo cùng nhau; cách này làm lộ sai lệch một chu kỳ giữa dữ liệu và điều khiển.
Tự thử
Ban đầu a=4 và b=0. Đầu vào x lần lượt là 8 rồi 12, với a<=x; b<=a tại mỗi cạnh. a và b bằng bao nhiêu sau cạnh thứ hai?
Đọc giải thích
Sau cạnh thứ nhất, a=8 và b=4. Sau cạnh thứ hai, a=12 và b=8. Mỗi cập nhật b dùng a cũ, nên x=12 không đi qua cả hai thanh ghi tại một cạnh.