PHÁT BIỂU ASSERT

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

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

7. PHÁT BIỂU ASSERT

Phát biểu ASSERT là phát biểu rất hữu ích để báo cáo chuỗi văn bản đến người thiết kế. Phát biểu ASSERT kiểm tra giá trị của một biểu thức logic xem đúng hay sai. Nếu giá trị là đúng, phát biểu này khơng làm gì cả. Nếu giá trị là sai, phát biểu ASSERT xuất một chuỗi dạng văn bản được chỉ định bởi người sử dụng đến ngõ ra chuẩn của thiết bị đầu cuối.

Người thiết kế cũng có thể chỉ ra mức độ nghiêm trọng để xuất chuỗi dạng văn bản. Theo trình tự tăng dần của mức độ nghiêm trọng ta có 4 mức: chú ý, cảnh báo, lỗi và thất bại. Mức độ nghiêm trọng cung cấp cho người thiết kế khả năng phân loại thơng điệp thành các loại thích hợp.

Phát biểu ASSERT được sử dụng chủ yếu để quản lý khi viết mơ hình, khơng có phần cứng nào được xây dựng.

Cú pháp:

assert_statement ::= ASSERT condition [REPORT expression];

Từ khóa ASSERT được theo bởi một biểu thức có giá trị logic được gọi là một điều kiện (condition). Điều kiện này xác định biểu thức dạng văn bản được phép xuất ra hay không bởi phát biểu REPORT. Nếu sai, biểu thức dạng văn bản được xuất, còn nếu đúng, biểu thức dạng văn bản không được xuất.

Chúng ta khảo sát ví dụ thực tế cho phát biểu ASSERT, ví dụ này thực hiện việc kiểm tra thiết lập dữ liệu giữa hai tín hiệu điều khiển flip flop D. Hầu hết các flip flop yêu cầu dữ liệu ngõ vào din phải ở giá trị ổn định với một khoảng thời gian xác định trước khi có cạnh xung clock xuất hiện. Thời gian này được gọi là thời gian thiết lập và đảm bảo rằng dữ liệu vào din sẽ được chốt vào bên trong flip flop. Ví dụ 2-22 về phát biểu ASSERT tạo ra thông báo lỗi cho người thiết kế biết nếu thời gian thiết lập không đủ hay bị vi phạm.

VARIABLE last_d_change: TIME :=0 ns;

VARIABLE last_d_value : STD_LOGIC :=’X’;

VARIABLE last_clk_value: STD_LOGIC :=’X’;

BEGIN

IF (last_d_value /= din) THEN -- /= is not equal

last_d_change : = NOW; last_d_value : = din; END IF; IF (last_clk_value /= clk) THEN last_clk_value: = clk; IF (clk= ‘1’) THEN

ASSERT (NOW – last_d_change >= 20ns) REPORT “setup violation”

SEVERITY WARNING;

END IF;

END IF;

END PROCESS;

Quá trình dùng 3 biến cục bộ để ghi lại thời gian và giá trị sau cùng của tín hiệu din cũng như giá trị của tín hiệu clk. Do lưu trữ giá trị sau cùng của clk và din nên chúng ta có thể xác định xem tín hiệu có thay đổi giá trị hay khơng.

Bằng cách ghi lại thời gian sau cùng mà tín hiệu din thay đổi nên chúng ta có thể đo được

thời gian hiện tại so với lần chuyển trạng thái sau cùng của din, từ đó chúng ta sẽ biết được thời

gian thiết lập có bị vi phạm hay khơng.

Bước thứ nhất trong quá trình là kiểm tra xem tín hiệu din có thay đổi hay khơng. Nếu có thay đổi thì thời gian của chuyển đổi được lưu lại dùng hàm NOW. Hàm này trả về thời gian mô phỏng hiện tại. Tương tự, giá trị sau cùng của din cũng được lưu trữ cho việc kiểm tra sau này.

Bước tiếp theo là kiểm tra xem tín hiệu clk có chuyển trạng thái hay khơng. Nếu biến

last_clk_value không bằng với giá trị hiện tại của clk thì sẽ có sự chuyển trạng thái xảy ra. Nếu

tín hiệu clk là ‘1’ thì xem như đã có cạnh lên của xung clk.

Khi có cạnh lên của xung clk thì chúng ta cần kiểm tra xem thời gian thiết lập có bị vi phạm hay khơng. Nếu lần chuyển sau cùng của tín hiệu d nhỏ hơn 20 ns thì biểu thức:

NOW – last_d_change

Trả về giá trị nhỏ hơn 20ns. Phát biểu ASSERT bị kích và gởi ra thơng tin thời gian thiết lập bị vi phạm cảnh báo đến người thiết kế.

Nếu lần chuyển trạng thái sau cùng trên tín hiệu d xảy ra dài hơn 20 ns thì biểu thức trên sẽ trả về kết quả với giá trị lớn hơn 20 ns và phát biểu ASSERT khơng bị kích.

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