Tải bản đầy đủ (.pdf) (21 trang)

Lecture 2 tổng quan về verilog HDL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.03 MB, 21 trang )

Thiết kế logic số
(Digital Logic design)
Bộ môn Điện tử máy tính
08/2018

1


Chủ đề 2
Tổng quan về Verilog HDL
Bộ môn Điện tử máy tính
08/2018

2


Nội dung

2.1 Verilog là gì?
2.2 Các thuật ngữ trong
Verilog
2.3 Cấu trúc chương trình
dùng ngôn ngữ Verilog
2.4 Bài tập

3


2.1. Verilog là gì?
 Verilog là gì?
 Ngôn ngữ mô tả phần cứng (Hardware Description Language)


được sử dụng trong việc thiết kế các các hệ thống số, các
mạch tích hợp...

 Mọi kết cấu phần cứng đều có thể biểu diễn dưới dạng các
lệnh phần mềm, các hàm và thủ tục.
 Cùng với ngôn ngữ VHDL, Verilog là một trong hai ngôn ngữ
mô tả phần cứng phổ biến nhất hiện nay.
4


2.1. Verilog là gì?
 Lịch sử verilog?
 Verilog Verilog-HDL ra đời năm 1984, được phát minh bởi Getway
Design Automation.

 Chuẩn hóa: IEEE 1364 năm 1995, IEEE 1364-2001 năm 2001 – được
sử dụng rộng rãi nhất.
 Năm 2005, SystemVerilog được giới thiệu như là một sự mở rộng
của Verilog.
 Năm 2009, IEEE kết hợp chuẩn Verilog với SystemVerilog thành một
chuẩn duy nhất: IEEE 1800-2009.
 Chuẩn mới nhất là: IEEE 1800-2012

Verilog cho phép mô tả hardware không chỉ ở mức cổng (gate level),
mức chuyển dịch thanh ghi (register-transfer level - RTL), mà còn cho
phép mô tả theo thuật toán.

5



2.2. Các thuật ngữ trong Verilog
 Khoảng trắng:
 Dùng để ngăn từ
 Chứa những kí tự đặc biệt như kí tự space, kí tự tab, kí tự
xuống dòng
 Một lệnh có thể viết trên một dòng hoặc nhiều dòng
 Các dòng lệnh kết thúc bằng dấu ;
1 module addbit(a,b,ci,sum,co);
2 input a,b,ci;output sum, co;
3 wire a,b,ci,sum,co;endmodule

Không nên viết

6


2.2. Các thuật ngữ trong Verilog
 Khoảng trắng:
1 module addbit (
2 a,
3 b,
4 ci,
5 sum,
6 co);
7 input a;
8 input b;
9 input ci;
10 output sum;
11 output co;
12 wire a;

13 wire b;
14 wire ci;
15 wire sum;
16 wire co;
17
18 endmodule

Nên viết

7


2.2. Các thuật ngữ trong Verilog
 Chú thích: Dùng để ghi chú những câu lệnh hay đoạn lệnh để
dễ trong việc quan sát trong việc lập trình.
 Dùng 2 dấu gạch xiên ‘//’ : // để viết chú thích trên 1 dòng
 Dùng /* chú thích */: để viết chú thích nhiều dòng
module HALFADD (A, B, SUM, CARRY);
// Bộ cộng bán phần
input A, B;
output SUM, CARRY;
/* Đây là phần mô tả
mạch thiết kế */
assign SUM = A ^ B;
assign CARRY = A & B;
Endmodule
8


2.2. Các thuật ngữ trong Verilog

 Định danh:
 Từ định danh do người dùng quy định cho biến số, tên hàm,
tên môđun, tên khối và tên trường hợp.
 Bắt đầu bằng các ký tự hoặc dấu gạch dưới
 Không được bắt đầu bằng chữ số hoặc dấu $
 Đặc biệt trong lập trình Verilog phân biệt chữ hoa với chữ
thường
 Từ khóa: là dạng đặc biệt dành riêng để định nghĩa các cấu
trúc ngôn ngữ, được viết bằng chữ thường
reg example;
input a ;
input INPUT;

// reg là từ khóa, example là định danh
// input là từ khóa, a là định danh
// input là từ khóa, INPUT là định danh

9


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Cấu trúc chương trình dùng ngôn ngữ Verilog
Module ModuleName (PortList);
Port declaration
Net declaration
Register declaration
Parameter declaration
Mô tả mạch thiết kế
(…các câu lệnh…)
Endmodule


Module HALFADD (A, B,
SUM, CARRY);
Input A, B;
Output SUM, CARRY;

Assign SUM = A ^ B;
Assign CARRY = A & B;

Endmodule

10


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Khai báo module:
module tên module (tên biến I/O);

 module: từ khóa bắt buộc của 1 chương trình verilog
 tên module: có thể đặt tùy ý nhưng không được viết chữ số và
một số ký tự đặt biệt ở đầu.
 (tên biến I/O): danh sách tất cả các cổng vào/ra của thiết kế,
mỗi cổng cách nhau bởi dấu “,”.
 “ ; “ : kết thúc khai báo module cũng như kết thúc các dòng
lệnh.
 Kết thúc bằng từ khóa endmodule
11


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog

 Ví dụ:
module and_3 (A,B,C,Y);
module encoder8to3 (I,Y);

A
B
C

2
3
4

1

Y

12


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Khai báo port: Khai báo tất cả các cổng vào ra và độ rộng của
của các cổng đó.Mặc định cổng vào ra sẽ có độ rộng là 1 bit.
input [msb:lsb] biến;
output [msb:lsb] biến;

 input: từ khóa để định nghĩa ngõ vào
 output: từ khóa để định nghĩa ngõ ra
 [msb:lsb]: độ rộng của của các cổng, ngõ vào/ra dạng bus
 biến: liệt kê các ngõ vào/ra đã được khai báo trong module
 “ ; “ : kết thúc khai báo port.


13


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Ví dụ:
input A,B,C;
output Y;

A
B
C

2
3
4

Y

1

input [7:0] I;
output [2:0] Y;
input [3:0] A,B;
input E;
output [2:0] Y;

SĐK phần cứng?
14



2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Ví dụ: mô tả mạch cộng bán phần

module HALFADD (A, B, SUM, CARRY);
input A, B;
output SUM, CARRY;
assign SUM = A ^ B;
assign CARRY = A & B;

- Thực hiện tính toán và gán
- Dùng phép gán liên tục assign

Endmodule

15


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Phép gán liên tục – assign:
 Là phép gán cơ bản nhất trong Verilog

 Dùng để gán các giá trị cho wire của module, hay là cập nhật
giá trị của các port (wire)
 Được đặt bên ngoài khối always@ hoặc initial

 Được thực hiện đồng thời
 Bất kì thay đổi nào của bên phải phép gán sẽ làm cho giá trị
bên trái thay đổi ngay lập tức.
assign tên biến = biểu thức;


16


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Ví dụ mô tả mạch tổ hợp dùng phát biểu assign?
1. Dùng verilog HDL mô tả mạch số sau:
a. F(A,B,C) = 1 ứng với tổ hợp biến có số lượng biến bằng 1 là
một số chẵn hoặc không có biến nào bằng 1. Các trường hợp
khác thì hàm bằng 0.
b. F(A,B,C,D) = 1 ứng với tổ hợp biến có ít nhất 2 biến bằng 1.
Các trường hợp khác thì hàm bằng 0.
c. Một mạch tổ hợp nhận vào một số nhị phân A=A3A2A1A0
(A0 là LSB) tạo ra ở ngã ra Y ở mức cao khi và chỉ khi
0010d. Một mạch tổ hợp nhận vào một số BCD, có tên là X. Ngã ra
của mạch lên 1 khi thỏa điều kiện 1 ≤ X ≤5
17


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
Sau khi khai báo các cổng chúng ta sẽ khai báo loại biến cho các
cổng vào ra, thường là reg và wire. Nếu không khai báo mặc
định các cổng sẽ có dữ liệu là wire.
Phân biệt giữa wire và reg trong thiết kế verilog:
 Trong thiết kế verilog, có hai loại kiểu dữ liệu chủ yếu được
dùng là net và register (dây nối và thanh ghi)
 wire là một kiểu dữ liệu sử dụng phổ biến thuộc kiểu net,
dùng cho mạch tổ hợp.
 Register: là thành phần lưu trữ dữ liệu, reg có thể dùng cho

cả mạch tổ hợp và mạch tuần tự.

18


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Khai báo wire :
wire [msb:lsb] tên biến wire;

• wire: đường dây dẫn trong một mạch điện và được dùng để
kết nối các cổng hay các module.

wire enable;
wire [7:0] bus;

19


2.3. Cấu trúc chương trình dùng ngôn ngữ Verilog
 Cấu trúc chương trình dùng ngôn ngữ Verilog
 Khai báo reg :
• reg: reg (register) là đối tượng dữ liệu mà nó chứa có giá trị
từ một thủ tục gán kế tiếp. Reg chỉ được dùng trong hàm và
khối thủ tục.
reg [msb:lsb] tên biến reg;

reg FF1, FF2;
reg [3:0] COUNT;

20



2.4. Câu hỏi ôn tập

21



×