2008-08-29 35 views
15

Điều gì có nghĩa là nếu một công việc được khai báo bằng từ khóa tự động trong Verilog?Tác vụ tự động Verilog

task automatic do_things; 
    input [31:0] number_of_things; 
    reg [31:0] tmp_thing; 
    begin 
    // ... 
    end 
endtask; 

Lưu ý: Câu hỏi này chủ yếu là vì tôi tò mò nếu có bất kỳ lập trình viên phần cứng nào trên trang web. :)

Trả lời

14

Điều đó có nghĩa rằng nhiệm vụ là người tham gia lại - các mục được khai báo trong công việc được phân bổ động chứ không phải được chia sẻ giữa các lời gọi khác nhau của tác vụ.

Bạn thấy đấy - một số người trong chúng ta làm Verilog ... (ugh)

3

Từ khóa "tự động" cũng cho phép bạn viết hàm đệ quy (kể từ verilog 2001). Tôi tin rằng họ nên được tổng hợp nếu họ dưới ra, nhưng tôi không chắc chắn nếu họ có công cụ hỗ trợ.

Tôi cũng vậy, hãy làm verilog!

1

Như Will và Marty nói, tự động được dành cho các chức năng đệ quy.

Nếu một hàm bình thường (tức là không tự động) được gọi với các giá trị khác nhau và được xử lý bởi trình giả lập trong cùng một lát thời gian, giá trị trả về là không xác định. Đó có thể là một lỗi khá khó khăn để phát hiện! Đây chỉ là một vấn đề mô phỏng, khi tổng hợp logic sẽ chính xác.

Làm cho chức năng tự động sửa lỗi này.

21

"tự động" thực tế có nghĩa là "người tham gia lại". Bản thân thuật ngữ bị đánh cắp từ ngôn ngữ phần mềm - ví dụ, C có từ khóa "tự động" để khai báo các biến khi được cấp phát trên ngăn xếp khi phạm vi của nó được thực thi và sau đó được deallocated, để nhiều lời gọi cùng phạm vi không thấy giá trị liên tục của biến đó. Lý do bạn có thể không nghe nói về từ khóa này trong C là nó là lớp lưu trữ mặc định cho tất cả các loại :-) Các lựa chọn thay thế là "tĩnh", có nghĩa là "phân bổ biến này tĩnh (đến một vị trí toàn cục duy nhất trong bộ nhớ), và tham khảo cùng một vị trí bộ nhớ trong suốt quá trình thực hiện chương trình, bất kể hàm được gọi là bao nhiêu lần ", và" dễ bay hơi ", có nghĩa là" đây là một đăng ký ở đâu đó trên SoC của tôi hoặc thứ gì đó trên thiết bị khác mà tôi không có kiểm soát, trình biên dịch, xin vui lòng không tối ưu hóa đọc cho tôi đi, ngay cả khi bạn nghĩ rằng bạn biết giá trị của tôi từ lần đọc trước đó với không có viết trung gian trong mã ".

"tự động" dành cho các hàm đệ quy, nhưng cũng để chạy cùng một hàm trong các chuỗi thực thi khác nhau đồng thời. Ví dụ, nếu bạn "ngã ba" khỏi N khối khác nhau (sử dụng câu lệnh join-> của Verilog), và tất cả chúng đều gọi hàm giống nhau cùng một lúc, cùng một vấn đề phát sinh như một hàm gọi chính nó một cách đệ quy.

Trong nhiều trường hợp, mã của bạn sẽ tốt mà không khai báo tác vụ hoặc chức năng là "tự động", nhưng thực hành tốt là đặt nó vào đó trừ khi bạn cần nó khác.

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