Tải bản đầy đủ (.ppt) (35 trang)

Các module trong verilog

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (170.05 KB, 35 trang )

Nội dung trình bày
1. Giới thiệu Verilog
2. Ví dụ mở đầu
3. Khái niệm cơ bản
4. Module, Port
5. Ví dụ ứng dụng
6. Tổ chức chương trình
7. Phương pháp thiết kế
4. Module, Port

Cấu trúc module
1)module <ten_module>(<danh sách cổng>);
2)// Khối khai báo: input, output, inout
3)// Khối khai báo biến: wire, reg …
4)// Khối định chỉ định liên tiếp: assign
5)// Khối lệnh: initial, always
6)endmodule
4. Module, Port

Ví dụ : mô phỏng mạch cộng 2 bit
1) module full_adder( a, b, cin, s, cout );
2) input a, b, cin;
3) output s, cout;
4) assign s = a ^ b ^ cin;
5) assign cout = (a&b) | (cin & (a|b));
6) endmodule
4. Module, Port
1) module full_adder( a, b, cin, s, cout );

Bắt đầu bằng từ khóa “module”



Tên module: full_adder

Danh sách cổng: ( a, b, cin, s, cout ) là tất cả
các cổng vào ra của mạch điện được mô
phỏng
4. Module, Port
2) input a, b, cin;
3) output s, cout;

Định nghĩa các cổng trong danh sách là cổng
vào, hay cổng ra

Dùng từ khóa

input: định nghĩa cổng vào

output: định nghĩa cổng ra

inout: định nghĩa cổng vừa vào, vừa ra
4. Module, Port
4) assign s = a ^ b ^ cin;
5) assign cout = (a&b) | (cin & (a|b));

Thực hiện tính toán và gán

Có từ khóa assign trước phép gán chứa biểu
thức bên vế phải
4. Module, Port
6) endmodule


Từ khóa kết thúc module
4. Module, Port

Chi tiết: Khối khai báo: input, output, inout

Input [msb:lsb] <danh sách ngõ vào>;

Output [msb:lsb] <danh sách ngõ ra>

Inout [ msb:lsb ] <danh sách vào_ra>
module T_FF(clk, rs, q);
input clk, rs;
output q;
endmodule
4. Module, Port

Quy tắc nối cổng ngoài với cổng trong

input phải kiểu reg, có thể nối với cổng kiểu reg, net

output phải kiểu reg hoặc net, nối với cổng kiểu net

inout phải kiểu net, nối với cổng kiểu net
4. Module, Port

Chi tiết: Khối khai báo: input, output, inout

Khai báo kiểu dữ liệu cho các cổng trong danh sách.
Mặc định là kiểu wire

module T_FF(clk, rs, q);
input clk, rs;
output q;
wire clk, rs;
reg q;
endmodule
4. Module, Port

Chi tiết: Khối chỉ định liên tiếp: assign

Để gán giá trị lên nets, thường nằm ngoài khối
initial và always

Thứ tự các lệnh gán không quan trọng

Cú pháp: assign <tên biến>=<biểuthức>

Wire [ 1:0 ] a = 2’b 01;

Assign b = c &d;

Assign d = x | y;
4. Module, Port

Chi tiết: Khối always

Là khối chứa các lệnh sẽ được thực hiện lặp lại
liên tục, vế phải phép gán có thay đổi giá trị
thì vế trái sẽ thay đổi theo ngay


Khối always thực hiện bằng mức: mức lên
hoặc mức xuống

Có thể có nhiều khối always trong một module
4. Module, Port

Chi tiết: Khối always

Always @(<điều kiện > or …)

Begin

… các lệnh…

end
Ví dụ:
always @
(posedge clk)
begin : D_FF
if (reset == 1)
q <= 0;
else
q <=d;
end end
4. Module, Port

Chi tiết: Khối initial

Giống khối always, nhưng khối lệnh chỉ thực hiện
một lần


Initial

Begin

… các lệnh…

end
initial
begin
clk = 0;
reset = 0;
enable = 0;
data = 0;
end
4. Module, Port

Chi tiết

Khối lệnh phải đặt trong begin…end

Các lệnh rẽ nhánh và lặp thì giống như NNLT C

if … else

case

for

while


forever

repeat
4. Module, Port

Lệnh if…else
if (biểu thức)
Begin
… câu lệnh…
end
else
Begin
… câu lệnh …
end
4. Module, Port

Ví dụ: if…else
if (reset == 1'b0)
counter <= 4'b0000;
else
if (enable == 1'b1 && up_en == 1'b1)
counter <= counter + 1'b1;
4. Module, Port

Lệnh case
Case (biểu thức)
Case 1:
Begin
… câu lệnh…

end
Case 2:
Begin
… câu lệnh…
end

default:
begin
… câu lệnh …
end
endcase

Ví dụ: case
module mux (a,b,c,d,sel,y);
input a, b, c, d;
input [1:0] sel;
output y;
reg y;
always @ (a or b or c or d or sel)
case (sel)
0 : y = a;
1 : y = b;
2 : y = c;
3 : y = d;
default : $display("Error in SEL");
endcase
endmodule
4. Module, Port

Lệnh for

For (biến đếm= giá trị; biến đếm </ <=/ >/ >=
giá trị; biến đếm = biến đếm +/- giá trị)
begin
… các lệnh…
end
4. Module, Port

Ví dụ: for
integer j;
For (j = 0; j<=7; j = j+1)
Begin
c[j] = a[j] & b[j];
d[j] = a[j] | b[j];
end
4. Module, Port

Lệnh while
While (biểu thức)
Begin
… các lệnh…
end
4. Module, Port

Ví dụ: while
while (data[0] == 0);
begin
loc = loc + 1;
data = data << 1;
end
4. Module, Port


Lệnh forever

Cú pháp: forever <lệnh>

Ví dụ:
initial begin
clk = 0;
forever #5 clk = !clk;
end

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×