2012-10-13 48 views
5

Tôi mới đến Verilog nhưng đã là một lập trình viên C trong nhiều năm khiến tôi trở nên nguy hiểm.Có điều gì đó giống như __LINE__ trong Verilog không?

Tôi đang làm một số Verilog cho một lớp học. Tôi muốn sử dụng C assert() thử nghiệm phong cách trong mã mô phỏng của tôi. https://en.wikipedia.org/wiki/Assert.h

Chúng tôi hiện không sử dụng Hệ thống Verilog để không có xác nhận chuẩn nào mà tôi có thể tìm thấy. Tôi đã cobbled với nhau vĩ mô sau đây.

`define ASSERT_EQUALS(x,y) \ 
    repeat(1)\ 
    begin\ 
     if((x) != (y)) \ 
     begin\ 
      $write("assert failed %d != %d\n", (x), (y));\ 
      $finish;\ 
     end\ 
    end 

    // test the assert(should fail) 
    `ASSERT_EQUALS(t_data_in,16'hfffe) 

Theo tôi có thể nói không có cách nào để lấy số dòng. Vì vậy, nếu xác nhận không thành công, tôi chỉ nhận được một tin nhắn không có cách nào để liên kết lại với vị trí của sự thất bại.

assert failed 65535 != 65534 

Có cách nào để lấy số dòng hiện tại không? Hoặc là có một cách tốt hơn để làm một thử nghiệm khẳng định trong Verilog?

Cảm ơn!

+1

'__LINE__ được giới thiệu trong SystemVerilog. – toolic

+0

SystemVerilog cũng có hỗ trợ gốc cho các xác nhận. –

+3

Icarus Verilog hỗ trợ các macro '__LINE__' và' __FILE__' sau phiên bản iverilog 1.0 xem trường hợp kiểm tra [ivltests/fileline.v] (https://github.com/steveicarus/ivtest/blob/master/ivltests/fileline.v) cho sử dụng – shuckc

Trả lời

4

Nếu đây là ngữ cảnh thủ tục, bạn có thể sử dụng $finish(1); để in vị trí.

+3

Thử nghiệm tại Icarus Verilog. Thông số đó để $ finish() không được triển khai. Tuy nhiên không làm việc trong Xilinx. Tôi sẽ xem liệu tôi có thể gửi bản sửa lỗi cho Icarus Verilog hay không. Cảm ơn! –

6

SystemVerilog 2009 cung cấp chỉ thị trình biên dịch. Trích dẫn từ đặc điểm kỹ thuật IEEE Std 1800-2009, Mục 22.13:

`__FILE__ mở rộng đến tên của tệp đầu vào hiện tại, dưới dạng chuỗi ký tự. Đây là đường dẫn mà công cụ đã mở tệp, chứ không phải tên ngắn được chỉ định trong `include hoặc làm đối số tên tệp đầu vào của công cụ. Định dạng của tên đường dẫn này có thể phụ thuộc vào việc triển khai thực hiện.

`__LINE__ mở rộng đến số dòng đầu vào hiện tại, dưới dạng số thập phân đơn giản.
Ví dụ:
$display("Internal error: null handle at %s, line %d.", `__FILE__, `__LINE__);

Tham khảo các đặc điểm kỹ thuật đầy đủ để biết thêm chi tiết.

Các vấn đề liên quan