Khi nào nên sử dụng STD_LOGIC trên BIT trong VHDL


9

Sự khác biệt giữa việc sử dụng:

ENTITY MyDemo is 
    PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo; 

ENTITY MyDemo is 
    PORT(X: IN BIT; F: OUT BIT );
END MyDemo; 

Những hạn chế của việc sử dụng BIT so với STD_LOGIC và ngược lại là gì? Họ hoàn toàn có thể trao đổi? Tôi hiểu rằng nếu tôi đã xác định STD_LOGIC, tôi không thể sử dụng nó với BIT_Vector để truy cập các phần tử trong mảng. Nhưng tôi dường như không thể thấy sự khác biệt.


Câu trả lời:


9

Bitlà một loại được xác định trước và chỉ có thể có giá trị 0hoặc 1. Các Bitloại là một giá trị lý tưởng.

type Bit is ('0', '1');

std_logiclà một phần của std_logic_1164gói và cung cấp mô hình hóa tín hiệu thực tế hơn trong một hệ thống kỹ thuật số. Nó có khả năng có chín giá trị khác nhau. Điển hình là trong mã của bạn, bạn sẽ chỉ sử dụng 0, 1Z(High-Z). Nhưng U(Uninitialized) và X(Unknown) cũng rất hữu ích khi mô hình hóa hệ thống trong testbench.

    -------------------------------------------------------------------    
    -- logic state system  (unresolved)
    -------------------------------------------------------------------    
    TYPE std_ulogic IS ( 'U',  -- Uninitialized
                         'X',  -- Forcing  Unknown
                         '0',  -- Forcing  0
                         '1',  -- Forcing  1
                         'Z',  -- High Impedance   
                         'W',  -- Weak     Unknown
                         'L',  -- Weak     0       
                         'H',  -- Weak     1       
                         '-'   -- Don't care
                       );

--    attribute ENUM_ENCODING of std_ulogic : type is "U D 0 1 Z D 0 1 D";

    -------------------------------------------------------------------    
    -- *** industry standard logic type ***
    -------------------------------------------------------------------    
    SUBTYPE std_logic IS resolved std_ulogic;

Các std_logic_1164gói phần mềm cũng cung cấp chức năng chuyển đổi để chuyển đổi std_logicđể Bit.


5

Hầu hết mọi người sử dụng std_logic. Điều đó cho phép u(không xác định), x(không xác định) và z(trở kháng cao), bit nào không. Mặc dù bạn có thể không bao giờ sử dụng chip và do đó không cần thiết z, nhưng urất hữu ích cho việc tìm kiếm các bộ bị thiếu. xrất hữu ích cho việc tìm kiếm nhiều trình điều khiển.


7
Tôi nghĩ thật buồn cười khi bạn đề cập đến sự hữu ích của Xviệc tìm kiếm nhiều trình điều khiển. std_logicthực sự là loại tiêu chuẩn công nghiệp cho VHDL, nhưng nó cũng thuộc tính năng bị lạm dụng nhiều nhất của VHDL. std_logiclà tín hiệu được phân giải, có nghĩa là một chức năng được sử dụng để phân giải giá trị của tín hiệu trong trường hợp có nhiều trình điều khiển. Nhưng trong phần lớn các trường hợp, nhiều trình điều khiển là một lỗi. Bằng cách sử dụng một loại chưa được giải quyết như thế std_ulogicnày sẽ bị trình biên dịch đánh dấu là lỗi.
trondd

@trondd: Điểm hay về std_ulogic. Nhưng hãy nhớ rằng nhiều lõi sẽ được viết với std_logicvì vậy bạn có thể sẽ thấy một số lõi .
Brian Carlton

1
std_logicthực sự là loại phổ biến nhất xung quanh; Tôi chỉ tranh luận rằng việc sử dụng nó không theo ý định ban đầu: Mô hình hóa các tín hiệu đa trạng thái. Đối với thiết kế nội bộ, chúng tôi thường chỉ xem xét 1hoặc 0và một trình điều khiển duy nhất. Xem Electronics.stackexchange.com/questions/17524/ Ấn để thảo luận kỹ về chủ đề này.
trondd

5

std_logic có chức năng phân giải

Không chỉ std_logiccó trạng thái hữu ích hơn ngoài 10, nó cũng có chức năng phân giải được xác định.

Hàm phân giải là một khái niệm ngôn ngữ VHDL. Đây là một hàm được liên kết với một loại và nó xác định điều gì sẽ xảy ra khi nhiều giá trị của loại đó được áp dụng cho một tín hiệu. Cú pháp là:

SUBTYPE std_logic IS resolved std_ulogic;

nơi std_ulogiclà chưa được giải quyết (và do đó ít nhiều hữu ích) phiên bản của std_logic.

Đặc biệt, điều này ngụ ý những điều tốt đẹp như 01dẫn đến X:

library ieee;
use ieee.std_logic_1164.all;

entity std_logic_tb is
end std_logic_tb;

architecture behav of std_logic_tb is
    signal s0 : std_logic;
begin
    s0 <= '0';
    s0 <= '1';
    process
    begin
        wait for 1 ns;
        assert s0 = 'X';
        wait;
    end process;
end behav;

Điều này có ý nghĩa trực quan, vì chúng tôi hiểu Xlà trạng thái nơi nhiều giá trị không tương thích được áp dụng cho một dây.

std_logic cũng biết cách giải quyết mọi cặp tín hiệu đầu vào có thể khác theo một bảng có trên LRM.

bit mặt khác, không có chức năng phân giải và nếu chúng ta đã sử dụng nó trong ví dụ trên, nó sẽ dẫn đến lỗi mô phỏng trên GHDL 0,34.

Các giá trị có thể std_logiclà một lựa chọn tốt vì chúng được chuẩn hóa bởi IEEE 1164 và xử lý nhiều trường hợp sử dụng phổ biến.


0

std_logic giàu hơn bit và về cơ bản nên được sử dụng hầu hết thời gian.

Ngoài ra còn có loại boolean , giống như bit , có hai giá trị. Đây là loại kết quả so sánh, loại được mong đợi sau IF [bool] hoặc WHEN [bool] , thường được sử dụng cho các hằng số lựa chọn:constant ENABLE_DEBUG_INTERFACE : boolean := true;

Một nơi mà bit có thể được ưa thích hơn std_logic là cho các mảng lớn, bộ nhớ. Khi tối ưu hóa trình giả lập, bit chiếm ít diện tích trong bộ nhớ của trình giả lập hơn std_logic . Và nó có thể quan trọng nếu thiết kế của bạn khởi tạo một GB RAM.

Nó cũng có thể nhanh hơn cho các thiết kế rất lớn, ví dụ như một cái gì đó được tạo tự động từ danh sách mạng cấp cổng sau tổng hợp.

Tất nhiên, khía cạnh hiệu suất này không phải là một phần của ngôn ngữ và phụ thuộc vào việc triển khai trình giả lập VHDL.

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.