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!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
wafer.jpg

Task hệ thống và chỉ thị biên dịch trong Verilog

Task hệ thống
  1. 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:

Task hệ thống
Ví dụ:
Hiển thị chuỗi trong dấu ngoặc kép

  1. $display(“Hello Verilog World”); //-- Hello Verilog World

Hiển thị giá trị thời gian mô phỏng hiện hành (230)

  1. $display($time);
  2. -- 230

Hiển thị giá trị 1fe00f0001c của virtual_addr và thời gian 210

  1. $display(“At time %d virtual address is %h”, $time, virtual_addr );
  2. // At time 210 virtual address is 1fe00f0001c

Hiển thị giá trị 5 của port_id theo dạng nhị phân

  1. $display(“ID of the port is %b”, port_id );
  2. // 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

  1. initial begin
  2. $monitor($time, “Value of signals clock = %b reset = %b ”,clock, reset);
  3. 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.

  1. initial //Cấu trúc này sẽ được giải thích sau time = 0.
  2. begin
  3. clock = 0;
  4. reset = 1;
  5. #100 $top; // Dừng mô phỏng ở thời điểm 100
  6. 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ụ:

  1. `define DELAY #10
  2. //…code gì đó……
  3. 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ụ:

  1. // Đưa file header.v chứa các khai báo
  2. // vào file Verilog design.v
  3. `include header.v
  4. <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ụ:

  1. `timescale 1 ns/1 ps // unit =1ns, precision=1/1000 ns
  2. `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:

  1. `ifdef ten_macro
  2. Nếu có định nghĩa ten_macro thì biên dịch đoạn này
  3. `else
  4. Nếu không có định nghĩa ten_macro thì biên dịch đoạn này
  5. `endif

+Chỉ thị `ifndef, `else, `endif // Nếu non define
Cú pháp:

  1. `ifndef ten_macro
  2. Nếu không có định nghĩa ten_macro thì biên dịch đoạn này
  3. `else
  4. Nếu có định nghĩa ten_macro thì biên dịch đoạn này
  5. `endif

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 or 0938 838 404  Ms Duyên

 
 

Related Articles

Chat Zalo