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

Hướng dẫn thiết kế số sử dụng ngôn ngữ Verilog-HDL trên FPGA: Bài 3 pdf

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 (666.94 KB, 22 trang )

30/05/2013 FPGA Class
1
NGÔN NGỮ LẬP TRÌNH PHẦN
CỨNG VERILOG HDL (PHẦN 1)
BÀI 3:


Nhận hướng dẫn thiết kế số sử dụng ngôn ngữ Verilog-HDL trên FPGA
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ


30/05/2013 FPGA Class
2
Quy tắc đặt tên (1)
 Quy tắc đặt tên áp dụng cho tên file module, tên tín hiệu, tên
các thông số do người thiết kế tạo ra.
 Tên project trùng tên file với module chính (top module).
 Top module là module kết nối tất cả các module con (sub-module).
 Tên file trùng tên module: <tên module>.v
 Tên chỉ gồm ký tự chữ cái (phân biệt chữ hoa và chữ thường),
số và dấu gạch dưới và phải bắt đầu với một ký tự chữ.
 Không dùng các tên như VDD, VCC, VSS, GND, VREF kể cả


chữ hoa và chữ thường.
 Không trùng các từ khóa của ngôn ngữ lập trình.
 Không kết thúc tên với dấu gạch dưới, không sử dụng
nhiều dấu gạch dưới liên tiếp.

30/05/2013 FPGA Class
3
Quy tắc đặt tên (2)
 Không đặt tên trùng nhau.
 Với tín hiệu clock nên là: clock, clk hoặc ck
 Với tín hiệu reset nên là: reset, rst hoặc
reset_n, rst_n.
 Tên càng gợi nhớ và càng ngắn càng tốt.
 Tên các tín hiệu, các port, thanh ghi nên đặt
chữ in thường.
 Tên các tham số (parameter, define) nên đặt
chữ in hoa.
30/05/2013 FPGA Class
4
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ



30/05/2013 FPGA Class
5
Cấu trúc một thiết kế
30/05/2013 FPGA Class
6
Mỗi module là một file.

Các module sẽ được kết
nối với nhau (ngõ vào
module này nối với ngõ
ra module khác ở top
module).

Tên project trùng tên
với top module.
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ


30/05/2013 FPGA Class
7

Khai báo một module
 module example (//input
a, b,
//ouput
y);
 input a;
 input [2:0] b;
 output y;
 reg y;

always, assign, case, if, for

 endmodule
30/05/2013 FPGA Class
8
từ khóa tên module
danh sách port
khai báo tín hiệu ngõ vào
khai báo tín hiệu ngõ ra
khai báo kiểu tín hiệu ngõ ra
các hàm và lệnh
kết thúc module
Ví dụ về khai báo module
30/05/2013 FPGA Class
9
Đoạn code mô tả bộ mux 2 sang 1 Mux 2 sang 1
Mạch sau khi tổng hợp
bằng Quartus
Nội dung chính
 Quy tắc đặt tên

 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ


30/05/2013 FPGA Class
10
Các loại toán tử và mức ưu tiên
30/05/2013 FPGA Class
11
Cao
Thấp
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ


30/05/2013 FPGA Class

12
Hàm ASSIGN và toán tử điều kiện
 assign mux_out = sel? din_1: din_0;
30/05/2013 FPGA Class
13
 assign <tên tín hiệu được gán> = <điều kiện>? <giá trị khi điều kiện
đúng>: <giá trị khi điều kiện sai>;
Kết thúc một dòng lệnh
bằng dấu “chấm phẩy”
Phải là kiểu dữ liệu “wire”
Phải là phép gán blocking
toán tử điều
kiện
Ví dụ:
 assign mux_out = sel_1? (sel_2?din_2:din_1): din_0;
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ


30/05/2013 FPGA Class
14
Cấu trúc ALWAYS@

 always @ (<danh sách độ nhạy>) begin
 case, if, (không có assign)
 end
30/05/2013 FPGA Class
15
Kiểu dữ liệu của tín hiệu được gán trong cấu trúc always phải là reg
Danh sách độ nhạy không được khai báo đầy đủ
(Thiếu tín hiệu C)
Liệt kê tất các tín hiệu
bên phải biểu thức gán
Được khai báo đầy đủ
(Đây là mạch tổ hợp)
assign y = A & B & C;
Chú ý rằng y được khai báo kiểu wire
always @ (*) begin
y = A & B & C;
end
Với kiểu viết như thế này
chúng ta không sợ thiếu
danh sách độ nhạy
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ



30/05/2013 FPGA Class
16
Gán blocking (=) và non-blocking (<=)
30/05/2013 FPGA Class
17
C = DIN
Dùng cho mạch tổ hợp Dùng cho mạch tuần tự
Không bao giờ dùng
chung hai phép gán
blocking và non-
blocking trong cùng 1
hàm case, if, always.
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ


30/05/2013 FPGA Class
18
posedge và negedge
 Hai từ khóa này dùng trong danh sách độ nhạy

của cấu trúc always.
 posedge nghĩa là xét tại cạnh lên của tín hiệu.
 negedge nghĩa là xét tại cạnh xuống của tín hiệu.
 Không thiết kế với cả posedge và negedge
trong cùng 1 cấu trúc always.
 Chỉ nên sử dụng 1 khai báo posedge hoặc
negedge (đơn clock) nếu có thể.
 Thường dùng posedge.
30/05/2013 FPGA Class
19
Nội dung chính
 Quy tắc đặt tên
 Cấu trúc một thiết kế
 Khai báo module
 Các loại toán tử
 Hàm assign
 Cấu trúc always
 Phép gán blocking và non-blocking
 posedge và negedge
 Bài tập ví dụ


30/05/2013 FPGA Class
20
Bài tập ví dụ
30/05/2013 FPGA Class
21
1. Diễn giải chức năng của
mạch?
2. Xác định ngõ vào (tín hiệu

vào) và ngõ ra (tín hiệu ra của
mạch)? Từ đó vẽ sơ đồ chân
tín hiệu.
3. Viết RTL code bằng ngôn ngữ
Verilog mô tả mạch bên theo
các cách sau:
1. Chỉ dùng hàm assign
2. Chỉ dùng hàm always@
1. Với If
2. Với Case
3. Dùng kết hợp assign và
always
4. Đưa ra phương án kiểm tra
trên KIT DE1.

30/05/2013 FPGA Class
22
KẾT THÚC BÀI 3

×