Altifigence Academy

32 / 37 · Thực hành

Thực hành tích hợp: xung định kỳ và bộ tích lũy cho phép

Đặc tả truyền giá trị cũ và kiểm tra tạm dừng, xung liên tiếp, reset đồng thời.

Xác định kết nối trước ghép

Nhận sample bốn bit không dấu tại mỗi cạnh lên có enable=1. Mỗi N mẫu nhận, tạo pulse có thanh ghi. Bộ tích lũy dùng pulse và sample tương ứng đã lưu tại cạnh lên kế tiếp, kể cả enable=0 lúc đó. total tám bit quay modulo 256. Reset đồng bộ xóa các tầng, bỏ mẫu đang chờ. Độ trễ một cạnh thuộc hợp đồng: bộ tích lũy đọc pulse/saved_sample cũ, không đọc giá trị không chặn mới của cùng cạnh. Lưu modulo_tick.sv và periodic_accumulator.sv này; N dương.

SystemVerilog
module periodic_accumulator #(parameter integer N = 3) (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic       pulse,
  output logic [7:0] total
);
  localparam integer CW = (N <= 1) ? 1 : $clog2(N);
  wire [CW-1:0] count;
  logic [3:0] saved_sample;
  modulo_tick #(.N(N)) tick_u (
    .clk(clk), .rst(rst), .enable(enable),
    .count(count), .pulse(pulse)
  );
  always_ff @(posedge clk) begin
    if (rst) saved_sample <= 4'b0;
    else if (enable) saved_sample <= sample;
  end
  always_ff @(posedge clk) begin
    if (rst) total <= 8'b0;
    else if (pulse) total <= total + {4'b0, saved_sample};
  end
endmodule

Theo dõi dữ liệu cùng sự kiện

N=3, đầu vào trước và đầu ra sau cạnh.

Cạnhrstenablesamplepulse sautotal sau
E011900
E101200
E201400
E301710
E400907
E501107
E601307
E701517
E8111500

E4 cộng 7, không phải sample ngoài 9. enable chỉ điều khiển nhận mới, không hủy việc chờ. E8 bỏ 5 và xóa total. enable && pulse ở khâu dùng mẫu sẽ mất E4.

Tham chiếu tại ranh giới hệ thống

Giữ số mẫu nhận, giá trị chờ tùy chọn và total số nguyên. Tại cạnh không reset, trước hết dùng chờ cũ modulo 256; sau đó dùng enable/sample hiện tại tạo việc chờ ở lần nhận thứ N. Reset xóa mọi thứ. Không đọc tick_u.count hay saved_sample. Kích thích tại cạnh xuống, so sau đó: pulse, total, giữ khi không sự kiện, và loại mẫu đã dùng.

Bao phủ lỗi tích hợp

  • N=1 tạo xung liên tiếp: mỗi mẫu phải dùng đúng một lần tại cạnh kế tiếp.
  • N=3 với dừng trước/sau mẫu cuối: đếm nhận, không đếm mọi clock.
  • Đổi sample ngoài khi dùng mẫu với enable=0: phải dùng dữ liệu lưu.
  • Reset khi chờ hủy sự kiện và total.
  • Cộng vượt 255 rồi kiểm tra modulo 256.

Thay saved_sample bằng sample: E4 phải lỗi. Gắn việc dùng mẫu với enable rồi xác nhận lỗi khác. Khôi phục trước PASS. Hợp đồng đã thử là chức năng, một clock, độ rộng hữu hạn; không chứng minh CDC, đóng timing vật lý hay thực hành DDS miễn phí trong sản phẩm.

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.