VHDL에서 BIT를 통해 STD_LOGIC을 사용하는 경우


9

사용의 차이점은 무엇입니까?

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; 

STD_LOGIC에서 BIT를 사용하는 것과 그 반대의 제한은 무엇입니까? 그들은 완전히 교환 할 수 있습니까? STD_LOGIC을 정의하면 BIT_Vector와 함께 사용하여 배열의 요소에 액세스 할 수 없다는 것을 이해합니다. 그러나 나는 차이점을 볼 수없는 것 같습니다.


답변:


9

BitA는 미리 정의 된 유형 만 값만 가질 수 0또는 1. Bit유형은 이상적인 값이다.

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

std_logicstd_logic_1164패키지의 일부이며 디지털 시스템 내에서보다 현실적인 신호 모델링을 제공합니다. 9 개의 다른 값을 가질 수 있습니다. 일반적으로 코드 내 0에서는 1, 및 Z(High-Z) 만 사용 합니다. 그러나 U(초기화되지 않음) 및 X(알 수 없음)은 테스트 벤치에서 시스템을 모델링 할 때 매우 유용합니다.

    -------------------------------------------------------------------    
    -- 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;

std_logic_1164패키지는 변환하는 변환 기능을 제공 std_logic하는 Bit.


5

대부분의 사람들이 사용 std_logic합니다. 그것은 u(정의되지 않음), x(알 수없는) 및 z(높은 임피던스)를 허용하지만 어떤 비트는 그렇지 않습니다. 당신이 칩 (tristate)를하지 않을 수 있으므로 필요는 없지만 z, u실종 재설정을 찾는 데 유용합니다. x여러 드라이버를 찾는 데 유용합니다.


7
X여러 드라이버를 찾는 데 유용하다고 언급하는 것이 재미 있다고 생각합니다 . std_logic실제로 VHDL의 업계 표준 유형이지만 VHDL의 가장 잘못 사용 된 기능도 있습니다. std_logic는 해결 된 신호로, 여러 드라이버의 경우 신호 값을 해결하기 위해 함수가 사용됨을 의미합니다. 그러나 대부분의 경우 여러 드라이버가 오류입니다. 이와 같이 해결되지 않은 유형을 사용하면 std_ulogic컴파일러에서 오류로 표시됩니다.
trondd

@trondd :에 대한 좋은 지적 std_ulogic. 그러나 많은 코어가 작성 std_logic되므로 일부 코어를 볼 수 있습니다.
Brian Carlton

1
std_logic실제로 가장 일반적인 유형입니다. 나는 그것이 원래 의도 인 다중 상태 신호의 모델링에 따르지 않는다고 주장하고 있습니다. 내부 디자인의 경우 일반적으로 1또는 0단일 드라이버 만 고려 합니다. 주제에 대한 자세한 내용은 electronics.stackexchange.com/questions/17524/… 를 참조하십시오 .
trondd

5

std_logic 해상도 기능이 있습니다

std_logic보다 유용한 상태를 가질 뿐만 아니라 해상도 함수도 정의되어 있습니다.10

해상도 기능은 VHDL 언어 개념입니다. 유형과 관련된 함수이며 해당 유형의 여러 값이 단일 신호에 적용될 때 발생하는 결과를 결정합니다. 구문은 다음과 같습니다.

SUBTYPE std_logic IS resolved std_ulogic;

std_ulogic의 해결되지 않은 (따라서 훨씬 덜 유용한) 버전은 어디에 있습니까 std_logic?

특히,이 좋은 같은 것들을 의미 01리드에를 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;

우리 X는 하나의 와이어에 여러 개의 호환되지 않는 값이 적용된 상태로 이해 하기 때문에 직관적 입니다.

std_logic 또한 LRM에있는 표에 따라 가능한 모든 입력 신호 쌍을 해결하는 방법을 알고 있습니다.

bit 반면에, 해상도 기능이 없으며, 위의 예에서 사용한 경우 GHDL 0.34에서 시뮬레이션 오류가 발생합니다.

가능한 값은 IEEE 1164에std_logic 의해 표준화되고 많은 일반적인 사용 사례를 다루기 때문에 좋은 선택 입니다.


0

std_logicbit 보다 풍부 하며 기본적으로 대부분 사용되어야합니다.

비트 와 같이 두 개의 값을 갖는 부울 유형 도 있습니다. IF [bool] 또는 WHEN [bool] 이후에 예상되는 유형의 비교 결과 유형이며 종종 선택 상수에 사용됩니다.constant ENABLE_DEBUG_INTERFACE : boolean := true;

std_logic 보다 비트 를 선호 할 수있는 곳 은 큰 배열, 메모리입니다. 시뮬레이터 최적화에서 비트는 시뮬레이터 메모리에서 std_logic 보다 적은 영역을 차지합니다 . 그리고 디자인에서 1GB의 RAM을 인스턴스화하는 것이 중요 할 수 있습니다.

또한 합성 후 게이트 레벨 넷리스트에서 자동으로 생성되는 것과 같이 매우 큰 설계의 경우 더 빠를 수도 있습니다.

물론이 성능 측면은 언어의 일부가 아니며 VHDL 시뮬레이터의 구현에 따라 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.