Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Đăng ký
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
wafer.jpg

Verilog căn bản: bài 5: Cấu trúc module

Email In PDF.
[​IMG]1, Giới thiệu
-- Khác với các ngôn ngữ lập trình C,C++… Verilog được cấu trúc từ các module giống như một chương trình chính (chương trình main) trong C,C++….một module tương đương với 1 block (1 khối chức năng) trong thiết kế. Giống như C, từ hàm main ta có thể tạo ra nhiều hàm con khác thì Verilog cũng vậy, một module chính (top module) có thể được tạo từ các module con khác.

2,Cấu trúc
-- Module có cấu trúc như sau:
Mã:
module tên_module (các cổng vào, ra);   input [msb:lsb] các cổng input;   output [msb:lsb] các cổng output;   inout [msb:lsb] các cổng vừa input vừa output;   ... các câu lệnh ... endmodule
**Các câu lệnh trên giải thích như sau:
- Dòng đầu tiên của một mô-đun khai báo tên và danh sách các cổng vào ra.Bạn phải khai báo đủ các cổng vào ra trong khối thiết kế nếu không khi chạy chương trình sẽ báo lỗi. Mỗi cổng được phân tách bằng dấu phẩy (,)
- Ba dòng tiếp theo là khai báo tất cả các cổng vào ra và độ rộng của của các cổng đó.Mặc định cổng vào ra sẽ có độ rộng là 1 bit.
- Sau khi khai báo các cổng chúng ta sẽ khai báo loại biến cho các cổng vào ra.Thường là reg và wire. Nếu không khai báo mặc định các cổng sẽ có dữ liệu là wire
- Các đầu vào là dạng wire khi dữ liệu được chốt bên ngoài module. Các đầu ra là dạng reg nếu các t/hiệu của chúng được chứa trong khối always hoặc initial.
- Các dòng sau là các câu lệnh ta viết để thực hiện một chức năng nào đó.
- Kết thúc một câu trúc module là một câu lệnh endmodule.
[​IMG]

**Quy định cách nối các cổng
[​IMG]

-inputs: bên ngoài luôn luôn khai báo là biến loại net, bên trong có thể khai báo biến net hoặc biến reg .
-outputs: Có thể khai báo loại net hoặc reg tùy vào thiết kế của mình.
- inouts: bên trong hoặc bên ngoài luôn luôn khai báo biến net.
- Độ rộng phải phải phù hợp: các cổng bên trong và ngoài phải phù hợp độ rộng với nhau.

3,Cách gọi Module con
[​IMG]

-- Các module có thể được khởi tạo từ bên trong mô-đun khác. Khi một mô-đun được khởi tạo, kết nối đến các cổng của các module phải được xác định. Có hai cách gọi để kết nối cổng của một module là: kết nối theo địa chỉ và kết nối theo tên.
++ Kết nối theo địa chỉ: thứ tự các cổng trong module chính phải phù hợp với thứ tự xuất hiện các cổng trong module con.
++ Kết nói theo tên: không cần chính xác về thứ tự và có quy ước sẵn.Các bạn nhìn ví dụ sẽ hiểu..hi
-- Hai loại kết nối cổng của module không được lẫn lộn, kết nối tới cổng đặt thù của thể hiện module sẽ hoặc tất cả theo thứ tự hoặc tất cả theo tên.

**Ví dụ về kết nối theo tên:
-- Cú pháp:
Mã:
// module con module dff (clk, d, q); input clk, d; output q; reg q; always @(posedge clk) q = d; endmodule  // module chính module top; reg data, clock; wire q_out, net_1;  dff inst_1 (.d(data), .q(net_1), .clk(clock));    // cách gọi module con theo tên  dff inst_2 (.clk(clock), .d(net_1), .q(q_out)); endmodule 
** Ví dụ về kết nối theo địa chỉ:
Mã:
// module con module dff (clk, d, q); input clk, d; output q; reg q; always @(posedge clk) q = d; endmodule  // module chính module top; reg data, clock; wire q_out, net_1;   dff inst_1 (clock, data, net_1);   dff inst_2 (clock, net_1, q_out); endmodule 
minion_bigminion_big
 
                                                                     Bạn có đam mê ngành thiết kế vi mạch

                       Liên hệ đăng ký tham gia Hội Thảo & Khóa Học Thiết Kế Vi Mạch

                                                                HotLine: 0972 800 931 Ms Duyên             
 

Related Articles

Chat Zalo