Trong nhiều băng ghế thử nghiệm tôi thấy mô hình sau đây để tạo đồng hồ:
process
begin
clk <= '0';
wait for 10 NS;
clk <= '1';
wait for 10 NS;
end process;
Trong các trường hợp khác tôi thấy:
clk <= not clk after 10 ns;
Cái sau được cho là tốt hơn, bởi vì nó được lên lịch trước khi bất kỳ quá trình nào được thực thi, và do đó các tín hiệu được thay đổi đồng bộ sang cạnh clk được xử lý đúng cách. Các phần sau của LRM dường như có thể hỗ trợ lý thuyết này:
Trang 169: 12.6.4 Chu trình mô phỏng Chu trình mô phỏng bao gồm các bước sau:
- b) Mỗi tín hiệu rõ ràng hoạt động trong mô hình được cập nhật. (Kết quả là sự kiện có thể xảy ra trên các tín hiệu.)
Đây phải là tín hiệu có giá trị dự kiến mới, chẳng hạn như tín hiệu bị trễ after
.
- d) Đối với mỗi quá trình P, nếu P hiện nhạy cảm với tín hiệu S và nếu một sự kiện đã xảy ra trên S trong chu kỳ mô phỏng này, thì P sẽ tiếp tục.
Đó sẽ là hầu hết logic được mô phỏng
- e) Mỗi quy trình không được đăng ký đã được nối lại trong chu trình mô phỏng hiện tại được thực hiện cho đến khi nó tạm dừng.
Và bây giờ tất cả các quy trình bị đình chỉ bởi một wait for
được thực hiện.
TL; DR:
- Là
after
phương pháp luôn luôn vượt trội so vớiwait for
phương pháp? - Nó có giúp ngăn chặn các vấn đề đặt đồng bộ tín hiệu đầu vào không?
wait for
s) hoặc tín hiệu được kích hoạt bởi cạnh của clk và do đó là một chu kỳ delta sau này?
after
phiên bản tốt hơn không? Tôi chưa bao giờ được dạy nó tốt hơn, tôi chỉ thích nó như một dòng duy nhất :)
wait until
hoặc wait for
.