Bài giảng Hệ thống điều khiển nhúng - Chương 1: Ngôn ngữ Verilog
Ngôn ngữ mô tả phần cứng HDL
(Hardware Description Language)
- Thiết kế mạch số (1950’s, 1980’s):
vẽ mạch schematic -> lựa chọn linh
kiện -> thi công.
- Mạch schematic gồm có:
• Phần tử (component): Cổng
(Gate), Điện trở, (LEDs, LCD)
Chips,…
• Dây kết nối các phần tử
• Input, Output -> xem 1 mạch
schematic như 1 phần tử -> kết
nối phân cấ
(Hardware Description Language)
- Thiết kế mạch số (1950’s, 1980’s):
vẽ mạch schematic -> lựa chọn linh
kiện -> thi công.
- Mạch schematic gồm có:
• Phần tử (component): Cổng
(Gate), Điện trở, (LEDs, LCD)
Chips,…
• Dây kết nối các phần tử
• Input, Output -> xem 1 mạch
schematic như 1 phần tử -> kết
nối phân cấ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống điều khiển nhúng - Chương 1: Ngôn ngữ Verilog", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_he_thong_dieu_khien_nhung_chuong_1_ngon_ngu_verilo.pdf
Nội dung text: Bài giảng Hệ thống điều khiển nhúng - Chương 1: Ngôn ngữ Verilog
- I. GIỚI THIỆU 1.1. Ngôn ngữ mô tả phầncứng HDL 1950’s 1980’s (Hardware Description Language) -Thiếtkế mạch số (1950’s, 1980’s): vẽ mạch schematic -> lựachọn linh kiện -> thi công. -Mạch schematic gồmcó: •Phầntử (component): Cổng (Gate), Điệntrở, (LEDs, LCD) Chips, •Dâykếtnốicácphầntử • Input, Output -> xem 1 mạch schematic như 1 phầntử -> kết nối phân cấp. 2 Trường ĐH Bách Khoa TP.HCM
- I. GIỚI THIỆU 1.2. Ưu điểmHDL so với Schematic: -Xâydựng và lưutrữ HDL trong các file. - Các file có thểđóng gói và xử lý bởi các công cụ: •Design: ViếtHDL, vẽ sơđồ • Synthesis: lựachọnphầntử, tối ưulogic, ướclượng thờigian • Implementation: gán chân, lập trình vào FPGA -Dễ dàng thay đổi, chỉnh sửathiếtkế mà không cầnthayđổiphầncứng. - Đáp ứng các yêu cầuthiếtkế phức tạp 4 Trường ĐH Bách Khoa TP.HCM
- II. THIẾT KẾ PHÂN CẤP 2.1. Các mô tả (abstraction) trong thiếtkế phầncứng: -Môtả cấu trúc (Structural modeling). -Môtả dòng dữ liệu (Dataflow modeling). -Môtả hành vi (Behavioral modeling) 6 Trường ĐH Bách Khoa TP.HCM
- II. THIẾT KẾ PHÂN CẤP 2.3. Ví dụ: Mô tả hành vi 8 Trường ĐH Bách Khoa TP.HCM
- III. VERILOG HDL 3.1. Tổng hợp (Synthesis) và Mô phỏng (Simulation) -Tập trung vào mô phỏng và viết chính xác ngôn ngữ Verilog - Ghi nhớ: Mô phỏng đúng không có nghĩalàthicôngđúng 10 Trường ĐH Bách Khoa TP.HCM
- III. VERILOG HDL 3.2. Module module name(portlist); -> tên module (danh sách port) port declarations; -> hướng của port (input, output, bidir) parameter declarations; -> tham số, khai báo module khác wire declarations; -> tín hiệukếtnốicụcbộ reg declarations; -> lưutrữ cụcbộ, biếncụcbộ variable declarations; -> lưutrữ cụcbộ trong module module instantiations; -> mô tả cấutrúc dataflow statements; -> mô tả hành vi always blocks; -> mô tả hành vi initial blocks; -> mô tả hành vi tasks and functions; endmodule 12 Trường ĐH Bách Khoa TP.HCM
- III. VERILOG HDL 3.2. Module – Ví dụ 1 module name(portlist); module or_nand_4 (enable, x1, x2, x3, x4, y); port declarations; input enable, x1, x2, x3, x4; parameter declarations; output y; wire declarations; assign y = or_nand(enable, x1, x2, x3, x4); reg declarations; function or_nand; input enable, x1, x2, x3, x4; variable declarations; begin module instantiations; or_nand = ~(enable & (x1 | x2) & (x3 | dataflow statements; x4)); always blocks; end initial blocks; endfunction tasks and functions; endmodule endmodule 14 Trường ĐH Bách Khoa TP.HCM
- III. VERILOG HDL 3.3. Giá trị dữ liệu(Data value) -4 loạigiátrị: •0: mứcthấp, 1: mức cao • Z: hi-Z, X: unkown - Khi khởitạo, các biếncógiátrị X -Gángiátrị các hằng số: {bit width}’{base}{value} • parameter RED = 6’b010_111 : 010111 • parameter BLUE = 8'b0110 : 00000110 • 4'bx01 : xx01 • 16'H3AB : 0000001110101011 • 24 : 0 0011000 • 5'O36 : 11011 • 8'hz : zzzzzzzz 16 Trường ĐH Bách Khoa TP.HCM
- III. VERILOG HDL 3.3. Loạidữ liệu (Data type) 18 Trường ĐH Bách Khoa TP.HCM
- IV. PHÉP GÁN (ASSIGNMENT) 4.1. Khối initial và always module initalways (clk); -Môtả hành vi reg [7:0] a; -Khối initial chỉ thựchiệnmộtlần khi reg b; khởi động (khi bật nguồn) initial -Khối always thựchiệnlặplại liên tục begin • always @(a or b) a = 0; -> any changes in a or b b = 0; • always @(posedge a) end always @ (posedge clk) -> a transitions from 0 to 1 begin • always @(negedge a) a = a + 1; -> a transitions from 1 to 0 b = 1; • always @* end -> any changes in “inputs” endmodule; 20 Trường ĐH Bách Khoa TP.HCM
- IV. PHÉP GÁN (ASSIGNMENT) 4.2. Phép gán liên tục (continuous assignment) - Cú pháp: assign LHS = RHS; -LHS : kiểudữ liệubắtbuộclàwire. -RHS: kiểudữ liệucóthể là wire, reg, hằng số, biểuthức - Giá trị của RHS luôn luôn đượcgán module nand(q1, q2, a, b) cho LHS input a, b; -Tấtcả các phép gán hoạt động đồng output q1, q2; thời, chỉ phụ thuộc netlist assign q1 = ~(a | b); assign q2 = ~(a & b); -Mỗingõrachỉđượcgán1 lần endmodule -Thường sử dụng trong kếtnối các assign {q1,q2} = {~(a | b),~(a & b)}; cổng logic 22 Trường ĐH Bách Khoa TP.HCM
- IV. PHÉP GÁN (ASSIGNMENT) 4.4. Phép gán thủ tục blocking và // Blocking non-blocking reg [7:0] a, b; - Blocking: phép gán củahànglệnh initial b = 0; trên phải được hoàn thành trước initial a = 4; khi thựchiệnhànglệnh bên dưới. always @(posedge clk) begin - Non-blocking: các biếndữ liệuchỉ a = b + 2; đượccậpnhậtsaukhirakhỏi1 b = a * 3; khối. end - Trong thựctế, không đượcgán // Non-blocking blocking và non-blocking trong reg [7:0] a, b; cùng 1 khối always. always @(posedge clk) begin -Vídụ: Giá trị củaa, b bằng bao a <= b + 2; nhiêu sau 3 chu kỳ xung clk? b <= a * 3; end 24 Trường ĐH Bách Khoa TP.HCM
- IV. PHÉP GÁN (ASSIGNMENT) 4.4. Phép gán thủ tục blocking và non-blocking 26 Trường ĐH Bách Khoa TP.HCM
- V. TOÁN TỬ (OPERATOR) 5.1. Các dạng toán tử: • Arithmetic: + (cộng), - (trừ), * (nhân), / (chia), (mũ), % (số dư) • Bitwise: & (and), | (or), ~ (negate), ^ (xor), ^~ (xnor) • Reduction: assign q = &a, q = |(4'b0001) = 1, q = ^(4'b0111) = 1 • Logical: !, &&, ||, !=, (4'b1100) && (4'b0011) = 0 • Relational: a b, a = b, a ==b, a != b • Logical shift: > • Arithmetic shift: >> • Selection: assign q = c ? a : b • Concatenation: {a, b[3:2], c} = {a, b[3], b[2], c} = a 4-bit vector • Replication: 4{a} = {a, a, a, a}, {a, 3{b,c}} = {a, b, c, b, c, b, c} 28 Trường ĐH Bách Khoa TP.HCM
- V. TOÁN TỬ (OPERATOR) 5.2. Ví dụ: reg [5:0] A = 6′b101111; reg [5:0] B, C; B = A >> 2; // 6’b001011 B = A>>>2; // 6’b111011 C = A + B; // 6’b101010 C = A & B; // 6’b101011 C = {A[2:1], B[2:0]}; // 6’b011011 assign out = &A; // A[0]&A[1]&A[2] &A[3]&A[4]&A[5] = 0 assign out = (A[1]) ? ((A[0]) ? B[1] : B[2]) : B[0]; // = 1 C = out ? A : C; // 6′b101111 30 Trường ĐH Bách Khoa TP.HCM
- VI. PHÁT BIỂU CÓ ĐIỀU KIỆN 6.1. if-then-else: 32 Trường ĐH Bách Khoa TP.HCM
- VI. PHÁT BIỂU CÓ ĐIỀU KIỆN 6.2. Case: 34 Trường ĐH Bách Khoa TP.HCM
- VI. PHÁT BIỂU CÓ ĐIỀU KIỆN 6.3. Ví dụ: - Dùng phát biểu if-then-else module mux_4bits(y, a, b, c, d, sel); input [3:0] a, b, c, d; input [1:0] sel output [3:0] y; reg [3:0] y; always @ (a or b or c or d or sel) begin if (sel == 0) y = a; else if (sel == 1) y = b; else if (sel == 2) y = c; else if (sel == 3) y = d; else y = 4'bx; end endmodule 36 Trường ĐH Bách Khoa TP.HCM
- VI. PHÁT BIỂU CÓ ĐIỀU KIỆN 6.3. Ví dụ: -Thựchiệnsơđồsau dùng phát biểu if-then-else và Case 38 Trường ĐH Bách Khoa TP.HCM
- VI. PHÁT BIỂU CÓ ĐIỀU KIỆN 6.4. Mộtsố Flip-Flop tiêu biểu: -D Flip-Flop với Reset không đồng bộ: module dff (data, clk, reset, q); input data, clk, reset; output q; reg q; always @(posedge clk or negedge reset) if (~reset) q <= 1'b0; else q <= data; endmodule 40 Trường ĐH Bách Khoa TP.HCM
- VI. PHÁT BIỂU CÓ ĐIỀU KIỆN 6.4. Mộtsố Flip-Flop tiêu biểu: -D Flip-Flop với Preset, Reset không đồng bộ: module dff (data, clk, preset, reset, q); input data, clk, preset, reset; output q; reg q; always @ (posedge clk or negedge reset or posedge preset) if (~reset) q <= 1'b0; else if (preset) q <= 1'b1; else q <= data; endmodule 42 Trường ĐH Bách Khoa TP.HCM