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
BÀI 4: NGÔN NGỮ LẬP TRÌNH PHẦN CỨNG VERILOG HDL (PHẦN 2)
1
FPGA Class
30/05/2013
Nội dung chính
Hàm If Hàm case Máy trạng thái FSM Ví dụ thực hiện
2
FPGA Class
30/05/2013
Hàm If
Hàm If nằm trong cấu trúc
always
If (<điều kiện 1>) begin
Phải có nếu có nhiều dòng lệnh
else if (<điều kiện 2>) begin
Kết quả 1; end
Kết quả 1; end else begin
Phải có nếu là mạch tổ hợp hoặc là mạch tuần tự nhưng không muốn giữ lại giá trị cũ.
end
3
FPGA Class
30/05/2013
Kết quả khác;
Ví dụ hàm If
module example_1 (a, b, c, d, sel, y);
module example_1 (a, b, c, sel, y);
y = a;
y = a;
y = b;
y = b;
y = c;
y = c;
input a; input b; input c; input [1:0] sel; output reg [1:0] y; always @ (*) begin If (sel == 1’b00) else if (sel == 1’b01) else if (sel == 1’b10) end endmodule
y = d;
input a; input b; input c; input d; input [1:0] sel; output reg [1:0] y; always @ (*) begin If (sel == 1’b00) else if (sel == 1’b01) else if (sel == 1’b10) else end endmodule
Hàm if đầy đủ trường hợp
4
FPGA Class
30/05/2013
Hàm if không đầy đủ trường hợp phải chú ý đến nhánh else để tránh tạo chốt
Nội dung chính
Hàm If Hàm case Máy trạng thái FSM Ví dụ thực hiện
5
FPGA Class
30/05/2013
Hàm case và casex
case (<điều kiện tác động>)
Một hoặc nhiều tín hiệu ghép lại
Giá trị điều kiện là hằng số (chỉ là 1 hoặc 0)
Phải có nếu có nhiều dòng lệnh
Phải có nếu là mạch tổ hợp
default: begin
casex sử dụng như hàm case nhưng giá trị điều kiện có thể là “X” (don’t care – tùy định)
casex (<điều kiện tác động>)
endcase
6
FPGA Class
30/05/2013
Ví dụ hàm case
module example_1 (a, b, c, d, sel, y);
y);
input a; input b; input c; input d; input [1:0] sel; output reg [1:0] y; always @ (*) begin
input a; input b; input c; input [1:0] sel; output reg [1:0] y; always @ (*) begin case (sel)
2’b00: y = a; 2’b01: y = b; 2’b10: y = c; 2’b11: y = d;
2’b00: y = a; 2’b01: y = b; 2’b10: y = c;
case (sel) endcase
end endmodule
module example_1 (a, b, c, sel,
endcase end endmodule
7
FPGA Class
30/05/2013
Hàm case đầy đủ trường hợp Hàm case không đầy đủ trường hợp phải có default để tránh tạo chốt
So sánh If và case
Case sẽ tạo ra
mạch xử lý song song Tốc độ xử lý
nhanh.
If sẽ tạo ra mạch xử lý nối tiếp Tốc độ xử lý chậm. Diện tích có thể nhỏ hơn case.
Diện tích thường
lớn hơn If.
Điều này còn tùy
Mạch tạo bởi casex đôi khi tương đồng với hàm If.
vào trình tổng hợp sử dụng
8
FPGA Class
30/05/2013
Bài tập ví dụ tổng hợp
1. Diễn giải chức năng của
2. Xác định ngõ vào (tín hiệu
mạch?
vào) và ngõ ra (tín hiệu ra của mạch)? Từ đó vẽ sơ đồ chân tín hiệu.
1. Với If 2. Với Case
3. Dùng kết hợp assign và
always
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@
4. Đưa ra phương án kiểm tra
9
FPGA Class
30/05/2013
trên KIT DE1.
Máy trạng thái (FSM – Finite State Machine)
parameter
hai biến kiểu reg với state/current_state và next_state
Hoạt động theo xung clock
Mạch tổ hợp
Toàn bộ máy trạng thái là mạch tuần tự
10
FPGA Class
30/05/2013
Ví dụ máy trạng thái
11
FPGA Class
30/05/2013
KẾT THÚC BÀI 4
12
FPGA Class
30/05/2013