Điều khiển nhúng - Chương 2: 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ấ

pdf 43 trang dienloan 5260
Bạn đang xem 20 trang mẫu của tài liệu "Điều khiển nhúng - Chương 2: 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

Tóm tắt nội dung tài liệu: Điều khiển nhúng - Chương 2: Ngôn ngữ Verilog

Điều khiển nhúng - Chương 2: Ngôn ngữ Verilog
1NGÔN NGỮ VERILOG
Chương 2
2I. GIỚI THIỆU
Trường ĐH Bách Khoa TP.HCM
1.1. 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ấp.
1950’s 1980’s
3I. GIỚI THIỆU
Trường ĐH Bách Khoa TP.HCM
1.1. Ngôn ngữ mô tả phần cứng HDL
(Hardware Description Language)
- Thiết kế mạch số (1995’s ->): vẽ
mạch schematic ->... hoàn tất
- Hai ngôn ngữ phổ biến: Verilog
HDL (1984) và VHDL (1980).
- Được sử dụng rộng rãi trong thiết kế
và mô phỏng mạch số ở mức độ
thanh ghi (register-transfer level).
- Một thiết kế HDL bao gồm nhiều
module, mỗi module chứa nhiều
phân cấp và giao tiếp với các module 
khác thông qua tập input, output, và
bidirectional port.
1995’s
4I. GIỚI THIỆU
Trường ĐH Bách Khoa TP.HCM
1.2. Ưu điểm HDL so với Schematic:
- Xây dựng và lưu trữ 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ết HDL, vẽ sơ đồ
• Synthesis: lựa chọn phần tử, tối
ưu logic, ước lượng thời gian
• Implementation: gán chân, lập
trình vào FPGA
- Dễ dàng thay đổi, chỉnh sửa thiết kế
mà không cần thay đổi phần cứng.
- Đáp ứng các yêu cầu thiết kế phức
tạp
5II. THIẾT KẾ PHÂN CẤP
Trường ĐH Bách Khoa TP.HCM
2.1. Các mô tả (abstraction) 
trong thiết kế phần cứ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).
6II. THIẾT KẾ PHÂN CẤP
Trường ĐH Bách Khoa TP.HCM
2.1. Các mô tả (abstraction) 
trong thiết kế phần cứ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)
7II. THIẾT KẾ PHÂN CẤP
Trường ĐH Bách Khoa TP.HCM
2.2. Khác nhau giữa Mô tả cấu
trúc với Mô tả hành vi:
- Mô tả hành vi (Behavioral 
modeling): diễn tả chuyện gì xảy
ra với Q, Qbar theo hàm của
Rbar, Sbar.
- Mô tả cấu trúc (Structural 
modeling): diễn tả chuyện gì xảy
ra với Q, Qbar theo hàm của 1 
netlist gồm của các phần tử (các
cổng) liên kết với nhau.
- Trong Verilog, một module có
thể diễn đạt bằng cảMô tả cấu
trúc và Mô tả hành vi
8II. THIẾT KẾ PHÂN CẤP
Trường ĐH Bách Khoa TP.HCM
2.3. Ví dụ: Mô tả hành vi
9II. THIẾT KẾ PHÂN CẤP
Trường ĐH Bách Khoa TP.HCM
2.3. Ví dụ: Mô tả cấu trúc
10
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
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ĩa là thi công đúng
11
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.1. Tổng hợp (Synthesis) và Mô phỏng (Simulation)
12
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.2. Module
module name(portlist);
port declarations;
parameter declarations;
wire declarations;
reg declarations;
variable declarations;
module instantiations;
dataflow statements;
always blocks;
initial blocks;
tasks and functions;
endmodule
-> tên module (danh sách port)
-> hướng của port (input, output, bidir)
-> tham số, khai báo module khác
-> tín hiệu kết nối cục bộ
-> lưu trữ cục bộ, biến cục bộ
-> lưu trữ cục bộ trong module
-> mô tả cấu trúc
-> mô tả hành vi
-> mô tả hành vi
-> mô tả hành vi
13
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.2. Module – Ví dụ 1
module name(portlist);
port declarations;
parameter declarations;
wire declarations;
reg declarations;
variable declarations;
module instantiations;
dataflow statements;
always blocks;
initial blocks;
tasks and functions;
endmodule
module or_nand_3 (enable, x1, x2, x3, x4, y);
input enable, x1, x2, x3, x4;
output y;
reg y;
always @ (enable or x1 or x2 or x3 or x4)
if (enable)
y = !((x1 | x2) & (x3 | x4));
else
y = 1; // operand is a constant.
endmodule
14
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.2. Module – Ví dụ 1
module name(portlist);
port declarations;
parameter declarations;
wire declarations;
reg declarations;
variable declarations;
module instantiations;
dataflow statements;
always blocks;
initial blocks;
tasks and functions;
endmodule
module or_nand_4 (enable, x1, x2, x3, x4, y);
input enable, x1, x2, x3, x4;
output y;
assign y = or_nand(enable, x1, x2, x3, x4);
function or_nand;
input enable, x1, x2, x3, x4; 
begin
or_nand = ~(enable & (x1 | x2) & (x3 | 
x4));
end
endfunction
endmodule
15
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.2. Module – Ví dụ 2
module name(portlist);
port declarations;
parameter declarations;
wire declarations;
reg declarations;
variable declarations;
module instantiations;
dataflow statements;
always blocks;
initial blocks;
tasks and functions;
endmodule
module or_nand_5 (enable, x1, x2, x3, x4, y);
input enable, x1, x2, x3, x4;
output y;
reg y;
always @ (enable or x1 or x2 or x3 or x4) 
or_nand (enable, x1, x2, x3, x4, y);
task or_nand;
input enable, x1, x2, x3, x4;
output y1;
begin
y1 = !(enable & (x1 | x2) & (x3 | x4));
end
endtask
endmodule
16
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.3. Giá trị dữ liệu (Data value)
- 4 loại giá trị:
• 0: mức thấp, 1: mức cao
• Z: hi-Z, X: unkown
- Khi khởi tạo, các biến có giá trị X
- Gán giá 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 : 00011000
• 5'O36 : 11011
• 8'hz : zzzzzzzz
17
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.3. Loại dữ liệu (Data type)
- 2 loại dữ liệu: wire và reg
• wire: là giá trị được gán liên tục (continuously assigned), không có
khả năng nhớ, không lưu trữ.
• reg (reg, integer): là giá trị gán thủ tục (procedurally assigned), có khả
năng nhớ, lưu trữ
- Mô tả cấu trúc có thể sử dụng dữ liệu wire, không sử dụng dữ liệu reg
- Mô tả hành vi có thể sử dụng dữ liệu reg (trong cấu trúc initial và always), 
không sử dụng dữ liệu wire
- Ví dụ:
wire Reset; // 1-bit wire reg signed [3:0] counter; // 4-bit register
wire [7:0] Addr; // 8-bit wire integer cla; // maximum 32-bit 
18
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.3. Loại dữ liệu (Data type)
19
III. VERILOG HDL
Trường ĐH Bách Khoa TP.HCM
3.4. Ví dụ: Viết module cho các mạch sau bằng Verilog:
20
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
4.1. Khối initial và always
- Mô tả hành vi
- Khối initial chỉ thực hiện một lần khi
khởi động (khi bật nguồn)
- Khối always thực hiện lặp lại liên tục
• always@(a or b)
-> any changes in a or b
• always@(posedge a)
-> a transitions from 0 to 1 
• always@(negedge a) 
-> a transitions from 1 to 0
• always@*
-> any changes in “inputs”
module initalways (clk);
reg [7:0] a;
reg b;
initial
begin
a = 0;
b = 0;
end
always @ (posedge clk)
begin
a = a + 1;
b = 1;
end
endmodule;
21
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
4.2. Phép gán liên tục (continuous 
assignment)
- Cú pháp:
assign LHS = RHS;
- LHS : kiểu dữ liệu bắt buộc là wire.
- RHS: kiểu dữ liệu có thể là wire, 
reg, hằng số, biểu thức
- Giá trị của RHS luôn luôn được gán
cho LHS
- Tất cả các phép gán hoạt động đồng
thời
- Thường sử dụng trong kết nối các
cổng logic
// example 1
assign out = in1 ^ in2;
// example 2
wire product1, product2;
assign product1 = in1 & !in2;
assign product2 = !in1 & in2;// 
assign out = product1 | product2;
// example 3
assign out = (in1 != in2);
// example 4
assign out = in1 ? (!in2) : (in2);
22
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
4.2. Phép gán liên tục (continuous 
assignment)
- Cú pháp:
assign LHS = RHS;
- LHS : kiểu dữ liệu bắt buộc là wire.
- RHS: kiểu dữ liệu có thể là wire, 
reg, hằng số, biểu thức
- Giá trị của RHS luôn luôn được gán
cho LHS
- Tất cả các phép gán hoạt động đồng
thời, chỉ phụ thuộc netlist
- Mỗi ngõ ra chỉ được gán 1 lần
- Thường sử dụng trong kết nối các
cổng logic
module nand(q1, q2, a, b)
input a, b;
output q1, q2;
assign q1 = ~(a | b);
assign q2 = ~(a & b);
endmodule
assign {q1,q2} = {~(a | b),~(a & b)};
23
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
4.3. Phép gán thủ tục (procedural 
assignment)
- Cú pháp:
LHS = RHS; // blocking
LHS <= RHS; // non-blocking
- LHS : kiểu dữ liệu bắt buộc là reg.
- RHS: kiểu dữ liệu có thể là wire, 
reg, hằng số, biểu thức
- Thực thi ngay sau khi một sự kiện
xảy ra
- Nếu có nhiều phép gán trong cùng
1 sự kiện thì sử dụng (begin, end)
module nand(q, a, b) //Continuous assignment
output q;
input a, b;
assign q = ~(a | b);
endmodule
module nand(q, a, b) // Procedural assignment
output q;
reg q;
input a, b;
always @(a or b)
q = ~(a | b);
endmodule
24
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
4.4. Phép gán thủ tục blocking và
non-blocking
- Blocking: phép gán của hàng lệnh
trên phải được hoàn thành trước
khi thực hiện hàng lệnh bên dưới.
- Non-blocking: các biến dữ liệu chỉ
được cập nhật sau khi ra khỏi 1 
khối.
- Trong thực tế, không được gán
blocking và non-blocking trong
cùng 1 khối always.
- Ví dụ: Giá trị của a, b bằng bao
nhiêu sau 3 chu kỳ xung clk?
// Blocking
reg [7:0] a, b; 
initial b = 0;
initial a = 4;
always @(posedge clk) begin
a = b + 2;
b = a * 3;
end
// Non-blocking
reg [7:0] a, b; 
always @(posedge clk) begin
a <= b + 2;
b <= a * 3;
end
25
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
4.4. Phép gán thủ tục blocking và non-blocking
26
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
4.4. Phép gán thủ tục blocking và non-blocking
27
IV. PHÉP GÁN (ASSIGNMENT)
Trường ĐH Bách Khoa TP.HCM
28
V. TOÁN TỬ (OPERATOR)
Trường ĐH Bách Khoa TP.HCM
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}
29
V. TOÁN TỬ (OPERATOR)
Trường ĐH Bách Khoa TP.HCM
5.2. Ví dụ:
reg [5:0] A = 6′b101111;
reg [5:0] B, C;
B = A >> 2;
B = A>>>2; gia su reg signed [5:0] B;
C = A + B;
C = A & B;
C = {A[2:1], B[2:0]};
assign out = &A;
assign out = A[1] ? (A[0] ? B[1] : B[2]) : B[0];
C = out ? A : C;
30
V. TOÁN TỬ (OPERATOR)
Trường ĐH Bách Khoa TP.HCM
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
31
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.1. if-then-else:
32
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.1. if-then-else:
33
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.2. Case:
34
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.2. Case:
35
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.3. Ví dụ: - Dùng toán hạng điều kiện:
module mux_4bits(y, a, b, c, d, sel);
input [3:0] a, b, c, d;
input [1:0] sel;
output [3:0] y;
assign y =
(sel == 0) ? a :
(sel == 1) ? b :
(sel == 2) ? c :
(sel == 3) ? d : 4'bx;
endmodule
36
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
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
37
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.3. Ví dụ: - Dùng phát biểu Case
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)
case (sel)
0: y = a;
1: y = b;
2: y = c;
3: y = d;
default: y = 4'bx;
endcase
endmodule
38
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.3. Ví dụ: 
- Thực hiện sơ đồ sau dùng phát biểu if-then-else và Case
39
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.4. Một số Flip-Flop tiêu biểu: 
- D Flip-Flop:
module dff (data, clk, q);
input data, clk;
output q;
reg q; 
always @(posedge clk)
q <= data; 
endmodule
40
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.4. Một số 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
41
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.4. Một số Flip-Flop tiêu biểu: 
- D Flip-Flop với Preset không đồng bộ:
module dff (data, clk, preset, q);
input data, clk, preset;
output q;
reg q; 
always @(posedge clk or negedge preset)
if (~preset)
q <= 1'b1;
else
q <= data;
endmodule
42
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.4. Một số 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
43
VI. PHÁT BIỂU CÓ ĐIỀU KIỆN
Trường ĐH Bách Khoa TP.HCM
6.4. Một số Flip-Flop tiêu biểu: 

File đính kèm:

  • pdfdieu_khien_nhung_chuong_2_ngon_ngu_verilog.pdf