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.. T
Trang 1NGÔN NGỮ LẬP TRÌNH PHẦN CỨNG VERILOG HDL (PHẦN 1)
BÀI 3:
hoangquang.dientu@gmail.com
Nhận hướng dẫn thiết kế số sử dụng ngôn ngữ Verilog-HDL trên FPGA
Trang 3Quy 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
Trang 4Quy 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
Trang 6Cấ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
Trang 8Khai báo một module
module example (// input
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
Trang 9Ví dụ về khai báo module
Đ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
Trang 11Các loại toán tử và mức ưu tiên
Cao
Thấp
Trang 13Hàm ASSIGN và toán tử điều kiện
assign mux_out = sel? din_1: din_0;
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ụ:
Trang 15Cấu trúc ALWAYS@
always @ ( <danh sách độ nhạy> ) begin
case, if, (không có assign)
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
Trang 17Gán blocking (=) và non-blocking (<=)
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
Trang 19posedge 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
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ể
Trang 21Bài tập ví dụ
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:
Trang 2230/05/2013 FPGA Class 22
KẾT THÚC BÀI 3