Các đối tợng dữ liệu

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, thiết kế modul thực hành FPGA (Trang 43 - 51)

-

2.4.1. Các đối tợng dữ liệu

2.4.1.1. Tín hiệu

Các đối tợng tín hiệu đợc sử dụng để nối các thực thể với nhau nhằm tạo thành các mô hình. Các tín hiệu là phơng tiện để truyền thông dữ liệu

-44-

động giữa các thực thể. Các tín hiệu có thể đợc khai báo trong phần khai báo thực thể, khai báo kiến trúc và khai báo gói. Một khai báo tín hiệu có dạng:

Signal tên tín hiệu{, tên tín hiệu}: kiểu tín hiệu[:= giá trị khởi tạo];

Ví dụ về khai báo tín hiệu:

architecture dataflow my_circuit of is signal d,e bit;

begin

-- concurrent statements tied together with signals

d <= in3 and in4; -- logic for d

e <= in5 or in6; -- logic for e

out1 <= in1 xor d; -- output logic

out2 <= in2 xor e; -- output logic

end dataflow;

2.4.1.2. Biến

Các biến đợc sử dụng để lu trữ cục bộ trong các phát biểu quá trình hoặc các chơng trình con. Khác với tín hiệu có các giá trị đợc định thời, tất cả các phép gán cho các biến xảy ra tức thời. Một khai báo biến có dạng nh sau:

Variable tên biến {, tên biến}: kiểu[: = giá trị biến khởi tạo] Ví dụ về khai báo biến:

variable state : std_logic;

variable delay : time:= 5ns;

2.4.1.3. Hằng

Hằng là đối tợng đợc khởi tạo bằng những giá trị nhất định khi đợc tạo nên trong quá trình thực hiện và sau đó giá trị của hằng không thay đổi.

-45-

Hằng có thể đợc khai báo trong các gói, thực thể, kiến trúc, chơng trình con, khối và quá trình.

Cú pháp khai báo hằng:

Constant tên hằng{, tên hằng}: kiểu[:=giá trị];

Ví dụ về khai báo hằng:

Constant char3: bit_vector(2 downto 0):= “001”; Constant nst: Integer: = 10;

2.4.2. Các kiểu dữ liệu

Mọi đối tợng dữ liệu trong VHDL đều phải đợc định nghĩa với các kiểu dữ liệu. Ngôn ngữ VHDL cho phép sử dụng các kiểu cơ sở để tạo nên các đối tợng phức tạp hơn. Kiểu phải đợc khai báo trớc khi sử dụng. Khai báo kiểu xác định kiểu và miền xác định của kiểu.

Các kiểu dữ liệu chính trong VHDL:

-Kiểu liệt kê

-Kiểu số nguyên

-Kiểu đợc định nghĩa trớc của VHDL.

-Kiểu mảng

-Kiểu bản ghi

-Kiểu STD_LOGIC.

-Kiểu signed và unsigned.

-Các kiểu con.

2.5. Toán tử và biểu thức

Trong ngôn ngữ VHDL các biểu thức là các công thức . Các công thức này xác định các tác động tính toán lên các đối tợng dữ liệu. Các biểu thức thực hiện các tính toán số học và logic sử dụng các toán tử với một số các toán hạng. Các toán tử đặc trng cho phép toán sẽ đợc thực hiện còn các toán hạng là các nguồn dữ liệu cho các phép toán.

-46-

2.5.1. Các toán tử.

Các toán tử đợc phân chia theo các mức độ u tiên và trật tự tính toán. Bảng 2.1 đa ra nhóm các phép toán với mực độ u tiên tăng dần. Các quy ớc về trật tự thực hiện các phép toán trong biểu thức nh sau:

- Trong biểu thức, các phép toán có mức độ u tiên cao hơn sẽ đợc thực

hiện trớc. Các dấu ngoặc đơn cũng giúp xác định trật tự tính toán biểu thức .

- Các phép toán trong nhóm với cùng một mức độ u tiên sẽ đợc thực

hiện từ trái qua phải trong các biểu thức.

Các phép toán logic And, or, nand, nor, xor

Các phép toán quan hệ =, /=, <, <=, >, >=

Các phép toán cộng +, , &-

Các toán tử dấu +, -

Các phép toán nhân *, /, mod, rem

Các phép toán khác **, abs, not

Bảng 2.1: Các toán tử và mức độ u tiên

2.5.2. Các toán hạng

Trong VHDL có nhiều dạng toán hạng. Các toán hạng cũng có thể là chính các biểu thức. Các dạng toán hạng bao gồm:

-Các hằng, ký hiệu. -Các tên, định danh. -Các tên thuộc tính -Các chỉ số. -Các nhóm -Các biểu thức định kiểu.

-Các biểu thức chuyển đổi kiểu.

-47-

2.6. Các lệnh tuần tự trong VHDL

Trong VHDL, một cấu trúc thực hiện đồng thời là quá trình ( process). Quá trình là một cấu trúc quan trọng đợc sử dụng để mô ta hành vi hoạt động của mạch. Trong một kiến trúc tất cả các quá trình đợc thực hiện đồng thời khi mô phỏng. Một quá trình đợc xây dựng từ những lệnh tuần tự. Các lệnh tuần tự trong VHDL gồm có:

-Câu lệnh gán cho biến.

-Câu lệnh gán cho tín hiệu.

-Câu lệnh if .

- Câu lệnh Case.

-Các lệnh vòng lặp.

-Câu lệnh Null

2.6.1.Câu lệnh gán biến.

Tơng tự nh các ngôn ngữ lập trình khác, phép gán biến thiết lập giá trị mới cho biến. Cú pháp của phép gán biến nh sau:

Biến:= biểu thức;

Vế trái của phép gán biến phải là biến đã đợc khai báo từ trớc. Vế phải của phép gán là biểu thức. Để phép gán thực hiện đợc biểu thức và biến phải cùng kiểu .

2.6.2.Câu lệnh gán tín hiệu.

Phép gán tín hiệu ding để thay đổi giá trị của tín hiệu . Các tín hiệu luôn đợc biểu diễn kết hợp với diễn biến thời gian. Phép gán tín hiệu có cú pháp.

Tín hiệu đích <= [transport] biểu thức [afterthời gian];

Biểu thức: Xác định các giá trị gán, kiểu của biểu thức phải cùng kiểu với kiểu của tín hiệu đích, thời gianlà biểu thức có kiểu TIME.

-48- Ví dụ về câu lệnh gán tín hiệu: Signal s: bit:= “0”; Process Begin S <= transport ‘1’ after 5 ns; End process; 2.6.3. Câu lệnh if

Câu lệnh if tạo nên phân nhánh khi thực hiện chơng trình. Tuỳ theo kết quả của biểu thức điều kiện mà có thể hoặc một số lệnh hoặc không có lệnh nào đợc thực hiện. Cú pháp của lệnh if nh sau:

if <điều kiện> then

{Câu lệnh tuần tự}

{ elsif <điều kiện> then

{Câu lệnh tuần tự}

[ else {Câu lệnh tuần tự}]

end if ;

Ví dụ về câu lệnh if

if (day = sunday) then

weekend := TRUE;

elsif (day = saturday) then

weekend := TRUE;

else

weekday := TRUE;

end if;

-49-

Câu lệnh Case đợc sử dụng mỗi khi giá trị của một biểu thức đơn có thể đợc sử dụng để chọn giữa một số các hành động. Cú pháp của câu lệnh Case;

case <biểu thức> is

when <lựa chọn> => <câu lệnh tuần tự>

{when<lựa chọn> => <câu lệnh tuần tự> }

end case; Ví dụ về câu lệnh case case instruction is whenload_accum => accum <= data; whenstore_accum => data_out <= accum; whenload|store => process_IO(addr); whenothers => process_error(instruction); end case; 2.6.5. Các lệnh vòng lặp

Lệnh lặp loop chứa thân vòng lặp bao gồm các câu lệnh sẽ đợc thực hiện không hoặc nhiều lần. Câu lệnh loop có cú pháp nh sau:

[<nhãn>:] [<sơ đồ lặp>] loop

{lệnh tuần tự}

{next[<nhãn>] [when<điều kiện>]}; {exit[<nhãn>] [when<điều kiện> ]};

-50-

<nhãn>: Nhãn của vòng lặp và thờng xây dợng những vòng lặp lồng nhau, trong đó mỗi vòng lặp đợc kết thúc bởi từ khóa end loop;

<sơ đồ lặp>: Trong ngôn ngữ VHDL có một số dạng vònglặp với các sơ

đồ lặp khác nhau nh: vòng lặp với sơ đồ for, vòng lặp với sơ đồ While và

vòng lặp không chứa sơ đồ Ví dụ về câu lệnh lặp:

process(A, B)

constant max_limit : integer:= 255;

begin

for i in 0 to max_limit loop

if (done(i) = TRUE) then

next;

else

done(i) := TRUE;

end if;

q(i) <= a(i) AND b(i);

end loop;

end process;

2.6.6. Câu lệnh Null

Trong ngôn ngữ VHDL, khi chơng trình mô phỏng gặp câu lệnh null nó sẽ bỏ qua lệnh này và thực hiện lệnh tiếp sau. Cú pháp câu lệnh null:

Null;

Ví dụ về câu lệnh null:

case controller_command is

-51-

when reverse => engage_motor_reverse;

when idle => null;

end case;

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu, thiết kế modul thực hành FPGA (Trang 43 - 51)

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

(93 trang)