GÁN BIẾN KHÁC VỚI GÁN TÍN HIỆU

Một phần của tài liệu Ngôn ngữ lập trình VHDL chương 2 (Trang 33 - 36)

V. XỬ LÝ TUẦN TỰ

2. GÁN BIẾN KHÁC VỚI GÁN TÍN HIỆU

Phát biểu thứ nhất trong phát biểu quá trình là gán biến – gán giá trị cho biến temp. Ở phần trước chúng ta đã thảo luận về cách các tín hiệu nhận giá trị sau thời gian trì hoãn hoặc sau thời gian trì hoãn delta.

Gán biến xảy ra ngay lập tức khi phát biểu được thực hiện. Ví dụ: trong mô hình này, phát biểu thứ nhất phải gán giá trị cho biến temp để phát biểu thứ hai sử dụng. Gán biến không có thời gian trì hoãn, xảy ra ngay lập tức.

Chúng ta sẽ khảo sát hai ví dụ minh họa để phân biệt các lệnh gán tín hiệugán biến. Cả hai ví dụ đều là mô hình của mạch đa hợp 4 đường sang 1 đường. Kí hiệu và bảng trạng thái như hỡnh 2-9. Một trong 4 ngừ vào được truyền đến ngừ ra tuỳ thuộc vào giỏ trị của A và B.

I0 I1 I2

I3 A B

Q MUX4

B A Q 0 0 I0 0 1 I1 1 0 I2 1 1 I3

Hình 2-9. Kí hiệu mạch đa hợp và bảng trạng thái.

Mô hình thứ nhất là mô hình không đúng và mô hình thứ hai là mô hình đúng.

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

Mô hình không đúng của bộ đa hợp có thiếu sót làm cho mô hình hoạt động không đúng. Mô hình này được trình bày như sau:

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 wrong OF mux IS SIGNAL muxval: INTEGER;

BEGIN

PROCESS (i0, i1, i2, i3, a, b) 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 wrong;

Khi cú 1 trong cỏc tớn hiệu ngừ vào nằm trong danh sỏch nhạy thay đổi giỏ trị thỡ cỏc phỏt biểu tuần tự được thực hiện.

Phát biểu quá trình trong ví dụ này chứa 4 phát biểu tuần tự.

Phát biểu thứ nhất khởi tạo tín hiệu cục bộ muxval với giá trị ‘0’. Các phát biểu tuần tự con cộng giá trị cho tín hiệu tuỳ thuộc vào của các tín hiệu vào ab.

Phỏt biểu case cuối cựng lựa chọn một ngừ vào để truyền đến ngừ ra tuỳ thuộc vào giỏ trị của tín hiệu muxval. Mô hình này có một thiếu sót nghiêm trọng với phát biểu: muxval <=0; làm cho giá trị 0 được sắp xếp như một sự kiện đối với tín hiệu muxval. Thực tế thì giá trị 0 được sắp xếp trong một sự kiện cho thời gian trể delta để mô phỏng bởi vì không có thời gian trì hoãn.

Khi phát biểu thứ 2:

IF (a = „1‟ ) THEN muxval <= muxval + 1;

END IF;

được thực hiện, giá trị của tín hiệu muxval là giá trị được truyền ở lần cuối cùng. Giá trị mới đã sắp xếp từ phát biểu thứ nhất chưa được truyền đến. Trong thực tế thì khi nhiều phép gán cho tín hiệu xảy ra trong cùng phát biểu quá trình thì giá trị gán sau cùng là giá trị được truyền.

Tín hiệu muxval có giá trị vô nghĩa (không xác định) khi bắt đầu quá trình. Giá trị của muxval không thay đổi cho đến khi các phát biểu nằm trong quá trình được thực hiện xong. Nếu tín hiệu b có giá trị là ‘1’ thì sau đó giá trị vô nghĩa được cộng thêm với 2.

Ví dụ tiếp theo sẽ chặt chẻ hơn. Sự khác nhau giữa 2 mô hình của 2 ví dụ là khai báo muxval và phép gán cho mulval. Trong mô hình ví dụ trước, muxvaltín hiệuphát biểu gán tín hiệu được dùng để gán giá trị cho muxval. Trong mô hình ví dụ này thì muxvalbiếnphép gán biến được dùng để gán giá trị cho muxval.

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 toá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 ab. 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.

Một phần của tài liệu Ngôn ngữ lập trình VHDL chương 2 (Trang 33 - 36)

Tải bản đầy đủ (PDF)

(83 trang)