Đặc điểm: - Verilog là ngôn ngữ mô tả phần cứng chính được người thiết kế phần cứng sử dụng để mô tả, thiết kế các hệ thống số.. Verilog thường được dùng để mô tả thiết kế ở bốn dạng: •
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM
KHOA CÔNG NGHỆ ĐIỆN TỬ
oOo -TIỂU LUẬN CÔNG NGHỆ VI ĐIỆN TỬ
ĐỀ TÀI:
NGÔN NGỮ LẬP TRÌNH VERILOG
Trang 2MỤC LỤC
I Giới thiệu ngôn ngữ Verilog
II Các thuật ngữ trong Verilog III Các dạng dữ liệu
IV.Toán tử
V Modules và các ví dụ
Trang 3Giới Thiệu Verilog
1 Đặc điểm:
- Verilog là ngôn ngữ mô tả phần cứng chính được người thiết kế phần cứng sử dụng để mô tả, thiết kế các hệ thống số
VD: bộ vi xử lý hay các linh kiện điện tử
- Verilog dễ học và dễ sử dụng hơn VHDL
- Verilog được chuẩn hoá theo chuẩn IEEE vào năm 1995 và 2001
- Verilog rất giống ngôn ngữ C và được giới chuyên môn nghiên cứu, sử dụng nhiều Verilog có thể được sử dụng để thiết kế hệ thống số ở nhiều mức khác nhau
Verilog thường được dùng để mô tả thiết kế ở bốn dạng:
• Thuật toán (một số lệnh giống ngôn ngữ C như: if, case, for, while…)
• Chuyển đổi thanh ghi (kết nối bằng các biểu thức Boolean)
• Các cổng kết nối (cổng: OR, AND, NOT…)
• Chuyển mạch (BJT, MOSFET)
Trang 42 Cấu trúc chương trình dùng ngôn ngữ Verilog
// Khai báo module
Module tên chương trình (tên biến I/O); // tên chương trình
trùng tên file.v
Input [msb:lsb] biến;
Output [msb:lsb] biến;
Reg [msb:lsb] biến reg;
Wire [msb: lsb] biến wire;
// Khai báo khối always, hoặc khối initial
… các lệnh …
Endmodule
Trang 51 Khoảng trắng
2 Chú giải
Được viết sau hai dấu gạch xiên (//), được viết trên cùng một dòng Được viết giữa /* */, khi viết nhiều dòng chú giải
3 Chữ số
Định nghĩa như là một con số của các bit, giá trị có thể là: số nhị phân, bát phân, thập phân, hoặc thập lục phân
VD : 3’b001, 5’d30 = 5’b11110,
16’h5ED4 = 16’d24276 = 16’b0101111011010100
4 Từ định danh
Từ định danh người dùng quy định cho biến, tên hàm, tên môđun, tên khối
và tên trường hợp
Từ định danh bắt đầu bằng một mẫu tự hoặc đường gạch dưới ’_’ (không bắt đầu bằng một con số hoặc $ ) và kể cả mọi chữ số của mẫu tự, những con
số và đường gạch dưới Từ định danh trong Verilog phân biệt dạng chữ
CÁC THUẬT NGỮ TRONG
VERILOG
Trang 65 Cú pháp :
Ký hiệu cho phép: ABDCE…abcdef…1234567890_$
Không cho phép: các ký tự đặc biệt khác -, &, #, @
6 Toán tử
Toán tử là một, hai, hoặc ba kí tự dùng để thực hiện các toán hạng trên biến Các toán tử bao gồm >, +, &, !=
7 Từ khóa Verilog
Có nhiều từ mã có ý nghĩa đặc biệt ở Verilog
Ví dụ: assign, case, while, wire, reg, and, or, nand, và module
Chúng không được dùng như từ định danh Từ khóa Verilog cũng bao gồm
cả chỉ dẫn chương trình biên dịch và System Task (hệ thống soạn thảo) và các hàm
Trang 71 Đặt giá trị
Verilog bao gồm 4 giá trị cơ bản sau:
0: mức logic 0, hoặc điều kiện sai
1: mức logic 1, hoặc điều kiện đúng
X: mức logic tuỳ định
Z: trạng thái tổng trở cao
X và Z dùng có giới hạn trong tổng hợp (synthesis)
2 Wire
- Mô tả vật liệu đường dây dẫn để kết nối các cổng hay các module
- Giá trị của Wire có thể đọc, nhưng không được gán trong function hoặc block
- Wire không lưu trữ giá trị của nó nhưng phải được thực thi bởi 1 lệnh gán kế tiếp hay sự kết nối Wire với đầu ra của 1 cổng hoặc 1 module
• Những dạng đặc biệt khác của Wire:
- Wand (wired_and): giá trị phụ thuộc vào mức logic And toàn bộ bộ điều khiển kết nối đến Wire
- Wor (wired_or): giá trị p.thuộc mức logic Or toàn bộ bộ điều khiển kết nối đến Wire
- Tri (three_state): tất cả bộ điều khiển kết nối đến 1 tri phải ở trạng thái Z cao
CÁC DẠNG DỮ LIỆU
Trang 82.1 Cú pháp
Wire [msb:lsb] tên biến wire
Wand [msb:lsb] tên biến wand
Wor [msb:lsb] tên biến wor
Tri [msb:lsb] tên biến tri
2.2 Ví dụ
Wire c;
Wand d;
Assign d= a;
Assign d= b; // giá trị d là mức logic của phép And a và b
Wire [9:0] A; // vectơ A có 10 wire
3 Reg
- Reg (register) : dữ liệu nó chứa có giá trị từ một thủ tục gán
kế tiếp Reg chỉ được dùng trong thủ tục hàm và khối
- Reg là loại biến Verilog; không nhất thiết là thanh ghi tự nhiên Trong thanh ghi nhiều bit, data được lưu trữ bằng các
chữ số không dấu và không có kí hiệu đuôi mở rộng, chủ yếu là số bù hai
Trang 93.1 Cú pháp:
Reg [msb:lsb] tên biến reg
3.2.Ví dụ:
Reg a; // biến thanh ghi đơn giản 1 bit
Reg [7:0] A; // một vectơ 8 bit; một bank của 8 bít thanh ghi
Reg [5:0]b, c;// hai biến thanh ghi 6 bit
4 Input, Output, Inout
- Những từ khoá này biểu thị đầu vào, đầu ra, và port hai chiều của một module hoặc task Một port đầu ra có thể được cấu hình từ các dạng: wire, reg, wand, wor, hoặc tri Mặc định là wire
4.1 Cú pháp:
Input [msb:lsb] port đầu vào
Output [msb:lsb] port đầu ra
Inout [msb:lsb] port đầu vào,ra hai chiều
4.2 Ví dụ:
Module sample (b, e, c, a);
Input a; // một đầu vào mặc định là kiểu wire
Output b, e; // hai đầu ra mặc định là kiểu wire
Output [1:0] c; /* đầu ra hai bit, phải khai báo trong một lệnh riêng*/
Trang 10Reg [1:0] c; // đầu c được khai báo như một reg.
5 Integer (Số nguyên)
- Integer là một biến đa năng Trong tổng hợp, dùng chủ yếu cho vòng lặp, tham
số, và hằng số Chúng hoàn toàn là reg
- Tuy nhiêu chúng chứa dữ liệu bằng những số có dấu, trong khi đó khai báo dạng reg chung bằng số không dấu
- Nếu chúng chứa các số mà không định nghĩa thời gian biên dịch thì kích thước mặc định là 32 bit Nếu chứa hằng, sự tổng hợp điều chỉnh các số có kích thước nhỏ nhất cần thiết cho sự biên dịch
5.1 Cú pháp:
Integer tên biến nguyên;
…tên hằng nguyên…;
5.2 Ví dụ:
Integer a; // số nguyên đơn giản 32bit
Assign b= 63; // mặc định là một biến 7 bit
Trang 116 Supply0, Supply1
- Xác định chổ đường dẫn lên mức logic 0 ( đất), logic 1 (nguồn) theo thứ tự định sẵn
7 Time
-Time là một lượng 64 bit mà được sử dụng cùng với
$time, hệ thống thao tác chứa lượng thời gian mô phỏng
Time không được hỗ trợ tổng hợp và và thế chỉ được
dùng trong mục đích mô phỏng
7.1 Cú pháp:
Time biến time;
7.2 Ví dụ:
Time c;
c = $time; // c = thời gian mô phỏng dòng điện
8 Parameter (Tham số)
Một Parameter xác định 1 hằng số mà được đặt khi bạn cho ví dụ cụ thể là một module Các này cho phép ta có thể sửa chữa
Trang 128.1 Cú pháp:
Parameter par_1= giá trị, par_2= giá trị, …;
Parameter [giới hạn] par_3 = giá tr?;
8.2 Ví dụ:
Parameter add = 2b’00, sub = 3b’111;
Parameter n = 4;
Parameter [3:0] par_2 = 4b’1010;
…
reg [n-1:0] harry; /* một thanh ghi 4 bít mà độ rộng được đặt bởi
tham số n ở trên */
always @(x)
y = {{(add - sub) {x}}}
if (x) begin
state = par_2[1];
else
state =par_2[2];
Trang 13TOÁN TỬ
Trang 14Trong đó, chú ý rằng so sánh kiểu case hay identity là kiểu so sánh giá trị đồng nhất Các giá trị dùng trong xử lý so sánh này bao gồm 0, 1, X và Z Kết quả trả về
là 1 bit mang ý nghĩa True/False
Với kiểu so sánh logic thì chỉ xử lý giá tị 0 và 1, nếu đối tượng so sánh chứa giá trị
X hoặc Z thì kết quả trả về là X
Trang 15Phép Logic
Trang 16Toán tử điều kiện được dùng để chọn lựa giá trị gán cho một tín hiệu theo điều kiện cho trước
Bitwise
Biểu thức: Y = A & B (đây là một biểu thức) trong đó A và B gọi là toán hạng Toán tử bitwise thực hiện xử lý từng bit tương ứng theo vị trí trên hai toán hạng Nếu một toán hạng có độ dài ngắn hơn toán hạng còn lại thì toán hạng ngắn hơn sẽ được mở rộng thêm các bit “0” ở vị trí các bit trọng số cao MSB (bên trái toán hạng đó) để thực hiện
Ví dụ:
Nếu A[2:0] và B[3:0] thì A[2:0] được mở rộng thành {0, A[2:0]}, lúc đó B[3]
Modules