• Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

  • Integrated Circuit Design - Chia sẻ kiến thức về vi mạch

    Vi mạch và Ứng dụng

Thứ Sáu, 4 tháng 5, 2018

[System Verilog] Mô hình mô phỏng sự kiện – phần 3: Ví dụ cho Verilog


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

Để làm rõ các khái niệm về sự thực thi mô phỏng theo mô hình sự kiện trong Verilog, lưu ý bài này chỉ phân tích trên mô hình thực thi mô phỏng của Verilog 2005, chúng ta sẽ phân tích ví dụ sau đây:
module evaluates2 (out);
  output out;
  reg a, b, c;
  initial begin    a = 0;
    b = 1;
    c = 0;
  end
  always c = #5 ~c;
  always @(posedge c) begin    a <= b; // evaluates, schedules,
    b <= a; // and executes in two steps
  end
endmodule 
Trong đoạn code ví dụ trên đây, khi thực thi mô phỏng, tại thời điểm bắt đầu T = 0, trình mô phỏng sinh ra 3 process tương ứng với 1 initial và 2 always. Tạm gọi là:
  • process initial
  • process always 1
  • process always 2
Các nhóm sự kiện tại thời điểm T = 0 như sau:
1/ Các sự kiện active gồm
  •   a = 0
  •   b = 1
  •   c = 0
Các sự kiện trên được xếp vào nhóm các sự kiện active của thời điểm hiện tại vì đây là các phép gán blocking và không có mô tả độ trễ. Các sự kiện này sẽ được đưa vào hàng đợi sự kiện để chờ thực thi.
2/ Các sự kiện inactive (không có tại thời điểm T = 0)
3/ Các sự kiện cập nhật phép gán nonblocking (không có tại thời điểm T = 0)
4/ Các sự kiện monitor (không có tại thời điểm T = 0)
5/ Các sự kiện tương lai (tại thời điểm T = 5) gồm
  • 1 sự kiện inactive tương lai (future inactive event): c = ~c
  • 2 sự kiện cập nhật phép gán nonblocking tương lai (future nonblocking assigment update event):
       a <= b
       b <= a

Trình tự thực thi của trình mô phỏng theo mô hình mô phỏng sự kiện của Verilog 2005 như sau:

1/ Thực thi các sự kiện active:
Theo lý thuyết các sự kiện active thuộc các process khác nhau có thể được thực thi theo bất kỳ thứ tự nào. Trong ví dụ này, vì các sự kiện active đều cùng thuộc 1 process nên sẽ thực thi theo thứ tự xuất hiện trong cặp begin-end. Cả 3 sự kiện này đều là các sự kiện cập nhật nên sẽ chạy theo nhánh của sự kiện cập nhật.
a = 0 và b = 1 sẽ được thi và cập nhật giá trị cho đối tượng được điều chỉnh là a và b. Do không có process nào khác chịu sự tác động của thay đổi này nên không có thêm các sự kiện ước lượng process được thêm vào hàng đợi sự kiện. Hai sự kiện này sẽ bị loại bỏ sau khi thực thi xong.
Hình 1: Quá trình xử lý hai sự kiện cập nhật a và b
c = 0 cũng chạy theo nhánh xử lý sự kiện cập nhật. Sau khi giá trị của c được gán, cũng không có sự kiện ước lượng process nào được thêm vào hàng đợi sự kiện, ở đây process always 2 chỉ chịu ảnh hưởng của sự kiện cạnh lên của c. Sự kiện c được loại bỏ khỏi hàng đợi sự kiện. Process initial cũng bị loại bỏ khi tất cả các sự kiện của nó đã hoàn thành.
Hình 2: Process initial chỉ tồn tại tại thời điểm T = 0
Trình mô phỏng tiếp tục kiểm tra còn tồn tại sự kiện nào hay không thì thấy còn các sự kiện tương lai tại thời điểm T = 5. Nó tiếp tục chạy qua nhánh này. Tăng T đến thời điểm 5, lúc này T = 5 trở thành thời điểm hiện tại, sự kiện c = ~c được chuyển thành sự kiện active và đây là một sự kiện cập nhật vì nó là phép gán blocking.
Hình 3: Quy trình xử lý sự kiện c = 0 và chuyển đến thời điểm T = 5
Sự kiện c = ~c sẽ làm cho c = 1 và làm xuất hiện cạnh lên của c. Theo nhánh xử lý sự kiện cập nhật, một sự kiện ước lượng của process always 2 sẽ được thêm vào hàng đợi sự kiện và sự kiện này sẽ được xử lý theo nhánh của sự kiện ước lượng.
Hình 4: Quy trình xử lý sự kiện cập nhật c = ~c và chuyển đến sự kiện ước lượng process always 2
Trong quá trình ước lượng process always 2, các giá trị vế bên phải của phép gán nonblocking trong process always 2 sẽ được ước lượng và gán giá trị như sau: 
  • b = 1 
  • a = 0
Chú ý, giá trị trên đây là giá trị ước lượng của vế bên phải phép gán nonblocking. Sau khi ước lượng xong, hai sự kiện cập nhật phép gán nonblocking được thêm vào hàng đợi sự kiện. Trình mô phỏng sẽ chạy qua nhánh xử lý sự kiện cập nhật phép gán nonblocking, kích hoạt tất cả các sự kiện này và chuyển đến nhánh xử lý sự kiện active. Vì a <= b và b <= a là sự kiện cập nhật nên nó sẽ đi vào nhánh xử lý sự kiện cập nhật.
Hình 5: Quy trình xử lý sự kiện ước lượng process always 2 và chuyển đến nhánh xử lý các sự kiện cập nhật phép gán nonblocking
Tại nhánh xử lý sự kiện cập nhật, thứ tự thực hiện là: 
  • a được gán bằng 1, không có process nào khác chịu tác động của sự thay đổi này nên không có sự kiện mới được thêm vào hàng đợi. 
  • Trình mô phỏng quay lại nhánh xử lý sự kiện cập nhật 1 lần nữa để gán b bằng 0, không có process nào khác chịu tác động của sự thay đổi này nên không có sự kiện mới được thêm vào hàng đợi.
Hình 6: Quá trình xử lý 2 sự kiện cập nhật phép gán nonblocking của a và b; chuyển đến thời điểm mô phỏng tiếp theo T = T + 5
Quá trình xử lý cho thời điểm T = 5 kết thúc, trình mô phỏng tăng đến thời điểm xử lý tiếp theo là T = 10. Quá trình xử lý c = ~c và process always 2 được lặp lại. Qua đây ta cũng thấy được đặc tính khác nhau của initial và always khi thực thi mô phỏng: 
  • initial chỉ thực thi một lần, các hoạt động của nó sẽ dừng khi các phát biểu của nó hoàn thành.
  • always được thực thi lặp lại, các hoạt động của nó chỉ dừng khi ngừng chạy mô phỏng.
Xét theo quá trình xử lý trên khái niệm khe thời gian (các bạn xem lại các phần trước để biết chi tiết) thì quá trình mô phỏng đoạn code ví dụ như hình minh họa sau đây:
Hình 7: Minh họa quá trình mô phỏng theo khe thời gian

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.

Thứ Hai, 30 tháng 4, 2018

[System Verilog] Mô hình mô phỏng sự kiện – phần 1: Các vùng sự kiện

Giảm và tránh hiện tượng chạy đua giữa code thiết kế và code kiểm tra là một mục tiêu quan trọng trong quá trình xây dựng môi trường mô phỏng, kiểm tra vì hiện tượng chạy đua sinh ra các kết quả mô phỏng không chính xác và mất thời gian để debug.
Để hạn chế hiện tượng chạy đua, System Verilog đã thêm nhiều vùng sự kiện (event region) mới so với Verilog. Loạt bài viết này sẽ mô tả chi tiết về các vùng sự kiện này dựa trên nhiều tài liệu tham khảo khác nhau để từ đó các bạn có thể tạm hiểu “hoạt động thực thi mô phỏng diễn ra như thế nào?”
Tham khảo chính:
1/ IEEE Std 1800™-2012
2/ IEEE Std 1364-2005
3/ http://www.sunburst-design.com/


1. Hiểu về thuật ngữ thời gian mô phỏng (simulation time)
Thời gian mô phỏng là thời gian được trình mô phỏng duy trì để mô hình hóa thời gian thực tế được chiếm giữ bởi một mô tả hệ thống trong khi mô phỏng. Một mô tả hệ thống ở đây được hiểu là code.

2. Hiểu về thuật ngữ khe thời gian (time slot)
Một khe thời gian bao gồm tất cả các hoạt động mô phỏng được xử lý trong các vùng sự kiện cho mỗi thời gian mô phỏng. Tất cả các hoạt động mô phỏng cho một thời gian mô phỏng cụ thể được thực thi cho đến khi không có bất kỳ hoạt động mô phỏng nào còn lại trong khe thời gian đó mà không làm tăng thời gian mô phỏng. Chú ý, việc thực thi các sự kiện mô phỏng trong một khe thời gian có thể cần phải lặp nhiều lần thông qua các vùng sự kiện mô phỏng trong cùng khe thời gian này. Đôi khi khái niệm khe thời gian được gọi bằng một tên khác là bước thời gian (timestep hoặc time step).

3. Hiểu một số thuật ngữ khác
3.1 Lập thời gian biểu (scheduling)
Lập thời gian biểu (hoặc lập lịch) là hoạt động sắp xếp, thiết lập thứ tự hoặc thời điểm để thực thi các sự kiện mô phỏng. Nó giống như việc bạn lập một thời khóa biểu hằng ngày, trong đó bạn sẽ liệt kê các công việc phải làm trong ngày, cái nào trước, cái nào sau và vào lúc nào. Tương tự, các sự kiện mô phỏng cũng cần được lập thời gian biểu để thực thi theo một thứ tự đúng.
3.2 callback
là một code có thể thực thi bất kỳ (code A), code này có thể truyền đến một code khác (code B) như một đối số và code B sẽ gọi lại (call back) code A để thực thi tại một thời điểm nào đó.

4. Các vùng sự kiện trong Verilog (IEEE Std 1364-2005)
Các vùng sự kiện này cho phép lập thời gian biểu cho các phát biểu mô phỏng của Verilog để mô hình hóa hành vi phần cứng thực tế. Verilog 2005 phân biệt 5 vùng sự kiện khác nhau:
  1. Các sự kiện active xuất hiện tại thời gian mô phỏng hiện tại và có thể được xử lý theo bất kỳ thư tự nào.
  2. Các sự kiện Inactive xuất hiện tại thời gian mô phỏng hiện tại nhưng phải xử lý sau khi tất cả các sự kiện active được xử lý.
  3. Các sự kiện cập nhật phép gán nonblocking được ước lượng trong suốt thời gian mô phỏng trước đó nhưng phải được gán tại thời gian mô phỏng này sau khi tất cả các sự kiện active và inactive được xử lý.
  4. Các sự kiện monitor phải được xử lý sau khi tất cả các sự kiện active, inactive và cập nhật phép gán nonblocking được xử lý.
  5. Các sự kiện tương lai xuất hiện trong thời gian mô phỏng tương lai (các khe thời gian tiếp theo). Các sự kiện tương lai là các sự kiện thuộc loại inactive và các sự kiện cập nhật phép gán nonblocking. Các sự kiện này được xây dựng trước để chuẩn bị cho các khe thời gian tương lai nên sẽ không xuất hiện trong hình minh họa một khe thời gian của Verilog.
Các vùng sự kiện của Verilog 2005
5. Các vùng sự kiện của System Verilog (IEEE Std 1800-2012)
System Verilog mở rộng sự phân chia một khe thời gian thành 17 vùng khác nhau. Các vùng này cơ bản đã bao gồm mô hình phân chia của Verilog cho mô phỏng, với cùng một mức độ xác định. Nói cách khác, code Verilog được sử dụng lại sẽ tiếp tục xử lý đúng mà không cần sửa đổi theo cơ chế của SystemVerilog.
Hình 2: Các vùng trong một khe thời gian của System Verilog 2012
Một trình mô phỏng System Verilog tương thích phải duy trì một số dạng cấu trúc dữ liệu cho phép các sự kiện được linh động lập thời gian biểu, thực thi và loại bỏ. Cấu trúc dữ liệu thường được thực hiện như một tập hợp các danh sách liên kết được sắp xếp theo thời gian, được phân chia và chia nhỏ theo một cách được đã xác định rõ. 
Sự phân chia đầu tiên là theo thời gian. Mỗi sự kiện có một và chỉ một thời gian thực thi mô phỏng. Thời gian này có thể ở bất cứ điểm nào đã cho trong quá trình mô phỏng, có thể là thời gian hiện tại hoặc thời gian tương lai. Tất cả các sự kiện đã được thiết lập thời gian biểu tại một thời điểm cụ thể sẽ định nghĩa một khe thời gian (time slot). Sự mô phỏng sẽ tiếp diễn bằng cách thực thi và loại bỏ tất các các sự kiện trong khe thời gian hiện tại trước khi chuyển đến khe thời gian tiếp theo theo thứ tự, khe thời gian tiếp theo phải không rỗng. Thủ tục này đảm bảo trình mô phỏng không bao giờ đi ngược thời gian, nghĩa là không bao giờ quay lại khe thời gian trước đó. 
Một khe thời gian được chi thành một tập các vùng theo thứ tự như sau: 
1. Preponed
2. Pre-Active
3. Active
4. Inactive
5. Pre-NBA
6. NBA
7. Post-NBA
8. Pre-Observed
9. Observed
10. Post-Observed
11. Reactive
12. Re-Inactive
13. Pre-Re-NBA
14. Re-NBA
15. Post-Re-NBA
16. Pre-Postponed
17. Postponed 
Mục đích của việc chia một khe thời gian thành các vùng theo thứ tự này là để cung cấp các tương tác có thể dự đoán được giữa code thiết kế và code testbench.

Hai nhóm quan trọng của các vùng sự kiện, được dùng để giúp xác định thời gian biểu của sự hoạt động của System Verilog, là tập vùng active và tập vùng reactive. Các sự kiện được thiết lập thời gian biểu trong vùng Active, Inactive, Pre-NBA, NBA và Post-NBA là các sự kiện thuộc tập vùng active. Các sự kiện được thiết lập thời gian biểu trong vùng Re-Active, Re-Inactive, Pre-Re-NBA, Re-NBA và Post-Re-NBA là các sự kiện thuộc tập vùng reactive. 
Các vùng Active, Inactive, Pre-NBA, NBA, Post-NBA, Pre-Observed, Observed, Post- Observed, Reactive, ReInactive, Pre-Re-NBA, Re-NBA, Post-Re-NBA, và Pre-Postponed regions được gọi là các vùng lặp lại (iterative regions). 
Thêm vào đó, ngoài tập vùng active và tập vùng reactive, tất cả các vùng còn sự kiện có thể được phân thành nhóm vùng mô phỏng (simulation regions) và nhóm vùng PLI (Programming Language Interface regions).

5.1 Các vùng mô phỏng 

Các vùng mô phỏng của một khe thời gian là Preponed, Active, Inactive, NBA, Observed, Reactive, ReInactive, Re-NBA và Postponed. 

5.1.1 Vùng các sự kiện Preponed 

Độ trễ lấy mẫu #1step cung cấp khả năng lấy mẫu dữ liệu trực tiếp trước khi đi vào khe thời gian hiện tại. Sự lấy mẫu #1step là đồng nhất với sự lưu giữ các mẫu dữ liệu trong vùng Preponed của khe thời gian hiện tại. Lấy mẫu trong vùng Preponed tương đương với việc lấy mẫu trong vùng Postponed ngay trước đó. 
Các sự kiện PLI vùng Preponed cũng được lập thời gian biểu trong vùng này. 

5.1.2 Vùng các sự kiện Active 

Vùng Active giữ các sự kiện của tập vùng active hiện tại đang được ước lượng (đánh giá) và có thể được xử lý theo bất kỳ thứ tự nào. 

5.1.3 Vùng các sự kiện Inactive 

Vùng Inactive giữ các sự kiện để được ước lượng sau khi tất cả các sự kiện Active được xử lý. 
Nếu các sự kiện đang được thực thi trong tập vùng active, một điều khiển trễ #0 yêu cầu xử lý bị hoãn lại (treo) và một sự kiện được thiết lập thời gian biểu trong vùng Inactive của khe thời gian hiện tại để xử lý có thể tiếp tục lại trong quá trình lặp lại từ Inactive đến Active tiếp theo. 

5.1.4 Vùng sự kiện NBA 

Vùng NBA, vùng cập nhật phép gán nonblocking (<=), giữ các sự kiện được ước lượng sau khi tất cả các sự kiện Inactive được xử lý. 
Nếu các sự kiện đang được xử lý trong tập vùng active, một phép gán nonblocking sẽ tạo một sự kiện trong vùng NBA được lên lịch cho thời gian mô phỏng hiện tại hoặc sau đó. 

5.1.5 Vùng sự kiện Observed 

Vùng Observed là để đánh giá các biểu thức thuộc tính khi chúng được kích hoạt. Trong quá trình đánh giá thuộc tính, code pass / fail sẽ được lên lịch trong vùng Reactive của khe thời gian hiện tại. Việc gọi lại PLI không được phép trong vùng Observed. 

5.1.6 Vùng các sự kiện Reactive 

Vùng Reactive giữ các sự kiện của tập vùng reactive hiện tại đang được đánh giá và có thể được xử lý theo bất kỳ thứ tự nào. 
Code đã được đặc tả bằng các phép gán blocking (=) trong các khối chương trình và code trong các khối hành vi (action block) của các assertion đồng nhất được lên lịch trong vùng Reactive. Vùng Reactive là vùng reactive được thiết lập kép của vùng Active. 

5.1.7 Vùng các sự kiện Re-Inactive 

Vùng Re-Inactive giữ các sự kiện được ước lượng sau khi tất cả các sự kiện Reactive được xử lý. 
Nếu các sự kiện đang được thực thi trong tập vùng reactive, một điều khiển độ trễ # 0 yêu cầu quá trình tạm dừng và một sự kiện được lên lịch vào vùng Re-Inactive của khe thời gian hiện tại để quá trình có thể được tiếp tục trong lần lặp lại từ Re-Inactive đến Reactive tiếp theo. Vùng Re-Inactive là vùng phản ứng được thiết lập kép của vùng không hoạt động. 

5.1.8 Vùng các sự kiện Re-NBA 

Vùng Re-NBA giữ các sự kiện được ước lượng sau khi tất cả các sự kiện Re-Inactive được xử lý. 
Nếu các sự kiện đang được thực hiện trong bộ vùng reactive, một phép gán nonblocking sẽ tạo ra một sự kiện trong vùng cập nhật Re-NBA được lên lịch cho thời gian mô phỏng hiện tại hoặc sau đó. Vùng Re-NBA là tập vùng reactive được thiết lập kép của vùng NBA 

5.1.9 Vùng các sự kiện Postponed

$monitor, $strobe và các sự kiện tương tự khác được lên lịch trong vùng Postponed. 
Không có thay đổi giá trị mới nào được phép xảy ra trong khoảng thời gian hiện tại khi đã đến vùng Postponed. Trong vùng này, việc ghi các giá trị vào bất kỳ net hoặc biến nào hoặc lập lịch sự kiện ở bất kỳ vùng nào trước vùng này trong khe thời gian hiện tại là bất hợp lệ. 
Các sự kiện PLI vùng Postponed cũng được lên lịch trong vùng này. 
5.2 Vùng PLI 
Bên cạnh các vùng mô phỏng, nơi mà các callback được lập thời gian biểu, thì chúng ta có thêm các vùng đặc tả PLI. Các vùng PLI của khe thời gian. 
Các cùng PLI của một khe thời gian gồm Preponed, Pre-Active, Pre-NBA, Post-NBA, Pre-Observed, Post-Observed, Pre-Re-NBA, Post-Re-NBA và Pre-Postponed. 

5.2.1 Vùng PLI Preponed 

Vùng Preponed cung cấp một điểm điều khiển callback PLI chấp nhận các chương trình ứng dụng PLI truy cập dữ liệu tại khe thời gian hiện tại trước khi bất kỳ net hay biến nào đổi trạng thái. 
Trong vùng này, việc ghi các giá trị đến net hoặc biến hoặc lập thời gian biểu một sự kiện trong bất kỳ vùng nào khác trong khe thời gian hiện tại là bất hợp lệ. 
PLI hiện tại không lập lịch callback trong vùng Peoponed. 

5.2.2 Vùng PLI Pre-Active

Vùng Pre-Active cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI đọc và ghi giá trị; tạo các sự kiện trước khi các sự kiện trong vùng Active được ước lượng. 

5.2.3 Vùng PLI Pre-NBA 

Vùng Pre-NBA cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI đọc và ghi giá trị; tạo các sự kiện trước khi các sự kiện trong vùng NBA được ước lượng. 

5.2.4 Vùng PLI Post-NBA 

Vùng Pre-NBA cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI đọc và ghi giá trị; tạo các sự kiện sau khi các sự kiện trong vùng NBA được ước lượng. 

5.2.5 Vùng PLI Pre-Observed 

Vùng Pre-Observed cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI đọc các giá trị sau khi tập vùng active ổn định. 
Trong vùng này, việc ghi các giá trị đến net hoặc biến hoặc lập thời gian biểu một sự kiện trong khe thời gian hiện tại là bất hợp lệ. 

5.2.6 Vùng PLI Pre-Re-NBA 

Vùng Pre-Re-NBA cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI đọc và ghi giá trị; tạo các sự kiện trước khi các sự kiện trong vùng Re-NBA được ước lượng. 

5.2.7 Vùng PLI Post-Re-NBA 

Vùng Post-Re-NBA cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI đọc và ghi giá trị; tạo các sự kiện sau khi các sự kiện trong vùng Re-NBA được ước lượng. 

5.2.8 Vùng PLI Pre-Postponed 

Vùng Pre-Postponed cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI đọc và ghi giá trị; tạo các sự kiện sau khi xử lý tất cả các vùng khác, trừ vùng Postponed. 

5.2.9 Vùng PLI Postponed 

Vùng Postponed cung cấp một điểm điều khiển callback PLI cho phép các chương trình ứng dụng PLI tạo các sự kiện read-only sau khi xử lý tất cả các vùng khác. PLI cbReadOnlySynch và các sự kiện khác tương tự được lập lịch trong vùng Postponed.