NGÔN NGỮ LẬP TRÌNH PHẦN CỨNG VERILOG HDL PHẦN 2 BÀI 4: 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... Case sẽ tạo ra mạch xử lý song
Trang 1NGÔN NGỮ LẬP TRÌNH PHẦN CỨNG VERILOG HDL (PHẦN 2)
BÀI 4:
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 2Nội dung chính
Hàm case
Máy trạng thái FSM
Ví dụ thực hiện
Trang 3Hàm If
Hàm If nằm trong cấu trúc
always
If ( <điều kiện 1> ) begin
Kết quả 1 ;
end
else if ( <điều kiện 2> ) begin
Kết quả 1 ;
end
else begin
Kết quả khác ;
Phải có nếu có nhiều dòng lệnh
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ũ
Trang 4Ví dụ hàm If
module example_1 (a, b, c, d, sel, y);
input a;
input b;
input c;
input d;
input [1:0] sel;
output reg [1:0] y;
always @ (*) begin
If (sel == 1’b00)
y = a;
else if (sel == 1’b01)
y = b;
else if (sel == 1’b10)
y = c;
else
y = d;
end
endmodule
module example_1 (a, b, c, sel, y);
input a;
input b;
input c;
input [1:0] sel;
output reg [1:0] y;
always @ (*) begin
If (sel == 1’b00)
y = a;
else if (sel == 1’b01)
y = b;
else if (sel == 1’b10)
y = c;
end
endmodule
Hàm if đầy đủ trường hợp Hàm if không đầy đủ trường hợp phải chú ý đến nhánh else để tránh tạo
chốt
Trang 5Nội dung chính
Hàm If
Máy trạng thái FSM
Ví dụ thực hiện
Trang 6Hàm case và casex
case ( <điều kiện tác động> )
<Trường hợp 1> : begin
<Giá trị ngõ ra>;
end
<Trường hợp 2> : begin
<Giá trị ngõ ra>;
end
default : begin
<Giá trị ngõ ra>;
end
endcase
Phải có nếu có nhiều dòng lệnh Một hoặc nhiều tín hiệu ghép lại
Phải có nếu là mạch tổ hợp
Giá trị điều kiện là hằng số (chỉ
là 1 hoặc 0)
casex (<điều kiện tác động>)
endcase
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)
Trang 7Ví dụ hàm case
module example_1 (a, b, c, d, sel, y);
input a;
input b;
input c;
input d;
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;
endcase
end
endmodule
module example_1 (a, b, c, sel, y);
case (sel)
2’b00: y = a;
2’b01: y = b;
2’b10: y = c;
endcase
endmodule
Hàm case đầy đủ trường hợp Hàm case không đầy đủ trường hợp phải có tránh tạo chốt
Trang 8So sánh If và case
If sẽ tạo ra mạch
xử lý nối tiếp
Diện tích có thể
nhỏ hơn case
Case sẽ tạo ra mạch xử lý song song
nhanh
lớn hơn If
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
Trang 9Bài tập ví dụ tổng hợp
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
Trang 10Máy trạng thái (FSM – Finite State
Machine)
<Khai báo hằng số trạng thái>
<Khai báo biến trạng thái>
<Khối always chuyển trạng thái>
ra và điều kiện chuyển trạng
thái>
parameter <tên trạng thái> = <hăng số gán>; 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ự
Trang 11Ví dụ máy trạng thái
Trang 12KẾT THÚC BÀI 4