
- Task hệ thống
Các task hệ thống giúp cho người lập trình có thể dễ dàng kiểm tra thiết kế thông qua mô phỏng. Định dạng cho task hệ thống: $<từ khóa>
a) Hiển thị thông tin
$display(“Chuổi hiển thị_Các định dạng hiển thị”,s1,s2,s3,…,sn);
Trong đó s1,s2,…,sn có thể là các biến hoặc biểu thức.
$display không có đối số sẽ tạo ra những dòng mới
Bảng định dạng hiển thị trong task display:
Ví dụ:
Hiển thị chuỗi trong dấu ngoặc kép
- $display(“Hello Verilog World”); //-- Hello Verilog World
Hiển thị giá trị thời gian mô phỏng hiện hành (230)
- $display($time);
- -- 230
Hiển thị giá trị 1fe00f0001c của virtual_addr và thời gian 210
- $display(“At time %d virtual address is %h”, $time, virtual_addr );
- // At time 210 virtual address is 1fe00f0001c
Hiển thị giá trị 5 của port_id theo dạng nhị phân
- $display(“ID of the port is %b”, port_id );
- // ID of the port is 00101
b) Giám sát thông tin
$monitor(“Chuỗi hiển thị”,s1,s2,s3…,sn);
Trong đó s1,s2,…,sn là các biến hoặc biểu thức
+ $monitor sẽ hiển thị giá trị khi giá trị thay đổi;
+ $monitor chỉ được gọi 1 lần, nếu gọi nhiều lần thì $monitor sau cùng sẽ được thực hiện.
Các định dạng hiển thị thì vẫn giống với task display
Ví dụ:
Giám sát thời gian và giá trị của tín hiệu clock và reset.
Clock lật sau mỗi 5 đơn vị thời gian và reset xuống thấp ở thời điểm 10 đơn vị thời gian
- initial begin
- $monitor($time, “Value of signals clock = %b reset = %b ”,clock, reset);
- end
Giá trị hiển thị của phát biểu $monitor
— 0 Value of signals clock = 0 reset = 1
— 5 Value of signals clock = 1 reset = 1
— 10 Value of signals clock = 0 reset = 0
— 15 Value of signals clock = 1 reset = 0
c) Task stop và finish
Cách sử dụng: #delay_time $stop; //Dùng để dừng mô phỏng để quan sát
#delay_time $finish;//Dùng để kết thúc mô phỏng
Ví dụ:
Bạn muốn tạm dừng mô phỏng tại thời điểm 100.
- initial //Cấu trúc này sẽ được giải thích sau time = 0.
- begin
- clock = 0;
- reset = 1;
- #100 $top; // Dừng mô phỏng ở thời điểm 100
- end
2. Chỉ thị biên dịch
a) Chỉ thị `define
Cú pháp: `define tên_macro
Trình biên dịch sẽ tự thay thế giá trị thi thấy `ten_macro.
Ví dụ:
- `define DELAY #10
- //…code gì đó……
- a <= `DELAY b & c;// cái này tương đương với a<= #10 b & c;
b) Chỉ thị `include
Cú pháp: `include ten_file //Có thể có đường dẫn nếu như khác thư mục
Trình biên dịch sẽ đưa tất cả nội dung của file nguồn ten_file vào fie verilog để biên dịch.
Ví dụ:
- // Đưa file header.v chứa các khai báo
- // vào file Verilog design.v
- `include header.v
- …
- <Verilog code in file design.v>
- …
d) Chỉ thị `timescale
Cú pháp: `timescale thời gian/ độ chính xác
Định dạng thời gian s,ms,us,ns,ps.
Chỉ các số nguyên 1,10,100 được dùng để chỉ thời gian và độ chính xác.
Ví dụ:
- `timescale 1 ns/1 ps // unit =1ns, precision=1/1000 ns
- `timescale 1 ns /100 ps // time unit = 1ns; precision = 1/10 ns
e) Chỉ thị `ifdef,`else,`endif
+Chỉ thị `ifdef,`else,`endif //Nếu define
Cú pháp:
- `ifdef ten_macro
- Nếu có định nghĩa ten_macro thì biên dịch đoạn này
- `else
- Nếu không có định nghĩa ten_macro thì biên dịch đoạn này
- `endif
+Chỉ thị `ifndef, `else, `endif // Nếu non define
Cú pháp:
- `ifndef ten_macro
- Nếu không có định nghĩa ten_macro thì biên dịch đoạn này
- `else
- Nếu có định nghĩa ten_macro thì biên dịch đoạn này
- `endif