std_logic hay std_ulogic?


24

Dường như thế giới đã quyết định rằng std_logic(và std_logic_vector) là cách biểu diễn bit mặc định trong VHDL. Thay thế sẽ là std_ulogic, mà không được giải quyết.

Điều này làm tôi ngạc nhiên vì thông thường, bạn không mô tả xe buýt , vì vậy bạn không muốn có nhiều tài xế và bạn không cần phải giải quyết tín hiệu. Ưu điểm của std_ulogictrình biên dịch sẽ cảnh báo bạn sớm nếu bạn có nhiều trình điều khiển.

Câu hỏi: đây chỉ là một điều văn hóa / lịch sử, hay vẫn còn lý do kỹ thuật để sử dụng std_logic?


3
"Thế giới" là sai. Các kỹ sư thông minh sử dụng std_ulogic vì nó có ngữ nghĩa chính xác.
wjl

@wjl Tôi sẽ giải thích rằng "đó là một điều văn hóa / lịch sử". Câu trả lời của bạn dưới đây hữu ích hơn nhiều so với bình luận ở đây.
Philippe

Tôi đã viết bình luận trước, sau đó nghĩ rằng sẽ phù hợp hơn nếu để lại câu trả lời với nhiều chi tiết cụ thể hơn. Xin lỗi, tôi đoán nó nghe có vẻ hơi thiếu sót. Nhưng nhận xét của tôi theo nghĩa đen là hầu hết mọi người bắt đầu sử dụng std_logic vì họ đã học theo cách đó, sau một thời gian họ bắt đầu tự hỏi về std_ulogic, họ tìm kiếm nó, nhận ra đó là ngữ nghĩa và sau đó chuyển đổi sang nó. =)
wjl

Câu trả lời:


16

Std_logic là một kiểu con của std_ulogic và có chính xác một thuộc tính bổ sung: nó được giải quyết nếu có nhiều trình điều khiển.

Bất kể thông lệ thông thường, std_ulogic là loại chính xác để sử dụng cho các tín hiệu không phân giải cần logic 9 giá trị. (Thông thường, sử dụng "bit" thậm chí còn chính xác hơn - ví dụ, trên một số kiến ​​trúc FPGA không có bất kỳ thứ gì như 'X' hoặc 'U').

Về cơ bản, điều tốt nhất để làm là sử dụng đúng loại cho công việc. Thông thường các thực hành xấu được tuyên truyền bởi những người chỉ vẹt theo phong cách mà họ thấy người khác sử dụng, làm mà không hiểu tại sao.


8
Kiến trúc có thể không có chữ "U", nhưng nó thường hữu ích để mô phỏng như thể nó đã làm như bạn có thể tìm thấy các khởi tạo không chính xác. +1 cho "điều tốt nhất để làm là sử dụng đúng loại cho công việc", nhưng chúng ta có xu hướng tìm hiểu khi chúng ta đi cùng về những gì "tốt nhất" :)
Martin Thompson

8

Lịch sử của tôi là thế này:

Tôi đã bắt đầu (vào khoảng năm 1999 IIRC) bằng cách sử dụng std_ulogic*mọi lúc - vì đó là điều đúng đắn, chỉ vì những lý do bạn mô tả.

Sau đó, tôi phải giao tiếp với một loạt các nhà cung cấp được tạo bởi IP mà tất cả đều có std_logictrên toàn bộ giao diện. Điều đó có nghĩa là chuyển đổi trên ánh xạ cổng (đối với các _vectoryếu tố) và tôi đã lười biếng và chuyển sang sử dụng std_logic*.

Tuy nhiên, tôi dường như mắc rất ít lỗi "lái xe đôi", vì vậy tôi đã bỏ lỡ std_ulogicnhiều như tôi nghĩ. Và driverslệnh của Modelim giúp bạn dễ dàng tìm thấy "ai đang lái xe gì" khi tôi thỉnh thoảng cần ...


Vâng, các lõi IP (và đặc biệt là các công cụ được dịch tự động từ Verilog) có xu hướng sử dụng std_logic. Câu trả lời của bạn dường như cho thấy lý do chủ yếu là "văn hóa / lịch sử".
Philippe

Bạn không bao giờ phải chuyển đổi giữa std_logic và std_ulogic trên các cổng. Ý bạn là bạn phải chuyển đổi giữa std_logic_vector và std_ulogic_vector?
wjl

@wjl: xin lỗi, đúng vậy Tôi sẽ cập nhật bài viết.
Martin Thompson

AFAIK, std_logic và std_ulogic tương thích với nhiệm vụ vì chúng có cùng loại cơ sở. Vì vậy, không cần phải chuyển đổi thủ công.
Val

@Val: đó là những gì wjl đã nói (và tôi đồng ý) - nhưng các *vectorbộ phận cổng vẫn cần chuyển đổi
Martin Thompson

4

IIRC Hướng dẫn phương pháp tái sử dụng nổi tiếng được đề xuất std_logic(_vector), vì vậy có thể các nhóm phương pháp luận trong các công ty, v.v ... lan rộng hơn nữa dưới dạng hướng dẫn mã hóa (bắt buộc). Cá nhân, +1 để sử dụng std_ulogickhi có thể.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.