1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng ngôn ngữ mô tả phần cứng verilog

17 113 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 2,29 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CHƯƠNG 1: TỔNG QUAN VỀ VERILOG 1.1. Các thuật ngữ trong Verilog • Khoảng trắng: khoảng cách giữa các từ, chứa các kí tự khoảng trắng • chú thích: Ghi chú lại chức năng hoặc bước thực hiện • Định danh: Tên của biến, tên module hay các khối, hàm, tên trường hợp • Từ khóa: Chữ thường, dùng để định nghĩa cấu trúc ngôn ngữ 1.2. Cấu trúc chương trình dùng ngôn ngữ Verilog module tenmodule(tenbienIO); Khai báo Port Khai báo Kiểu đường dây Khai báo Các parameter Mô tả mạch thiết kế(Câu lệnh) endmodule  Khai báo module: module tenmodule(tenbienIO); Trong đó tenmodule do người lập trình đặt, tên biến IO lần lượt là các port inout mà chương trình sử dụng  Phép gán liên tục – assign • Đặt bên ngoài khối always hoặc initial assign tên biến = biểu thức; • Khai báo 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 msb:lsb tên biến wire; • 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; CHƯƠNG 2: TOÁN TỬ VERILOG 2.1. Biểu diễn số trong Verilog 2.1.1. Biểu diễn giá trị logic trong Verilog Biểu diễn giá trị logic: Verilog HDL có 4 giá trị logic LOGIC Mô tả 0 Mức 0, điều kiện sai 1 Mức 1, điều kiện đúng X or x Mức tùy định Z or z Trạng thái tổng

Trang 1

CHƯƠNG 1: TỔNG QUAN VỀ VERILOG 1.1 Các thuật ngữ trong Verilog

• Khoảng trắng: khoảng cách giữa các từ, chứa các kí tự khoảng trắng

• chú thích: Ghi chú lại chức năng hoặc bước thực hiện

• Định danh: Tên của biến, tên module hay các khối, hàm, tên trường hợp

• Từ khóa: Chữ thường, dùng để định nghĩa cấu trúc ngôn ngữ

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

module tenmodule(tenbienI/O);

Khai báo Port

Khai báo Kiểu đường dây

Khai báo Các parameter

Mô tả mạch thiết kế(Câu lệnh)

endmodule

Khai báo module:

module tenmodule(tenbienI/O);

Trong đó tenmodule do người lập trình đặt, tên biến I/O lần lượt là các port in-out mà chương trình sử dụng

Phép gán liên tục – assign

• Đặt bên ngoài khối always@ hoặc initial

assign tên biến = biểu thức;

• Khai báo 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 [msb:lsb] tên biến wire;

• 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;

CHƯƠNG 2: TOÁN TỬ VERILOG 2.1 Biểu diễn số trong Verilog

2.1.1 Biểu diễn giá trị logic trong Verilog

Trang 2

Biểu diễn giá trị logic: Verilog HDL có 4 giá trị logic

0 Mức 0, điều kiện sai

1 Mức 1, điều kiện đúng

X or x Mức tùy định

Z or z Trạng thái tổng trở cao

2.1.2 Cách biểu diễn số:

Số có cơ số: số nguyên được khai báo dùng những cơ số nhất định (hệ 2, 8, 10, 16)

integer_name = size 'base value;

Trong đó:

integer_name: tên của số nguyên cần dùng

size: số bit nhị phân (biểu diễn số nguyên)

base: cơ số (theo đó: b – binary; o – octal; d – decimal; h - hexadecimal)

value: giá trị thiết lập

Ví dụ:

2.2 Toán tử trong Verilog

2.2.1.Toán tử số học:

• + :cộng theo bit

• - :trừ theo bit

• * : nhân

• / :chia

• % : chia lấy dư

Lưu ý : Nếu bất kì bit nào của một toán hạng trong toán tử số học là x hay z thì kết quả là x

Trang 3

2.2.2 Toán tử quan hệ:

So sánh 2 toán hạng và trả về giá trị 0 hoặc 1 (true/false)

• > (lớn hơn )

• < ( nhỏ hơn )

• >= (lớn hơn hoặc bằng )

• <= (nhỏ hơn hoặc bằng)

2.2.3 Toán tử so sánh bằng:

• == Bằng logic

• != Không bằng logic

Tương tự như toán tử quan hệ, ta có:

• === bằng (so sánh từng bit)

• !== không bằng (so sánh từng bit)

Khi các toán hạng không bằng nhau về chiều dài, thì toán hạng ngắn hơn sẽ thêm số 0 vào

vị trí bit có nghĩa nhất (MSB)

2.2.4 Toán tử logic:

• &&: And logic

• ||: Or logic

• !: Not (bù) logic

Kết quả trả về giá trị 0 hoặc 1 (1 bit đơn)

Chúng có thể làm việc trên biểu thức, số nguyên, hoặc nhóm bit

Toán hạng là vector khác 0 được xem như 1

Lưu ý: Nếu bất kì z bit nào của toán hạng có giá trị x hay z thì toán hạng được xem như x

Ví dụ:

Trang 4

2.2.5 Toán tử thao tác trên bit (bitwise):

So sánh từng bit hai toán hạng, gồm các toán tử:

• ~ Not – Phép đảo bit

• & And – Phép and theo bit

• ~& Nand – Phép nand theo bit

• | Or – Phép or theo bit

• ~| nor – Phép nor theo bit

• ^ Xor – Phép xor theo bit

• ~^/^~ Xnor – Phép xnor theo bit

Ví dụ:

2.2.6 Toán tử giảm:

Những toán tử giảm hoạt động trên tất cả các bit của toán hạng đơn và kết quả trả về là 1 bit

Gồm các toán tử giống toán tử thao tác trên bit (bitwise)

Ví dụ:

Trang 5

2.2.7 Toán tử dịch: Gồm các toán tử logic:

• << Dịch trái

• >> Dịch phải

2.2.8 Toán tử điều kiện: “?:”

kếtquả = (điều kiện ) ? kết quả điều kiện đúng : kết quả điều kiện sai;

Ví dụ:

2.2.9 Toán tử ghép nối:

• Ghép hai hoặc nhiều toán hạng thành một vectơ lớn

• Sử dụng k{ hiệu “{}” và dùng dấu phảy “ , ” để ngăn cách các biểu thức ({a1, a2,… , aN})

• Những hằng số không biết kích thước không thể thực hiện kết nối

Trang 6

2.2.10 Toán tử nhân bản:

• Tạo ra nhiều bản sao của một mục chọn

• Sử dụng k{ hiệu “{}” và dùng dấu phảy “ , ” để ngăn cách các biểu thức {n{ mục chọn }}

• Trong đó: n - số nhân bản của mục chọn

2.3 Các mô hình mô tả mạch dùng Verilog HDL

2.3.1 Mô tả theo mô hình luồng dữ liệu:

Câu lệnh cơ bản được dùng là assign, dùng để gán một giá trị hay biểu thức đến một biến kiểu wire

2.3.2 Mô hình hành vi:

Hành vi của thiết kế được mô tả bằng cách sử dụng cấu trúc thủ tục:

• Câu lệnh always: câu lệnh được thực hiện lặp lại nhiều lần

• Câu lệnh initial: câu lệnh chỉ thực thi 1 lần (dùng cho mô phỏng)

Chỉ có kiểu dữ liệu thanh ghi (reg) mới mới có thể được gán giá trị trong những câu lệnh này

Trang 7

2.3.3 Mô hình cấu trúc:

Mức cổng là mức mô tả hệ thống dưới dạng liên kết các cổng logic kèm theo mô tả định thời (timing) nếu có

Mức này sử dụng các thành phần mô hình cổng logic, các Flip-Flop hoặc các cell sẵn có để ghép nối với nhau tạo thành chức năng mong muốn

Việc kết nối được xác định bằng cách sử dụng những net

Cú pháp: khai báo các cổng được định nghĩa sẵn trong Verilog

Têntừkhóa têncổng(output,input1,input2,…inputN);

Trang 8

CHƯƠNG 3: CẤU TRÚC CỦA 1 MODULE 3.1 Cách gọi module con:

Khi một mô-đun được khởi tạo, phải xác định kết nối đến các cổng của các module

Có hai cách gọi để kết nối cổng các module là:

• Kết nối theo thứ tự cổng: thứ tự các cổng trong module chính phải phù hợp với thứ tự xuất hiện các cổng trong module con

• Kết nối theo tên cổng: tên cổng phải phù hợp với module con, thứ tự không quan trọng

a) Kết nối theo thứ tự:

Tên_module_con Nhãn(signal_1, signal_2,…, signal_N);

b) Kết nối theo tên:

Tên_module_con Nhãn (.port_name_1(signal_1, port_name_2(signal_2,

…,.port_name_n(signal_n);

Trong đó:

• Signal: tên các cổng của module top

• Port_name: tên các cổng của module con

Ví dụ:

module adder_order(S,cout,A,B,cin);

// Input Port Declarations

input [3:0] A ;

input [3:0] B ;

input cin ;

// Output Port Declarations

output [3:0] S ;

output cout ;

// Port Wires

wire [3:0] A ;

wire [3:0] B ;

wire cin ;

wire [3:0] S ;

wire cout ;

// Internal variables

wire c1 ;

wire c2 ;

Trang 9

wire c3 ;

// Code Starts Here

addbit u0 (A[0],B[0],cin,S[0],c1);

addbit u1 (A[1],B[1],c1,S[1],c2);

addbit u2 (A[2],B[2],c2,S[2],c3);

addbit u3 (A[3],B[3],c3,S[3],cout);

endmodule

Kết nối theo tên(by port name) :

module adder_name(S,cout,A,B,cin);

// Input Port Declarations

input [3:0] A ;

input [3:0] B ;

input cin ;

// Output Port Declarations

output [3:0] S ;

output cout ;

// Port Wires

wire [3:0] A ;

wire [3:0] B ;

wire cin ;

wire [3:0] S ;

wire cout ;

// Internal variables

wire c1 ;

wire c2 ;

wire c3 ;

// Code Starts Here

addbit u0 (.a(A[0]),.b(B[0]),.ci(cin),.sum(S[0]),.co(c1));

addbit u1 (.a(A[1]),.b(B[1]),.ci(c1),.sum(S[1]),.co(c2));

addbit u2 (.a(A[2]),.b(B[2]),.ci(c2),.sum(S[2]),.co(c3));

addbit u3 (.a(A[3]),.b(B[3]),.ci(c3),.sum(S[3]),.co(cout));

endmodule

3.2 Quy định kết nối port:

Input: Kết nối bên trong luôn luôn là kiểu net; bên ngoài có thể khai báo kiểu net hoặc reg.

Output: Bên ngoài luôn là kiểu net, bên trong có thể là kiểu net hoặc reg

• Cổng không kết nối được cho phép sử dụng dấu “ , ”

Ví dụ:

Trang 11

CHƯƠNG 4: MÔ TẢ HÀNH VI 4.1 Khối always và initial

a) Khối initial:

• Chỉ thực thi một lần từ lúc bắt đầu (của quá trình mô phỏng)

• Khối initial dùng cho thực hiện mã testbench

• Một khối initial chứa nhiều hơn 1 câu lệnh phải kèm theo câu lệnh begin – end hoặc fork – join

Ví dụ:

b) Khối always:

• Được thực hiện lặp lại nhiều lần

• Một khối always chứa nhiều hơn 1 câu lệnh phải kèm theo câu lệnh begin – end hoặc fork – join

Cú pháp:

Trang 12

Trong đó:

• Sensitivity_list: danh sách tín hiệu kích thích

• Mạch tổ hợp: các ngõ vào

• Mạch tuần tự: xung clk, các ngõ vào điều khiển…

Trang 13

4.2 Câu lệnh khối và lệnh gán thủ tục

Câu lệnh khối nhóm 2 hay nhiều câu lệnh mà cú pháp tác động giống một câu lệnh đơn

Có 2 loại phát biểu khối trong Verilog:

• Khối tuần tự (begin…end): các câu lệnh được thực thi tuần tự

• Khối song song (fork…join): các câu lệnh được thực thi cùng lúc

a) Khối tuần tự (begin…end):

• Các câu lệnh được thực thi tuần tự

• Khối lệnh kết thúc khi câu lệnh cuối cùng được thực thi

• Một khối begin…end có thể được đặt nhãn một cách tùy chọn, nếu có nhãn được đặt, các khai báo cục bộ phải là kiểu reg

• Một khối begin…end phải chứa ít nhất 1 câu lệnh

b) Khối song song (fork…join):

Các câu lệnh được thực thi song song

4.3 Lệnh gán thủ tục:

Sử dụng để gán đến dữ liệu kiểu reg, chia là 2 kiểu gán:

Kiểu gán blocking: (thường dùng cho mạch tổ hợp)

[tên biến] = [biểu thức] ;

Các lệnh thực hiện tuần tự, thực hiện xong lệnh gán này mới thực hiện lệnh gán kế tiếp

Kiểu gán non-blocking: (thường dùng cho mạch tuần tự)

Trang 14

[tên biến] <= [biểu thức] ;

Các lệnh gán được thực hiện song song

4.4 Câu lệnh if và case

Trang 15

4.5 Câu lệnh lặp: xuất hiện trong các khối thủ tục gồm 4 lệnh lặp

Trang 16

• Lệnh lặp forever

• Lệnh lặp repeat

• Lệnh lặp while

• Lệnh lặp for

Câu lệnh lặp phải được đặt trong khối begin – end nếu có nhiều hơn 1 câu lệnh được thực thi

Ngày đăng: 15/11/2020, 22:13

TỪ KHÓA LIÊN QUAN

w