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

: begin  ;  end

Phải có nếu là mạch tổ hợp

: begin  ;  end

 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>)

;  end  endcase

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