Đôi khi, có nhiều cách để thực hiện điều gì đó. OK, hầu hết thời gian, bạn có thể thực hiện mọi thứ theo nhiều cách trong VHDL. Nhìn vào tình huống mà bạn muốn chỉ định các giá trị khác nhau cho tín hiệu, dựa trên giá trị của tín hiệu khác.
chọn Signal Phân
Cách cụ thể nhất để làm điều này là với như nhiệm vụ tín hiệu được chọn. Dựa trên một số giá trị có thể có của b
, bạn chỉ định giá trị cho a
. Không có dự phòng trong mã ở đây.
with a select b <=
"1000" when "00",
"0100" when "01",
"0010" when "10",
"0001" when "11";
tín hiệu có điều kiện Phân
Các cấu trúc của một phân tín hiệu có điều kiện là một chút tổng quát hơn. Đối với mỗi tùy chọn, bạn phải đưa ra một điều kiện. Điều này có nghĩa rằng bạn có thể viết bất kỳ biểu thức boolean như một điều kiện, mà cung cấp cho bạn tự do hơn kiểm tra bình đẳng. Trong khi cấu trúc này sẽ mang lại cho bạn nhiều tự do hơn, thì cũng có nhiều dự phòng hơn một chút. Chúng tôi đã phải viết kiểm tra bình đẳng (a =
) trên mỗi dòng. Nếu bạn sử dụng một tín hiệu có tên dài, điều này sẽ làm cho mã của bạn to hơn. Ngoài ra, dấu phân cách được sử dụng trong việc xác nhận tín hiệu được chọn là dấu phẩy. Trong việc xác nhận tín hiệu có điều kiện, bạn cần từ khóa else
. Thêm mã cho cùng một chức năng.
b <= "1000" when a = "00" else
"1000" when a = "01" else
"1000" when a = "10" else
"1000" when a = "11";
tổ hợp Process với Hộp Đựng Bản Tuyên Bố
Các cấu trúc nói chung có thể sử dụng hầu hết là một quá trình. Bên trong quá trình này, bạn có thể viết một câu lệnh case hoặc một chuỗi các câu lệnh if. Thậm chí còn có nhiều dự phòng hơn ở đây. Bạn mã bộ xương cho một quá trình (bắt đầu, kết thúc) và danh sách độ nhạy. Đó không phải là một nỗ lực lớn, nhưng trong khi tôi đang soạn thảo điều này, tôi đã đặt b
trong danh sách độ nhạy thay vì a
. Dễ mắc lỗi nhỏ. Bạn cũng cần phải xác định những gì xảy ra trong các trường hợp other
.
process(a)
begin
case a is
when "00" => b <= "1000";
when "01" => b <= "0100";
when "10" => b <= "0010";
when "11" => b <= "0001";
when others => assert "unreachable" severity failure;
end case;
end process;
Trong khi đoạn mã cuối cùng này là lớn nhất và có lẽ dễ bị lỗi nhất, nó có lẽ cũng là phổ biến nhất. Nó sử dụng hai cấu trúc quen thuộc và thường được sử dụng: quy trình và các câu lệnh case.
Sự cố với bài tập tín hiệu được chọn và có điều kiện là không có hệ thống nào trong cú pháp của chúng. Ý nghĩa là gần như giống hệt nhau, nhưng cú pháp chỉ đủ khác để ném bạn đi. Tôi biết nhiều kỹ sư thường xuyên có bản sao Hướng dẫn tham khảo vàng Doulos cho VHDL nằm trên bàn làm việc của họ. Điều này tốt cho Doulos, bởi vì tên của họ được nhắc đến mọi lúc.
Biến nó thành CW ... bạn đang lôi kéo tôi đóng. – Shoban
Tôi không chắc chắn làm thế nào để làm điều đó. Nếu bạn có thể, hãy làm điều đó. –