GIỚI THIỆU VỀ CẤU TẠO MODULE TRONG VERILOG
Hình trên thể hiện một module UART Receive cái này vẽ trên Visio nha. Nếu học thêm Visio nữa thì tốt. Module bao gồm các chân vào (input) ra (output) gọi là các port. Các chân được kết nối vào thân module UART Receive. Tạo thành một khối module.
- Thân module
Trong thân module gồm các cổng and or xor not và các cell của công cụ… kết hợp để tạo thành một mạch số đảm nhiệm một chức năng được đặt ra trước khi thiết kế.
Có 3 cách trừu tượng để mô tả chức năng:
+ Mức cổng (gate level).
+ Mức luồng dữ liệu (Dataflow level)
+ Mức hành vi (Behavioral or algorithmic level)
Để hiểu rõ hơn các cách mô tả này các bạn có thể tham khảo qua bài viết của anh Quân ở ICDREC. Mình học hỏi từ anh Quân rất nhiều đấy ^^.
- Các thành phần module trong Verilog
Hình trên diễn tả rõ ràng cấu trúc của module trong Verilog bao gồm các khai báo port i/o, các parametter các biến… Trong đó quan trọng là các khối thể hiện chức năng mạch theo các cách mô tả riêng lẽ hoặc tổng hợp cả 3 cách mô tả.
Lưu ý: các khối initial hay task hệ thống chỉ sử dụng trong mô phỏng, không sử dụng cho các module trong Verilog để mô tả chức năng mạch. Cụ thể như thế nào phần sau mình sẽ trình bày rõ hơn trong các bài sau và trong các video.
- Khai báo các port
Cú pháp- input [kích thước]ten_input;//khai báo ngõ vào
- output [kích thước]ten_output;//khai báo ngõ ra
- inout [kích thước]ten_inout;//khai báo ngõ 2 chiều vào ra.
Lưu ý: hạn chế sử dụng port inout nha.
Khai báo kích thước port (size_of_port)
- [size_of_port] = [msb:lsb] = [lsb:msb]
- msb là bit có trọng số lớn nhất.
- lsb là bit có trọng số nhỏ nhất.
Kiểu mặc định của port là kiểu wire.
Nếu các output lưu trữ giá trị của chúng thì khai báo kiểu reg.
Kiểu input, inout không được khai báo kiểu reg.
Kiểu inout chỉ khai báo trong top-level module.
Ví dụ:
Khai báo ngõ vào 3 bít có tên là data: input [2:0]data;
Có gì không hiểu cứ hỏi nha.
- Nguyên tắc kết nối port
Hình trên miêu tả cách kết nối port của module trong Verilog. Các bạn đọc ví dụ dưới đây sẽ dễ hiểu hơn.
Ví dụ:
Kết nối port không hợp lệ trong module Top. Giả sử ở đây module top gọi module con là fulladder.
- module Top;
- // Bat dau khai cac bien ket noi
- reg [3:0]a, b; reg cin;
- reg [3:0]sum; wire c_out;
- // The hien fulladd4 la fa0
- fulladd4 fa0(sum, c_out, a, b,cin);
- // ket noi sum khong hop le
- // vi sum khai bao la kieu reg
- ... < tac nhan kich thich > …
- endmodule
- Các kiểu kết nối port
Khai báo module fulladd4 như sau
– module fulladd4(sum, c_out, a, b, cin);
Cú pháp:
- Tên_module_được_gọi tên_module_mình_đặt(Kết nối chân module);
Có 2 cách kết nối chân module trong Verilog:
Kết nối theo thứ tự.
Các port được kết nối sẽ xuất hiện trong thể hiện module theo đúng thứ tự như trong danh sách port trong định nghĩa module.
- - fulladd4 fa0(sum, c_out, a, b, cin); // Kết nối đầy đủ
- - fulladd4 fa0(sum, , a, b, cin); // Để hở port c_out
Kết nối theo tên.
Các tín hiệu kết nối xuất hiện trong thể hiện module có thứ tự bất kỳ, tên port không được thay đổi.
– fulladd4 fa0(.sum(SUM), .b(B), .a(A), .c_in(cin),.c_out(C_OUT)); // Thay đổi vị trí c_out và a
Nếu không kết nối các port thì để hở. // Để hở port c_out
– fulladd4 fa0(.sum(SUM), .b(B), .a(A), .c_out(), .c_in(cin));
Ưu và nhược điểm của 2 cách nối module trong Verilog:
+ Nối theo vị trí ngắn gọn, khó khăn trong việc mở rộng thiết kế. Như thêm các chân tín hiệu phải ghi đúng vị trí trong module…
+ Nối theo tên không cần quan tâm đến vị trí, dễ dàng mở rộng thiết kế, dài dòng.
Theo http://laptrinhvnc.com/
Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn
đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON
HotLine: 0972 800 931 or 0938 838 404 Ms Duyên