Thứ Ba, 1 tháng 5, 2018

[System Verilog] Mô hình mô phỏng sự kiện – phần 2: Thuật toán tham khảo

Tiếp theo bài: http://nguyenquanicd.blogspot.com/2018/04/system-verilog-cac-vung-mien-su-kien.html

1. Mô phỏng sự kiện

System verilog được định nghĩa trong theo một mô hình thực thi sự kiện rời rạc. Nghĩa là việc thực thi mô phỏng dựa trên các sự kiện rời rạc. Mô phỏng sự kiện rời rạc được mô tả chi tiết trong chuẩn System Verilog nhằm cung cấp một bối cảnh để mô tả ý nghĩa và giải thích sự hợp lệ của các cấu trúc SystemVerilog. System Verilog cũng cung cấp thuật toán tham chiếu tiêu chuẩn dành cho mô phỏng, mà tất cả các trình mô phỏng phải tuân theo. Trong các định nghĩa về mô hình thực thi sự kiện, có rất nhiều lựa chọn và sự khác biệt về chi tiết thực hiện trong các trình mô phỏng. Bên cạnh đó, các trình mô phỏng SystemVerilog được tự do sử dụng các thuật toán khác nhau từ các thuật toán được mô tả trong chuẩn nhưng hiệu quả thể hiện với người dùng phải phù hợp với thuật toán tham chiếu được mô tả trong chuẩn.

2. Process

Một mô tả System Verilog bao gồm các thread thực thi hoặc các process đã được kết nối. Thread thực thi là một chuỗi nhỏ nhất các code của System Verilog được quản lý độc lập bởi một thời gian biểu (scheduler). Các process là các đối tượng có thể được ước lượng, có thể có trạng thái, và có thể đáp ứng theo các ngõ vào của chính nó để sinh ra các ngõ ra. Các process là các phần tử được lập thời gian biểu đồng thời, ví dụ như các thủ tục initial. Các process bao gồm không giới hạn các phần tử gốc (primitive), thủ tục initial, always, always_comb, always_latch, always_ff, các phép gán liên tục (wire, assign), các task bất đồng bộ và các phát biểu gán thủ tục (= hoặc <=)

3. Sự kiện cập nhật (update event)

Sự kiện cập nhật là sự thay đổi trạng thái của một net hoặc một biến trong mô tả hệ thống, hệ thống ở đây được hiểu là code System Verilog.

4. Sự kiện ước lượng (evaluation event)

Sự kiện ước lượng là sự ước lượng (tính toán) của một process. Các process nhạy với các sự kiện cập nhật. Khi sự kiện cập nhật xuất hiện, tất cả các process bị ảnh hưởng (nhạy) với sự kiện này sẽ được xem xét ước lượng theo một thứ tự tùy ý. Các sự kiện ước lượng bao gồm cả các callback PLI. Callback PLI là các điểm trong mô hình thực thi tại đó các chương trình ướng dụng PLI có thể được gọi từ nhân mô phỏng.

Hình 1: Mô hình mô phỏng sự kiện của System Verilog
5. Thuật toán tham khảo của sự mô phỏng System Verilog
Hình 2: Sơ đồ thuật toán tham khảo của sự mô phỏng System Verilog
Trong thuật toán trên sự thực thi một vùng, ví dụ như “Thực thi vùng Active”, “Thực thi vùng Pre-Active”, … sẽ tuân theo thuật toán sau đây:
Hình 3: Thuật toán tham khảo của sự thực thi của một vùng trong khe thời gian
Code tham khảo của thuật toán:
execute_simulation {
  T = 0;
  initialize the values of all nets and variables;
  schedule all initialization events into time 0 slot;
  while (some time slot is nonempty) {
    move to the first nonempty time slot and set T;
    execute_time_slot (T);
  }
}
execute_time_slot {
  execute_region (Preponed);
  execute_region (Pre-Active);
  while (any region in [Active ... Pre-Postponed] is nonempty) {
    while (any region in [Active ... Post-Observed] is nonempty) {
      execute_region (Active);
      R = first nonempty region in [Active ... Post-Observed];
      if (R is nonempty)
      move events in R to the Active region;
    }
    while (any region in [Reactive ... Post-Re-NBA] is nonempty) {
      execute_region (Reactive);
      R = first nonempty region in [Reactive ... Post-Re-NBA];
      if (R is nonempty)
      move events in R to the Reactive region;
    }
    if (all regions in [Active ... Post-Re-NBA] are empty)
    execute_region (Pre-Postponed);
  }
  execute_region (Postponed);
}
execute_region {
  while (region is nonempty) {
    E = any event from region;
    remove E from the region;
    if (E is an update event) {
      update the modified object;
      schedule evaluation event for any process sensitive to the object;
    } else { /* E is an evaluation event */
      evaluate the process associated with the event and possibly
      schedule further events for execution;
    }
  }
}
 6. Mô hình mô phỏng dựa trên sự kiện của Verilog
Verilog mô tả về mô hình mô phỏng dựa trên sự kiện như sau: Các sự kiện có thể xuất hiện ở các thời điểm khác nhau. Để giữ việc theo dấu các sự kiện và đảm bảo chúng được xử lý theo thứ tự đúng, các sự kiện được giữ trong một hàng đợi sự kiện (event queue), được sắp xếp theo thời gian mô phỏng. Việc đưa một sự kiện vào hàng đợi này được gọi là "lập thời gian biểu" cho sự kiện. Hàng đợi sự kiện Verilog được phân chia theo 5 vùng khác nhau là:
  • Các sự kiện active
  • Các sự kiện Inactive
  • Các sự kiện cập nhật gán nonblocking
  • Các sự kiện monitor
  • Các sự kiện tương lai
Các sự kiện có thể được thêm vào bất cứ vùng nào trong 5 vùng này nhưng chỉ bị loại bỏ ở vùng active. Quá trình xử lý tất cả các sự kiện active được gọi là chu kỳ mô phỏng (simulation cycle).
Hình 4. Thuật toán thao khảo của mô hình mô phỏng dựa trên sự kiện của Verilog 2005
Code tham khảo của thuật toán trên:
while (there are events) {
  if (no active events) {
    if (there are inactive events) {
      activate all inactive events;
    } else if (there are nonblocking assign update events) {
      activate all nonblocking assign update events;
    } else if (there are monitor events) {
      activate all monitor events;
    } else {
      advance T to the next event time;
      activate all inactive events for time T;
    }
  }

Chú ý, những mô tả trên đây là mô hình tham khảo mà các trình mô phỏng phải thực thi khi mô phỏng code System Verilog và Verilog chứ không phải là mô hình của việc viết code System Verilog hay Verilog.

0 bình luận:

Đăng nhận xét