Nguyên tắc chung của ngón tay cái được đề cập trong tất cả các cuốn sách tôi đã đọc cho đến nay là bạn phải sử dụng các bài tập không chặn trong các khối luôn được điều khiển bởi mép nâng hoặc rìa của đồng hồ. Ngược lại, việc chặn nhiệm vụ phải được sử dụng để mô tả logic tổ hợp. Quy tắc này có ý nghĩa đối với tôi và các tác giả của các ví dụ làm theo nó một cách kỹ lưỡng.luôn @ * chặn với một bài tập không chặn duy nhất - tốt, xấu hoặc không liên quan?
Tuy nhiên, tôi phát hiện các mảnh sau của Verilog trong một trong những mã sản xuất:
always @* begin
in_ready <= out_ready || ~out_valid;
end
Lưu ý rằng non-blocking chuyển nhượng <=
đang được sử dụng. Tôi không nghĩ rằng nó làm cho bất kỳ sự khác biệt trong trường hợp này bởi vì không có nhiều bài tập. Tuy nhiên, tôi dường như không thể tìm thấy bất kỳ lời giải thích nào cho điều này. Vì vậy, câu hỏi là - hiện nó hoặc không thực hiện bất kỳ sự khác biệt, cả trong phạm vi của một khối luôn cho trước và là một phần của thiết kế lớn hơn?
Cảm ơn bạn. Vâng, ví dụ mã của bạn cho thấy chắc chắn không chỉ là một thực hành tồi nhưng sẽ không thực sự hoạt động như dự định trừ khi nó thực sự có ý định như thế, điều này không có ý nghĩa gì nhiều. Tôi tự hỏi ý kiến của downvoter về cái này là gì. Bạn thực sự đúng. Tôi xác nhận tương tự như một phần của một câu hỏi lớn hơn của tôi về EE stackexchange (electronics.stackexchange.com/questions/34287/flip-flop-vs-combinatorial-description-what-exactly-is-the-difference/). Cảm ơn sự giúp đỡ của bạn! –
Cảm ơn bạn đã phản hồi, Có 2 downvotes nhưng không có ý kiến để nói lý do tại sao. – Morgan