Chương3 Loại dữ liệu trong Verilog
3.6 Khai báo port
3.6.1 Giới thiệu
Ta phải khai báo thật tường minh về chiều (input, output hay bidirectional) của mỗi port xuất hiện trong danh sách khai báo port. Trong Verilog ñịnh nghĩa ba loại port khác nhau, đó là input, output và inout. Loại dữ liệu của port có thể là net hoặc reg. Loai dữ liệu reg chỉ có thể xuất hiện
ở port output. Hằng số và biểu thức ln nằm phía dưới khai báo port.
input: tất cả port input của một module ñược khai báo với một phát biểu input. Loại dữ liệu mặc ñịnh của input port là wire và ñược ñiều khiển bởi cú pháp của wire. Ta có thể khai báo ñộ rộng của một input như một
mảng (vector) của những tín hiệu, giống như input b trong ví dụ dưới. Những phát biểu input có thể xuất hiện ở bất cứ vị trí nào trong mơ tả thiết kế nhưng chúng phải ñược khai báo trước khi chúng ñược sử dụng. Ví dụ:
input a; input [2:0] b;
output: tất cả port output của một module ñược khai báo với một
Lâm Đức Khải University of Information Technology Page 58 wor, hoặc tri ñược khai báo, thì output port sẽ có loại dữ liệu mặc định là
wire và nó cũng được điều khiển bởi cú pháp của wire. Một phát biểu
output có thể xuất hiện ở bất cứ vị trí nào trong mơ tả thiết kế, nhưng nó
phải được khai báo trước khi được sử dụng. Ta có thể khai báo ñộ rộng của một output như một mảng (vector) của những tín hiệu. Nếu ta sử dụng loại dữ liệu reg để khai báo cho output thì reg phải có cùng độ rộng với độ rộng của mảng (vector) của tín hiệu. Ví dụ:
output a; output [2:0] b; reg [2:0] b;
inout: ta có thể khai báo port hai chiều (bidirectional) với phát biểu inout. Một port inout có loại dữ liệu là wire và được điều khiển bởi cú pháp của wire. Ta phải khai báo port inout trước khi nó được sử dụng. Ví dụ:
inout a: inout [2:0] b;
3.6.2 Ví dụ
Ví dụ 2.11:
module fulladder(cOut, sum, aIn, bIn, cIn); input aIn, bIn, cIn;
Lâm Đức Khải University of Information Technology Page 59 wire aIn, bIn, cIn;
reg cOut, sum; … Endmodule 3.6.3 Cú pháp list_of_ports ::= ( port {,port }) port ::= [port_expression] | . port_identifier ( [port_expression] ) port_expression ::= port_reference | { port_reference ,port_reference } port_reference ::= port_identifier | port_identifier[ constant_expression ]
| port_identifier [ msb_constant_expression :lsb_constant_expression ]
Lâm Đức Khải University of Information Technology Page 60