Altifigence Academy

19 / 37 · Khái niệm

parameter, localparam,$clog2 và cấu hình biên

Tách đầu vào chạy khỏi cấu hình và thiết kế độ rộng, kết thúc cho N=1 và số không là lũy thừa hai.

Tham số cố định khi elaboration

Cổng đổi khi hoạt động; parameter cấu hình trước tạo cấu trúc; localparam đặt tên hằng suy ra mà thể hiện không ghi đè. Không phải biến từng chu kỳ. Bộ đếm modulo N dùng 0..N−1. Với N≥2, độ rộng là $clog2(N); N=1 cho zero, nên dành tối thiểu một bit. N=0 ngoài hợp đồng.

Kết thúc tại cạnh cho phép

Khi count cũ chuyển từ N−1 về zero, pulse được ghi vào thanh ghi. Cạnh bị tắt giữ count và xóa pulse. Reset đồng bộ xóa cả hai, ưu tiên hơn enable. N là số nguyên dương trong miền hỗ trợ.

SystemVerilog
module modulo_tick #(
  parameter integer N = 5,
  parameter integer CW = (N <= 1) ? 1 : $clog2(N)
) (
  input  logic          clk, rst, enable,
  output logic [CW-1:0] count,
  output logic          pulse
);
  localparam logic [CW-1:0] LAST = CW'(N-1);
  always_ff @(posedge clk) begin
    if (rst) begin
      count <= '0;
      pulse <= 1'b0;
    end else begin
      pulse <= 1'b0;
      if (enable) begin
        if (count >= LAST) begin
          count <= '0;
          pulse <= 1'b1;
        end else count <= count + 1'b1;
      end
    end
  end
endmodule

CW xuất hiện ở cổng nên được mở ra. Giữ mặc định hoặc ≥max(1,$clog2(N)). Nhỏ hơn cắt LAST; lớn hơn tạo mã không dùng, được >= đưa về zero tại cạnh cho phép. CW'(N-1) ghi kích thước rõ, không sửa tham số sai. Xác nhận trước elaboration: assertion lúc chạy không chữa khai báo sai.

Ma trận cấu hình

NCW mặc địnhcount sau các cạnh cho phép từ resetpulse sau
110,0,01,1,1
211,0,10,1,0
531,2,3,4,00,0,0,0,1
831,2,3,4,5,6,7,00,0,0,0,0,0,0,1

Một bit lưu không làm hai trạng thái hợp lệ cho N=1. N=5 thường không ghé 5,6,7. Chỉ thử lũy thừa hai sẽ giấu phép so sánh quay vòng bị thiếu.

Thực hành: hành vi và từ chối

Tạo N=1,2,5,8, chạy ít nhất hai chu kỳ đếm, dừng ở cuối và reset cùng enable. So từng count/pulse. Tham chiếu nguyên xóa khi reset, đặt pulse zero rồi tăng modulo N với enable và phát hiện quay vòng, không dùng CW hay trạng thái nội bộ. Kiểm tra từ chối N=0 và CW thiếu. Tái sử dụng được chứng minh trong miền khai báo và kiểm tra, không bởi một mặc định chạy đúng.

Lựa chọn áp dụng cho trình duyệt này. Có thể đổi ở chân trang bất cứ lúc nào.