Ví dụ mơ hình mạch đa hợp đúng

Một phần của tài liệu Luận văn : Kỹ thuật PLD và ASIC doc (Trang 90 - 92)

IV. GIỚI THIỆU VỀ MƠ HÌNH HÀNH

b. Ví dụ mơ hình mạch đa hợp đúng

Trong ví dụ này thì mơ hình khơng đúng ở trên được viết lại để cho thấy cách giải quyết vấn đề của mơ hình khơng đúng:

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

ENTITY mux IS

PORT (i0, i1, i2, i3, a, b: IN STD_LOGIC; q: OUT STD_LOGIC);

END mux;

ARCHITECTURE better OF mux IS

BEGIN

PROCESS (i0, i1, i2, i3, a, b)

VARIABLE muxval : INTEGER;

BEGIN

muxval := 0;

IF (a = ‘1’ ) THEN muxval := muxval + 1;

END IF;

IF (b = ‘1’ ) THEN muxval := muxval + 2;

END IF; CASE muxval IS WHEN 0 => q <= I0 AFTER 10 ns; WHEN 1 => q <= I1 AFTER 10 ns; WHEN 2 => q <= I2 AFTER 10 ns; WHEN 3 => q <= I3 AFTER 10 ns; WHEN OTHERS => NULL;

END CASE;

END PROCESS;

END better;

Khi phát biểu thứ nhất muxval:=0; được thực hiện thì giá trị 0 được đặt vào cho biến muxval ngay lặp tức. Giá trị khơng được sắp xếp vì muxval trong ví dụ này là biến, khơng phải là tín hiệu.

Các biến tượng trưng cho ô nhớ lưu trữ cục bộ khác với tín hiệu tượng trưng cho kết nối mạch

điện bên trong. Ô nhớ lưu trữ cục bộ được cập nhật ngay lập tức và giá trị mới có thể được dùng

sau đó trong mơ hình cho các tính tốn sau đó.

Do biến muxval được khởi tạo giá trị 0 ngay lập tức nên hai phát biểu gán trong quá trình dùng giá trị 0 như giá trị khởi tạo và cộng với các con số thích hợp tuỳ thuộc vào tuỳ thuộc vào giá trị của tín hiệu a và b. Các phát biểu gán này cũng được thực hiện ngay lập tức và do đó khi phát biểu case được thực hiện thì biến muxval đã chứa giá trị đúng. Từ giá trị này tín hiệu ngõ vào

đúng có thể được truyền đến ngõ ra. 3. CÁC PHÁT BIỂU TUẦN TỰ

Các phát biểu tuần tự nằm bên trong phát biểu quá trình và nằm trong các chương trình con. Trong phần này chúng ta sẽ khảo sát các phát biểu tuần tự nằm bên trong phát biểu quá trình.

Các phát biểu tuần tự sẽ được trình bày là: IF, CASE, LOOP, EXIT, ASSERT, WAIT. 4. PHÁT BIỂU IF

Phát biểu IF cho phép chọn một trong các câu lệnh để thực hiện. Kết quả trả về của mệnh đề điều kiện là giá trị kiểu BOOLEAN. Dựa vào kết quả trả về của mệnh đề điều kiện để cho phép một lệnh có được thực thi hay khơng.

Cú pháp của phát biểu IF như sau

if condition then sequential statements;

[elsif condition then sequential statements;] [else sequential statements;] end if;

Ví dụ 2-13: cho phát biểu IF

IF (x < 10 ) THEN a:= b;

END IF;

Phát biểu được bắt đầu bằng từ khoá IF. Theo sau từ khoá IF là mệnh đề điều kiện (x < 10). Điều kiện trả về true khi x nhỏ hơn 10, ngược lại thì có giá trị false. Khi điều kiện là true thì phát biểu giữa THEN và END IF được thực hiện. Trong ví dụ này thì lệnh phát biểu gán (a:=b) được thực hiện bất kỳ lúc nào x nhỏ hơn 10.

Ví dụ 2-14: cho phát biểu IF THEN ELSE:

IF (day = sunday ) THEN weekend := true;

ELSIF (day = saturday ) THEN weekend := true;

ELSE weekday := true;

END IF;

Trong ví dụ này có hai biến – weekend và weekday – được thiết lập giá trị tuỳ thuộc vào giá trị của tín hiệu day. Biến weekend được thiết lập là true khi day bằng Saturday hoặc Sunday. Ngược lại biến weekday được thiết lập là true.

Thực hiện phát biểu IF bắt đầu kiểm tra xem biến day có bằng với Sunday hay khơng. Nếu kết quả là true thì phát biểu kế được thực hiện và điều khiển được chuyển tới phát biểu nằm sau từ khoá END IF.

Ngược lại điều khiển được chuyển tới phần phát biểu ELSIF và kiểm tra day có phải là

Saturday hay khơng. Nếu biến day là Saturday thì phát biểu kế được thực hiện và điều khiển

được chuyển tới phát biểu nằm sau từ khố END IF.

Cuối cùng nếu day khơng bằng Sunday và Saturday thì phần phát biểu ELSE được thực hiện. Phát biểu IF có thể có nhiều phần phát biểu ELSIF nhưng chỉ có duy nhất một lần phát biểu

ELSE.

Một phần của tài liệu Luận văn : Kỹ thuật PLD và ASIC doc (Trang 90 - 92)