You are on page 1of 45

CHƯƠNG 2: Cú pháp Verilog, Verilog cấu

trúc và thời gian

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
giáo trình

Tuần Nội dung Ghi


chú
1 Chương 0: Giới thiệu khóa học (1)
Chương 1: Giới thiệu Verilog và FPGA (2)
2 Chương 2: Cú pháp Verilog, Verilog cấu trúc và thời gian (3)
3, 4 Chương 3: Testbench, Dataflow và Verilog hành vi (6)
5 Chương 4: Bộ đếm, Bộ chuyển đổi/Rotator, Thông số (3)
6 Chương 5: Cấu trúc Testbench tiện dụng (3)
7 Luyện thi giữa kỳ (3)
số 8 Bài kiểm tra giữa kỳ (3)
9, 10 Chương 6: Máy trạng thái hữu hạn (FSM) trong Verilog (6)

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
Các vấn đề hành chính
Đọc
• [2] Chương 3 (Khái niệm cơ bản – Verilog HDL)
• [2] Chương 4 (khai báo mô-đun và cổng, đặt tên theo thứ bậc)
• [2] Chương 5 (mô-đun cấu trúc, cổng nguyên thủy, độ trễ)
• Trang trình bày Chương 2 (Canvas)
Bài tập về nhà
• bài tập về nhà 1
Dự án
• Lập nhóm và lựa chọn chủ đề sau Chương 3

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
Nội dung
1.Bình luận
2.số
3.Tín hiệu
4.Loại dữ liệu
5.Tham số và xác định
6.Verilog kết cấu
7.Cổng mô-đun
8.Thời gian và độ trễ
pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
1. Bình luận
Bình luận là quan trọng
• Trong ngành, nhiều người khác sẽ đọc mã của bạn
• Một số người (có thể là bạn nhiều năm sau) sẽ phải tham khảo mã
của bạn khi khách hàng phát hiện ra lỗi.

 Những nhận xét hay nhất ghi lại lý do tại sao bạn đang làm
việc bạn đang làm chứ không phải việc bạn đang làm
• Bất kỳ ai biết Verilog đều có thể biết đoạn mã đó đang làm gì
• Bình luận tại sao (động lực/quá trình suy nghĩ) bạn đang làm việc đó

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
1. Bình luận

 Không khuyến khích! Bạn bình luận những gì mã đã làm!

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
1. Bình luận

rising

 Đây là bình luận tốt hơn. Nó cho bạn biết lý do tại sao mọi thứ đã được
thực hiện!
pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
2. Con số
Định dạng chung là: <size>'<base><number>
Ví dụ:
• 4'b1101 // Đây là số nhị phân 4 bit bằng 13
• 10'h2e7 // Đây là số có độ rộng 10 bit được chỉ định ở dạng hex

Cơ sở có sẵn:
• d = số thập phân (vui lòng chỉ sử dụng trong băng ghế thử nghiệm)
• h = hex (sử dụng thường xuyên)
• b = nhị phân (sử dụng thường xuyên cho số # nhỏ hơn)
• o = bát phân (hiếm khi, vui lòng tránh)

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
2. Con số
 Các số có thể có giá trị là ký tự x hoặc z
• x = không xác định, z = Trở kháng cao
• 12'h13x // Số 12 bit với 4 bit thấp hơn không xác định
Nếu kích thước không được chỉ định thì nó phụ thuộc vào trình mô
phỏng/máy (ít nhất phải là 32 bit).
• Luôn định cỡ số cho Verilog Design Under Test (DUT)
Hỗ trợ cả số âm
• -16'h3A // đây sẽ là -3A ở dạng hex (tức là FFC6 ở dạng bù 2)
 Dấu gạch dưới và dấu chấm hỏi
• Cho phép gạch dưới “ _ ” ở bất cứ đâu ngoại trừ ký tự đầu tiên. Ví dụ:
12'b1011_0011_0110
• Dấu chấm hỏi " ? ” thay thế cho x trong bối cảnh số.
9

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
3. Tín hiệu
Mã định danh là tên bạn chọn cho tín hiệu của mình
Một số quy tắc
• Phân biệt chữ hoa chữ thường
• Bắt đầu bằng ký tự chữ cái hoặc dấu gạch dưới
• Không thể bắt đầu bằng chữ số hoặc $
Bạn nên chọn tên biến mô tả và tên tín hiệu.
• Sử dụng trường hợp hỗn hợp và/hoặc _ để phân cách tên mô tả
• Có quy ước cho các tín hiệu hoạt động ở mức thấp
 Nhiều lỗi xảy ra trên giao diện giữa các khối được viết bởi 2 người khác nhau trở lên. Một
người cho rằng tín hiệu đang hoạt động ở mức thấp và người kia cho rằng tín hiệu đó đang
hoạt động ở mức cao.
 Sử dụng _n ở cuối tín hiệu để biểu thị mức hoạt động thấp
 Ví dụ: đầu tiên_n = 1'b0 // tín hiệu reset mức thấp đang hoạt động 10

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
3. Tín hiệu
 Tín hiệu có thể có 1 trong 4 giá trị

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
3. Tín hiệu
 Giải quyết logic 4 giá trị

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 Lưới
• Thể hiện sự kết nối giữa các phần tử phần cứng.
• Có các giá trị được điều khiển liên tục trên đầu ra của thiết bị mà chúng
được kết nối.
• Khai báo chủ yếu bằng từ khóa wire
• Giá trị mặc định là z .
b a
c
a=b&c

13

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 Các thanh ghi là các nút lưu trữ
• Một biến có thể giữ một giá trị cho đến khi một giá trị khác được đặt vào
nó.
• Có thể thay đổi trong mô phỏng bằng cách gán một giá trị mới
• Được khai báo bằng từ khóa reg .
• Giá trị mặc định là x .

14

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 Các thanh ghi không nhất thiết phải là flip-flop
• Đừng nhầm lẫn thuật ngữ thanh ghi trong Verilog với thanh ghi phần
cứng.
• Thanh ghi Verilog không cần đồng hồ như thanh ghi phần cứng.
• Trong các thanh ghi Verilog của Design Unit Test (DUT) của bạn thường
là flip-flop
• Bất cứ thứ gì được gán trong khối luôn luôn hoặc khối ban đầu đều phải
được gán cho một thanh ghi.
• Một dây có thể kết nối với reg , nhưng reg thì không.
• Bạn sẽ sử dụng các thanh ghi trong testbench của mình, nhưng chúng sẽ
không phải là flip-flop

15

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 Các vectơ là một tập hợp các kiểu dữ liệu dây hoặc reg (tức là các
mạng có kiểu dữ liệu reg rộng 16 bit )
 Vector có thể được khai báo tại [ high# : low#] hoặc [ low# : high#],
nhưng số bên trái luôn là bit có ý nghĩa nhất (MSB) của vectơ

16

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 Có thể chọn các phần của vectơ (bit đơn hoặc phạm vi)

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 Mảng
• Cho phép trong Verilog các kiểu dữ liệu đăng ký reg , số nguyên , thời
gian và vectơ và không cho phép các biến thực .
• < tên_mảng >[<chỉ số dưới>]
• Mảng đa chiều không được phép.
• Vectơ là một phần tử có chiều rộng n-bit , trong khi mảng là nhiều phần
tử có chiều rộng 1-bit hoặc n-bit .

18

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 số nguyên
• Kiểu dữ liệu đăng ký mục đích chung với số nguyên từ khóa
• Độ rộng mặc định tùy thuộc vào máy (thường là ít nhất 32-bit)
• reg chỉ có thể lưu trữ các giá trị không dấu , trong khi số nguyên lưu trữ các
giá trị có dấu
 Sợi dây
• Có thể được lưu trữ trong reg. Độ rộng của biến reg phải đủ lớn để chứa chuỗi
• Mỗi ký tự trong chuỗi chiếm 8 bit (1 byte).
 Thời gian
• Đó là thời gian mô phỏng với từ khóa time .
• Hàm hệ thống $time lấy thời gian mô phỏng hiện tại.

19

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
4. Kiểu dữ liệu
 Có thể có mảng nhiều chiều
• reg [7:0] mem[0:99][0:3]; // Cái này là cái gì?
 Thường có một kỷ niệm mẫu mực
• SRAM, ROM, Flash, Bộ nhớ đệm
• Ký ức có thể hữu ích trên băng ghế thử nghiệm của bạn

ALU: Đơn vị logic số học

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
5. Tham số và xác định
 Các tham số rất hữu ích để làm cho mã của bạn chung chung/linh
hoạt hơn. Đọc về nó trong văn bản.
 ` Câu lệnh định nghĩa có thể làm cho mã dễ đọc hơn

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
5. Tham số và xác định

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
Nhiệm vụ hệ thống
hữu ích
 $display : Giống như printf trong C. Hữu ích cho việc kiểm tra
và gỡ lỗi

 $monitor : Theo dõi biến và bất cứ khi nào giá trị thay đổi, nó sẽ
in nó
 $stop : Dừng mô phỏng và cho phép bạn vẫn thăm dò tín hiệu và
gỡ lỗi
 $finish : dừng hoàn toàn mô phỏng, trình mô phỏng từ bỏ quyền
kiểm soát luồng
 Cũng hữu ích là `include để bao gồm mã từ một tệp khác (như
tệp tiêu đề)
pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
nguyên thủy
 Xây dựng thiết kế từ cấp độ cổng/flip-flop/chốt
• Verilog cấu trúc là danh sách các khối và kết nối

 Verilog cung cấp một tập hợp các cổng nguyên thủy
• và, hoặc, không, nand , cũng không, xor , xnor , buf , bufifl , v.v.
• Khối xây dựng kết hợp cho thiết kế kết cấu
• Biết “hành vi”
• Không thể truy cập mô tả “bên trong”

 Cũng có thể mô hình hóa ở cấp độ bóng bán dẫn


• Quá phức tạp! Chúng tôi sẽ không.

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
nguyên thủy

 Không có khai báo - chỉ có thể được khởi tạo


 Cổng đầu ra xuất hiện trước cổng đầu vào
 Tùy chọn chỉ định: tên phiên bản và/hoặc độ trễ (thảo luận về độ trễ
sau)

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu
 Bất kỳ thiết kế Verilog nào bạn thực hiện sẽ là một mô-đun
 Điều này bao gồm các bàn thử nghiệm!

 Giao diện (biểu diễn “hộp đen”)


• Tên mô-đun, cổng
 Sự định nghĩa
• Mô tả chức năng của khối
 Khởi tạo
• Sử dụng mô-đun bên trong mô-đun khác

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu
 Xây dựng một mô-đun từ những phần nhỏ hơn
 Thiết kế: thường từ trên xuống
 Xác minh: thường từ dưới lên

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu
 Xây dựng một mô-đun từ những phần nhỏ hơn

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu

 Bạn có thể sử dụng các loại module Verilog khác để xây dựng cấu trúc
pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu
 Hệ thống phân cấp mô-đun Verilog
• Mọi phiên bản, tín hiệu hoặc biến của mô-đun đều được xác định bằng mã
định danh . Mã định danh chỉ có thể được khai báo một lần.
• Tên phân cấp là mã định danh danh sách được phân tách bằng dấu chấm
(“.”) cho mỗi cấp độ phân cấp.
• Điều này thường hữu ích trong mã hóa testbench, theo cách hơi cửa hậu,
trong một mô-đun khác trong testbench của bạn.

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu
 Cha mẹ không thể truy cập tín hiệu “nội bộ” của con
 Có thể có tất cả các mô-đun trong một tệp duy nhất
• Thứ tự mô-đun không quan trọng!
• Tốt cho thiết kế nhỏ
• Không tốt cho những cái lớn hơn
• Không tốt cho việc tái sử dụng mô-đun (cắt và dán)
 Có thể chia mô-đun thành nhiều tệp
• Giúp tổ chức
• Hãy để bạn tìm thấy một mô-đun cụ thể một cách dễ dàng
• Tốt cho việc tái sử dụng mô-đun (thêm tệp vào dự án)

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu
 Kết nối: Theo vị trí hoặc Kết nối theo thứ tự
• Có thể ổn trong một số trường hợp
Thiết kế có rất ít cổng
Các cổng đầu vào có thể hoán đổi cho nhau ( và/hoặc/ xor đầu vào
cổng)
• Gây nhầm lẫn cho số lượng lớn các cổng

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
6. Verilog kết cấu
 Kết nối: Phương thức rõ ràng hoặc Kết nối theo tên
• Giúp tránh “kết nối sai”
• Không cần phải nhớ thứ tự cổng
• Có thể dễ đọc hơn
• .<tên cổng>(tên tín hiệu)

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
7. Cổng mô-đun
 Các cổng cung cấp giao diện để mô-đun có thể giao tiếp với các mô-đun
khác.
 Danh sách các cổng là tùy chọn trong một mô-đun. Nếu mô-đun không trao
đổi tín hiệu với bất kỳ cổng nào thì không có cổng nào trong danh sách.

 Mô-đun Top là mô-đun cấp cao nhất và mô-đun fulladd4 được khởi tạo bên
dưới Top .
pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
7. Cổng mô-đun
 Nhiều cách để khai báo các cổng của mô-đun

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
7. Cổng mô-đun
 Tất cả các khai báo cổng đều được khai báo ngầm là wire .
 Các cổng thuộc loại đầu vào và đầu vào không thể được khai báo là reg
vì các cổng đầu vào không được lưu trữ giá trị.

 cổng đầu vào chỉ phản ánh những thay đổi trong tín hiệu bên ngoài mà
chúng được kết nối.
 Tuy nhiên, nếu cổng đầu ra giữ một giá trị thì chúng phải được khai
báo là reg .

 Ví dụ: trong định nghĩa của D Filp -flop ( DFF ), chúng ta muốn đầu ra
q giữ nguyên giá trị của nó cho đến cạnh xung nhịp tiếp theo.
pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
7. Cổng mô-đun
 cổng đầu vào có thể được kết nối với một biến là reg hoặc net .
 các cổng đầu ra phải luôn được kết nối với mạng , không thể kết nối
với reg .

 Cổng vào luôn phải là loại có dây và được kết nối với mạng .
 Hai mục có kích thước khác nhau có thể được kết nối nhưng có cảnh
báo.
 Verilog cho phép các cổng không được kết nối.

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
7. Cổng mô-đun
 Ví dụ về kết nối cổng bất hợp pháp

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
8. Thời gian và độ trễ
 Có thể đặt “độ trễ” trong thiết kế Verilog
• Cổng, dây điện và báo cáo hành vi
 Độ trễ chỉ hữu ích cho Mô phỏng!
• Được sử dụng để ước tính hoạt động “thực” trong khi mô phỏng
• Dùng để điều khiển bàn thí nghiệm
 HỆ THỐNG
• tổng hợp BỎ QUA các điều khiển thời gian này
Không thể yêu cầu cổng đợi 1,5 nano giây
Độ trễ là kết quả của tính chất vật lý

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
8. Thời gian và độ trễ
 Khi không có điều khiển thời gian nào được chỉ định: độ trễ
bằng 0
• Không thực tế – ngay cả các electron cũng cần có thời gian để di
chuyển
• OUT được cập nhật cùng lúc A và/hoặc B thay đổi:
và A0(OUT, A, B);
 Độ trễ đơn vị thường được sử dụng
• Cũng không chính xác, nhưng gần hơn ...
• “Độ sâu” của mạch ảnh hưởng đến tốc độ!
• Dễ dàng hơn để xem các thay đổi lan truyền qua mạch như thế nào
• OUT được cập nhật thời gian 1 “đơn vị” sau khi thay đổi A và/hoặc B:
và #1 A0(OUT, A, B);

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
8. Thời gian và độ trễ
 Ví dụ

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
8. Thời gian và độ trễ
 Các loại độ trễ: Độ trễ quán tính (Cổng)
• Ngăn chặn các xung ngắn hơn mức độ trễ
• Trong thực tế, các cổng cần phải giữ đầu vào trong một thời gian
nhất định trước khi đầu ra chính xác (thời gian giữ).
 Các loại độ trễ: Độ trễ vận chuyển (Nets)
• “Thời gian bay” từ nguồn đến chìm
• Xung ngắn được truyền đi
 Tuy nhiên, không quan trọng đối với dự án của chúng tôi,
trong ngành

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
8. Thời gian và độ trễ
 dây số 5 net_1; // độ trễ vận chuyển 5 đơn vị

 và #4 ( z_out , x_in , y_in ); // Độ trễ quán tính 4 đơn vị


 gán #3 z_out = a & b; // độ trễ quán tính 3 đơn vị

 dây số 2 z_out ; // độ trễ vận chuyển 2 đơn vị


 và #3 ( z_out , x_in . y_in ); // 3 cho cổng, 2 cho dây

 dây số 3 c; // độ trễ vận chuyển 3 đơn vị


 gán #5 c = a & b; // 5 để gán, 3 cho dây

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn
Bản tóm tắt
 Nhận xét phải cho thấy lý do tại sao bạn đang làm việc bạn
đang làm chứ không phải việc bạn đang làm
 <kích thước>'<cơ sở><số> . Cơ sở có sẵn: d, h, b, o
 Xác định các thành phần của định nghĩa mô-đun Verilog như
tên mô-đun, danh sách cổng, nhận xét, số, tín hiệu và khai
báo tham số.
 Hiểu cách kết nối các cổng với tín hiệu bên ngoài, theo danh
sách thứ tự và theo tên
 Phân cấp: thiết kế (từ trên xuống), xác minh (từ dưới lên)

pail.phenikaa-uni.edu.vn thuan.levan@phenikaa-uni.edu.vn

You might also like