II. Giới thiệu môi trường lập trình ISE.
CHƯƠNG IV: NGÔN NGỮ VHDL 4.1 Giới thiệu chung về ngôn ngữ VHDL
4.2.4.4. Các khai báo vòng lặp
VHDL có một khai báo vịng lặp cơ bản có thể sử dụng các vòng lặp while và for giống như trong các ngơn ngữ lập trình khác. Cú pháp của một khai báo vòng lặp là:
[ nhãn vòng lặp : ]
[ lược đồ lặp ] loop
chuỗi các khai báo
end loop [ nhãn vòng lặp ];
lược đồ lặp ::=
while điều kiện
| for đặc điểm tham số lặp
đặc điểm tham số lặp định danh in phạm vi đơn
Nếu lược đồ lặp bị bỏ qua, chúng ta sẽ bị rơi vào vịng lặp vơ tận. Ví dụ về một vịng lặp vơ tận:
loop
do_something;
end loop;
Lược đồ lặp while cho phép kiểm tra một điều kiện để đánh giá trước mỗi một vòng lặp. Vòng lặp chỉ được thực hiện nếu việc kiểm tra được đánh giá là đúng (true). Nếu việc kiểm tra là sai (false), thì khai báo vịng lặp sẽ kết thúc. Ví dụ như sau:
while index < length and str(index) /= ‘’ loop
index := index + 1;
end loop;
Lược đồ lặp for cho phép chỉ định một số cố định vòng lặp. Đặc điểm tham số lặp được mô tả là một đối tượng sẽ thực hiện với giá trị đúng trong phạm vi đã cho
đối với mỗi vòng lặp. Cùng với các khai báo đóng trong vịng lặp, đối tượng được
coi như là hằng số, và do vậy không thể gán được. Ví dụ như:
for item in 1 to last_item loop
table(item) := 0;
Có hai khai báo bổ sung có thể sử dụng bên trong vịng lặp để kiểm tra mẫu cơ sở của vòng lặp. Khai báo “next” kết thúc việc kích hoạt vịng lặp hiện thời và bắt
đầu vòng lặp con. Khai báo “exit” kết thúc việc kích hoạt vịng lặp hiện thời và kết
thúc ln vịng lặp. Cú pháp của các khai báo đó là:
khai báo next ::= next [ nhãn vòng lặp ] [ when điều kiện ]; khai báo exit ::= exit [ nhãn vòng lặp ] [ when điều kiện ];
Nếu nhãn vòng lặp bị bỏ qua, thì khai báo được áp dụng cho vịng lặp gần nó nhất, ngược lại nó được gán cho tên của vòng lặp. Nếu mệnh đề when tồn tại nhưng
điều kiện lại sai (false), thì vịng lặp sẽ tiếp tục bình thường.
Ví dụ:
for i in 1 to max_str_len loop
a(i) := buf(i);
exit when buf(i) = NUL; end loop;
Ví dụ:
outer_loop : loop inner_loop : loop
do_something;
next outer_loop when temp = 0;
do_something_else;
end loop inner_loop; end loop outer_loop;