Cơ sở ngôn ngữ RLT Ngôn ngữ RLT nâng cao. Ứng dụng Verilog HDL cho tổng hợp đầy đủ Thiết kế Testbench Quản lý thiết kế
Trang 1Hội thao wng dung Verilog
IVA3
Trang 2Diéu gi sap toi
" Nục tiêu
- Giới thiệu về ngôn ngữ Verilog
— Hiểu được cách dùng, điểm mạnh và điểm yêu của nó
" Hinh thức
- Buổi sáng — Bài giảng lý thuyết
- Buổi chiều — Các bài thí nghiệm
" Thời gian
— Cà phê
— An trưa
Trang 3Dat ra kỳ vọng
" Bạn sẽ duoc hoc:
- Giới thiệu về ngôn ngữ Verilog
— Các chi tiết nâng cao của ngôn ngữ Verilog
Trang 4Tinh than của hội thảo
" Sử dụng các ví dụ trong thế giới thực, hướng tới phần cứng
" Nhiều khái niệm mới cần phải học
- Thảo luận nhiều lần
— Các câu hỏi tổng kết cuối mỗi chương
" Cách thảo luận trong lớp
— Đặt câu hỏi
— Có thê ghi lại nêu quá chi tiết
Trang 5Kế hoạch đào tao
Cơ sở ngơn cao tơng hợp
ngư
Xưởng sản xuất ứng dụng HDL
Phân giới thiệu
" Cả hai khĩa học Verilò và VHDL đều tuân theo kế hoạch này
Phân nâng cao hơn nữa (Tùy chọn)
Trang 6
Quy ước
" Code Chữ thường: từ khóa và
module ha lfadd (a, b, sum, carry); <— tên do người dùng đình
output sum, carry;
(A)— Quan trọng: Quy tắc hay hướng dân cân tuân theo khi sử dụng Verilog (!) — Cha y: Vấn đê riêng lẻ cần xem xét khi thường xuyên gây ra lỗi
(X)— Lỗi: Lôi biên dịch do sử dụng Verilog khong đúng cách gây nên
(&)— Tổng hợp: Vấn đề riêng lẻ cần xem xét khi sử dụng Verilog với công cụ tông hợp
(T) — Meo: Mẹo hay chỉ dân đề sử dụng ngôn ngữ có hiệu quả hơn
Trang 7Ung dung Verilog
VAP 3
Trang 8Ung dung Verilog
Trang 9Verilog la gi?
=" Verilog khong phai la ngon ng? lap trình
" Verilog 1a Ngôn ngữ mô tả phần cứng
(HDL)
Verilog hô trợ các kiêu mô tả:
" Câu trúc
— Vật lý (sơ đô dây & phan cap)
— Phân mêm (các chương trình con)
" Hành vi của phân cứng
—N6i tiếp (Tuân tự)
— Đồng thời (Song song)
" Cấu trúc
=" Cau tric
Trang 10Lợi ích của việc sử dụng HDL
"_ Thiết kế ở mức độ cao hơn
- Bắt lỗi sớm hơn trong chu trình thiết kế
— Tìm kiếm các phương án thiết kế thay thế
"- Mô tả là quá trình độc lập với phần cứng
— Chức năng và công nghệ thay đồi dê dàng hơn
— Kéo dài thời gian quyết định cách thực hiện mạch
" Sư mêm dẻo
— Có thê sử dụng lại các thiết kế có săn
— Có thề lựa chọn công cụ nhà phát triển
" Dựa trên ngôn ngừ văn bản
— Thiết kế nhanh hơn
— Quan ly dé dang hơn
Trang 11Cac van dé khi sw dung HDL
" Qua trinh hoc tap vat va
— Một ngôn ngữ lập trình mới cần phải thông thạo
— Các công cụ mô phỏng và tông hợp cân phải học
" Su thay d6i lon trong phương pháp thiết kê
— Không có phương pháp "ngoài giá sách" cứng nhắc
— Cần lên kế hoạch và thực hiện
"_ Chi hướng tới thiết kế số
— Mặc dù vân có phần mở rộng cho thiết kế tương tự (Verilog—A)
" Phong cách viết mã đúng đắn sẽ giúp cho dự án thành công
"- Cân lên kế hoạchvà phân chia thiết kế trước khi viết mã
" Các vân đề cụ thê khác chúng ta sẽ gặp trong suốt khóa học
Trang 12Cac ung dung
Ngôn ngữ Verilog được sử dụng bởi
Các thiết kế viên ASIC và FPGA khi viết mã RTL đề tông hợp
Các cầu trúc viên hệ thông khi thực hiện các mô phỏng hệ
thông ở mức cao hơn
Các kỹ sư kiểm định khi cần viết các bài test nâng cao cho tất
cả các mức độ của mô phỏng
Các nhà phát triển mô hình khi miêu tả các tê bào ASIC hoặc FPGA, cũng như các thành phân ở mức cao hơn
Trang 13Tổng hợp số
Mức công — Câu trúc — Sơ đô dây
Sắp xếp, đặt linh kiện và đi dây
Trang 14Mire do triru tượng
Trang 15Minh họa cho mức độ trừu tượng: Chia 2
Trang 16Mô phỏng mức công logic
Áp dụng mô phỏng mức
thấp cho thiết kế
Mô phỏng tách biệt, bất
khả chuyên Xem kết quả dưới dạng
song
Kiém tra đồng thời dưới dạng thời gian thực và chức năng
Quyết định mang tính cả nhân nếu chức năng đúng Hãy cùng so sánh với
việc sử dụng Verilog
10
Trang 18On tap
1 Verilog la gi?
2 Verilog doc lap với phân cứng như thê nào và tại sao đây lại là
ưu điềm của nó?
3 Verilog duoc su dung 6 muc nào?
a Testbench
b Thiết kế có thể tông hợp
c Sơ đồ nỗi dây
12
Trang 19Giới thiệu Ngơn ngữ Verilò
VLE7
Trang 20Mục tiêu và các chủ đê
" Nục tiêu
— Xác định các đối tượng cơ bản của ngôn ngữ
— GIới thiệu các khái niệm chính của ngôn ngữ
" Các chủ đề
— Các đôi tượng trong Verilog
— Mô tả các kết ndi trong Verilog
— Mô hình phân cấp
- Quy tặc và điều chỉnh
Trang 21module
" Mô tảgiao diện và hành vỉ
" Cac module giao tiép voi nhau
thong qua cac cong
— Tén cac cong duoc liét ké
trong dâu ngoặc kép đăng sau tên
module
Các công có thê được xác
định là đầu vào (input), dau ra
(output) hoac hai chiéu (inout)
^ được dành riêng cho toán tử
& vừa là điều kiện, vừa là
toán tử
(A) Verilog phân biệt chữ hoa và chữ
thường Các tử khóa phải viết bằng chữ
module halfadd (a, b, sum, carry); output sum, carry;
Trang 22Mô hình phan cap
" Nối các công của module téi các công Ul UZ -
— Các dây nói cục bộ cân phải được định _“*” `
output sum, carry;
wire n_sum, n_carryl, n_carry2;
halfadd Ul (.a(a), b(b), sum(n sum), carry(n _carryl));
halfadd U2 (.a(n_sum), b(cin), sum(sum), carry(n carry2));?
or U3 (carry, n_carry2, n carryl);?
Trang 23" Phân biệt rõ ràng công nào thực thể module
b carry
module fulladd (a, b, cin, sum, carry); đươc nối VỚI dây
input a, b, cin; n_carryl cua module
output sum, carry; fulladd
wire n sum, n carryl, n carry2;
halfadd Ul (.a(a), b(b), sum(n sum), wal (n_carryl));
7
module halfadd (a, b, sum, carry);
input a, b; nôi các công có tên đê gắn
Trang 24
— Công thứ nhất của thực thê sẽ ứng
với công thứ nhât cua module
— Công thứ hai của thực thê sẽ ứng
với công thứ của module
output sum, carry;
wire n_ sum, n_carryl, n_carry2;
halfadd Ul (a, b, n sum, n _carryl));
module halfadd Na, Sum, carry);
output sum, carry;
input a, b;
halfadd
Đầu vào a của fulladd ứng
với đầu vào a của halfadd
Đầu vào b của fulladd ứng với đầu vào b của halfadd
(!) Chu ¥: Kiêu kết nối này
khó doc va dé mac 161 hon
kiêu kêt nôi công có tên
Trang 25
" Chứa các biêu thức thực thi always @ (a or b or sel)
=" Nhiéu thi tuc hoat déng song song rí (se ¬ 2)?
= thu tuc always ° ` cốc
— Thực thi khi bat ky biễn nào trong op = b; Danh sách sự kiện
danh sách sự kiện thay đôi giá trị
— Chạy suốt trong quá trình mô phỏng a 1
dau mo phong sel
— Được sử dụng cho thủ tục khởi tao, initial
Trang 26= thu tuc always thuc thi khi mo always @ (a or b or sel)
trong sô các biên của danh sách sự if (sel == 1);
kién thay doi gia tri op = a;
=" Su kién là một sự thay đôi trong else
gia tri cua bién logic op = b; Danh sách sự kiện
Trang 27Mô hình kết nỗi của Verilog
được sắp xếp tuân tự giống
"phần mêm" thông thường
" thủ tục được bao gồm trong một module
— Hoặc được chia thành
nhiêu module trong mô hình phân cấp
Trang 28Thư viện biên dịch
Một vài cơng cụ Verilog sử dụng các thư
viện biên dịch
" Một tập hợp các module hay phân tử
lòic được biên dịch săn
"- Tơn tại dưới dạng đường dân
"- Được tham chiếu bởi tên viện
= Bo mo phơng khởi tạo quá trình kết
nơi chân xác định
— Tên thư viện —> tên đường dân
=" Bién dich vao "WORK"
— WORK được kết nối với tên thư viện
xác định
(A) Khơng phải tất cả các bộ mơ phỏng Verilog
đều sử dụng thư viện biên dịch
WORK
primitives module module primitives module module primitives module module primitives module module
Trang 29
Bién dich thiét ké
pnet read pnet write
RTL/cau trac hanh vi
" Thiết kế được biên dịch từ một danh sách các tap tin Verilog
" Thông thường, testbench sẽ được biên dịch trước
— Thông thường chứa các định hướng của bộ biên dịch
— Cung cấp thêm các thông tin
bô sung cho bộ biên dịch/mô phỏng
" Thường thì thứ tự các tập tin không quan trọng
" Các kết nối trong mô hình phân cấp được tạo ra tự động
=" Verilog cho phép cac mirc do trừu tượng khác nhau ở bắt cứ đâu trong mô hình phân cấp
Trang 30Chú thích và các dẫu cách
// Đây là một chú thích 'dòng' Mỗi dòng phải bắt đầu bằng //
// Các chú thích sẽ kết thúc khi bắt đầu một dòng mới
module halfadd (a, b, sum, carry);
output sum, carry;
assign carry = a & b;
// Hãy căn chỉnh dòng hợp lý, bạn sẽ dễ dọc và dễ sửa lỗi hơn
Trang 31Quy tac dat tén
" lên có thé bao gồm chữ cái hoặc
so, ké ca dau do la ($) va gach
dưới (_)
"lên phải bắt đầu băng một chữ cái
hoặc dâu gạch dưới
=" Tén trong Verilog phan biét chit
hoa và chữ thường
— Các từ khóa phải viết thường
" Các tên sau không ứng với cùng
một đôi tượng
— ABC, Abc, abc
" Chiêu dài của tên là tùy ý
— Song các công cụ hoặc phương
pháp có thê giới hạn chiêu dài của tên
unit 32
structural
bus 16 bit
aSb 01h
unit@32 un1t-32
16 bit bus
/
Trang 32On tap
1 Don vi cau thanh co bản của một thiết kế trong Verilog là gì?
2 Dữ liệu được truyền đi giữa các thủ tục trong Verilog như thê nào?
3 Khi biên dịch một loạt các tập tin Verilog, thông thường tập tin nào sé
được biên dịch trước?
4 Viết một đoạn code đề thực thê hóa module sau:
clk reset
Trang 33Cac gia tri logic va cac kiéu
dữ liệu của Verilog
VDL4
Trang 34Mục tiêu và các chủ dé
" Nục tiêu
— Giới thiệu hệ thông các giá trị logic của Verilog
— Hiểu về các kiêu dữ liệu khác nhau
— Các quy định khi sử dụng chúng
=" Cac chu de
—Hé thống giá trị logic
— Các lớp dữ kiều liệu
— Các giá tri vector va thông thường
— Dữ liệu kiêu dây và cách sử dụng
— Dữ liệu kiêu thanh ghi và cách sử dụng
— Lựa chọn đúng kiêu dữ liệu
— Các thông số
— Các mảng bộ nhớ
Trang 35Hé thong logic 4 gia tri trong Verilog
“ nguon, VDD, VCC, gia tri duong
| lg x, chua xac dinh (xung dot bus), chua khoi tao
buf
bufifl HiZ, trở kháng cao, 3 trạng thái, chưa điều
khién, chwa noi, chưa biêt bộ điêu khiên
(A) Giá trị logic "chưa xác định" x không giống với giá trị "don't care"
3
Trang 367 ° A ~ eA
Cac kiêu dữ liệu
" Các đôi tượng của Verilog giao tiếp với nhau thông qua các biến
"_ Tất cả các biên đêu có kiêu đữ liệu
" Verilog cung cap một số lượng các kiều dữ liệu dựng sẵn
" Verilosg là một ngôn ngữ có kiêu rất lỏng lẻo
Trang 37— Bạn có thê định kiêu lại nêu muốn sử dụng
kiêu dây hoặc thanh ghi
" Theo mặc định các biến là các dây vô hướng
Việc sử dụng các lớp dữ liệu được quy định
rât chặt chẽ
— Có nghĩa là chỉ thanh ghi mới được gán
giá tri trong mot thu tục
Trang 38Vector
" Vector là một biến với độ dài từ hai bít trở lên
" Kích cờ được định nghĩa khi biến được khai báo
module mux (a, b, sel, op); (A) Quan trọng: các công vector
input [3:0] a, b;<———— Dây vedtor 4 bít của module được đặt tên trong
output [3:0] op; kích thước với câu lệnh
Trang 39Phép gan vector va thu tu bit
" Các yếu tô được gán theo vị trí
" Các bít riêng lẻ có thể được lấy ra từ vector
" Thứ tự bít có thê được định nghĩa theo chiêu khác
(T) Mẹo: Thông thường chúng ta nên sử dụng [msb:lsb] ví dụ [3:0]
Zbus[3] < Cbus [ 3]
zbus[2] < cbus [2]
zbus[l] < Cbus [1]
zbus[0] < cbus [0]
Trang 40Phép gan vector va do d ai bit
"- Độ dài của vector không cần phải giống nhau trong phép gán
— Nếu nguồn dài hơn đích, nguôn sẽ được cắt bớt đi (từ bít cao nhất)
— Nếu nguồn ngắn hơn đích, nguồn sẽ được thêm các số 0 (từ bít cao nhất)
" Sử dụng ngoặc vuông hoặc ngoặc nhọn đề phối hợp độ dài vector
Trang 41
Cac gia tri thong thuong
— Số không dấu được mặc định là 32 bit
— Cơ số có thê là b (nhị phân), o (bát phân),
d (thập phân) hoặc h (thập lục phân)
4'b1001 = 4'd9 = 4'oll
— Nếu không ghi, cơ số mặc định là 10
— Giá trị là con số hợp lệ trong hệ cơ số được
lựa chon, cũng có thê là x hoặc z
reg reg
// 0101
// 1110
// 1111
(A) Quan trọng: Đề tránh vector bị
cắt hoặc kéo dãn, kích cỡ cân tương
thích với biến được gán
8'b1100 0001 Số nhị phân § bít
32'bz z 32 bit (gia tri x va z được mở rộng một cách tự động
64'hff01 Số thập lục phân 64 bit
9'o17 Số bát phân 9 bit
12 Giá trị không có kích cỡ, cơ số (mặc định là số thập phân 32 bit)
'h83a Số thập lục phân không có kích cỡ (mặc định là 32 bit)
Trang 42
Khả năng tự mở rộng của các sô
" Dựa trên cơ số, các số reg [7:0] a;
thông thường sẽ có các độ reg [11:3] by
dai khac nhau: initial
(?) Cau hoi: Gia tri cua a sau ⁄ a = 8'h10; //
các phép gán này là bao nhiêu? a = 0; //
ZZZZZzZzZzZ0000
Trang 43
Kiéu day
" Một dây hoạt động như một dây nói thực thụ được điều khiên bởi một công logic
" C6 rat nhiéu kiêu dây nối
—wire la kiéu hay được dùng nhất
—cac day khéng duoc khai báo rõ ràng có kiều mặc định là wire
" Cac gia trị dây thay đôi với câu lệnh assign trong phép gán liên tục cũng như nhờ vào các module hoặc phân tử logic trong thiết kế
wire sel; // Dây vô hướng
wire [31:0] wl, w2; // Hai dây 32 bit với msb là bit 31
wand c; // Day AND vô hướng
tri [15:0] busa; // Bus 16 bit 3 trang thai, msb la bit 15
module halfadd (a, b, sum, carry);
Các kiêu dữ liệu day: wire, input a, b; // mặc định 1a wire
tri, supplyl, supply0, output sum, carry; // mac dinh 1a wire
wor, trior, wand,
triand, trireg, trio, // thay déi theo phép gan
tril assign sum =a ^ b;
assign carry = a & b;