Kiến thức cơ bản

Cách viết một module phần cứng bằng Verilog

Cách viết một module phần cứng bằng Verilog

Cách khai báo một module verilog

 

 Để khai báo tên và phạm vi module, verilog cung cấp cú pháp như sau:

module module_name ( // <-- Module bắt đầu từ đây. Tên của module là module_name.
   port_a,
   port_b,
   port_c 
);

input [7:0] port_a; // <-- [7:0] : chỉ độ rộng của đầu vào port_a là 8 bits
input [7:0] port_b; // <-- [7:0] : chỉ độ rộng của đầu vào port_b là 8 bits
output      port_c; // <--       : chỉ độ rộng của đầu ra  port_c là 1 bit

wire [7:0] port_a;  // khai báo đường net để nối port_a vào logic bên trong
wire [7:0] port_b;  // khai báo đường net để nối port_b vào logic bên trong
wire       port_c;  // khai báo đường net để nối port_c ra bên ngoài module

// chức năng logic
assign port_c = ( port_a > port_b ) ? 1'b1 : 1'b0;

endmodule // <-- Module kết thúc tại đây.

// Chú ý: 
// 1. Ký tự "//" để bắt đầu 1 bình luận, chú thích nào đó ngoài code
// các port ( cổng ) của module được ngăn cách nhau bằng dấu ","
// riêng port cuối cùng thì không cần thêm dấu "," phía sau.

Dạng sơ đồ khối của module trên ( chạy từ Vivado )

Module dạng block

 

 + Mỗi module của verilog thường được viết trong 1 tập tin "filename.v". Thông thường, "filename" sẽ giống với "module_name". Ví dụ trong trường hợp trên thì module "module_name" sẽ được viết trong file "module_name.v".

+ Bắt đầu mỗi module, trước khi đi vào phần module, thường sẽ có thêm phần mô tả về lịch sử thiết kế của module, giới thiệu sơ qua phần chức năng, người tạo module. Điều này sẽ giúp cho người đọc khác nắm được khái quát về module và quá trình chỉnh sửa của nó.

 

  Nếu bạn có thắc mắc, hãy để lại comment bên dưới ! Cảm ơn bạn đã quan tâm !

 -----------------------------------------------------------------

 

 Nếu khai báo output trước rồi mới đến input có được không ?

 Được. Nhưng để cho dễ đọc và trình tự được bố trí theo thứ tự in/out cũng tiện cho quá trình debug

Có cần thiết phải khai báo wire cho tất cả input không ?

 Một số phần mềm, trình biên dịch hoặc trình mô phỏng có thể tự hiểu được và tự sinh ra wire cho tất cả tín hiệu input. Nhưng Degic.vn khuyến cáo các bạn khai báo toàn bộ wire tương ứng cho các đầu vào của module.

 Số dòng code tối đa cho một module là bao nhiêu ?

 Về lý thuyết thì không có hạn chế. Tùy vào một số phần mềm phiên bản thử nghiệm hoặc dùng cho sinh viên, có thể có một giới hạn nào đó về số lượng dòng code.

 


http://res.cloudinary.com/df1s0wur2/image/upload/c_scale,w_150/v1501865068/Degic_Center_bcyf3d.png