Để tránh chốt, bạn cần đảm bảo tất cả các kết quả đầu ra của bạn được gán tại tất cả các nhánh có thể của mã.
ví dụ,
if a = '1' then
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
sẽ tạo ra một chốt, vì trong điều kiện đầu tiên, giá trị của b (1) không được chỉ định, vì vậy trình biên dịch quyết định bạn muốn giữ giá trị trước đó của b (1) ở đó. Một cách để viết cái này sẽ không tạo ra chốt là:
if a = '1' then
b <= prev_b;
b(0) <= '1';
else
b(1 downto 0) <= "00";
end if;
...
if rising_edge (clk)
prev_b <= b;
end if;
Ở đây bạn nói rõ rằng b nên giữ lại giá trị cũ và sau đó ghi đè b (0) bằng giá trị mới.
Một cách khác là đưa ra ba giá trị mặc định, như trong câu trả lời của @ TomiJ.
Nếu bạn đăng mã bạn đang nhận được một chốt, chúng tôi có thể giúp bạn tìm lý do cụ thể.