>

아래 서면 진술의 차이점에 대해 누구나 말해 줄 수 있습니까?

signal A: **unsigned**(3 downto 0);
signal B: **std_logic_vector**(3 downto 0);

  • 답변 # 1

    와이즈 비츠  그리고 std_logic_vector   unsigned훈련되지 않은 배열 . std_logic 도  유형. 와이즈 비즈   signed 에 선언  꾸러미;와이즈 비즈  그리고 std_logic_vector  패키지 std_logic_1164 에 선언 . 세 가지 유형 모두 동일합니다. 유일한 차이점은 그들의 이름입니다.

    그게 요점이 뭐야? 요점은 예제로 잘 설명되어 있습니다 :

    포함

    unsigned
    
    

    그런 다음

    signed
    
    

    numeric_std 의 결과  값 15를받는 반면

    variable U : unsigned(3 downto 0);
    variable S : signed(3 downto 0);
    variable I : integer;
    
    

    U := "1111"; I := to_integer(U); 의 결과  -1 값이 주어집니다. 이것은 I 때문입니다  type은서명되지 않은숫자를 나타내는 데 사용되며 양수 만 가능합니다. 그래서, S := "1111"; I := to_integer(S);  숫자 15를 나타냅니다.  그러나 유형은 음수를 나타낼 수 있어야하며 I 를 사용해야합니다.   unsigned 유형  <1>2의 보수표현이이 유형에 사용되기 때문에 -1을 나타냅니다.

    그래서, 당신은 같은 기능을 볼 수 있습니다- "1111"  - signed 와 함께 호출되면 두 가지 다른 결과를 반환합니다.  -인수가 signed 유형인지에 따라 15 또는 -1  또는 "1111" . 따라서 두 유형의 유일한 차이점은 이름이지만 두 유형이 모두 있다는 점을 알 수 있습니다.

    사실, 두 개의 to_integer 가 있습니다  하나가 아닌 기능. 하나는 "1111" 를 걸립니다  논의;다른 사람 (명칭 적으로 unsigned ) )는 signed 를 걸립니다  논의. 보시다시피, 그들은 다르게 행동합니다. 컴파일러는 인수의 유형에 따라 어떤 함수를 호출해야하는지 결정할 수 있습니다. 컴파일러가 인수의 유형에 따라 다른 (동일한 이름의 함수)를 선택할 수있는이 아이디어를overloading이라고합니다. 소프트웨어 언어에서 일반적입니다.

    그래, to_integer 는 어때? ? 당신이 쓴다고 가정 해 봅시다 :

    unsigned
    
    

    그런 다음

    to_integer
    
    

    signed 에서 어떤 결과를 기대하겠습니까?  기능? 15 또는 -1? 이 딜레마는 위의 코드가 불법이기 때문에 해결되며 컴파일되지 않습니다. std_logic_vector 의 버전이 없기 때문에 컴파일되지 않습니다.   variable V : std_logic_vector(3 downto 0); variable I : integer; 에 대해 정의 된 함수  - V:= "1111"; I := to_integer(V);   to_integer 유형에 대해 함수가 오버로드되지 않았습니다. .

    따라서 양수 만 나타내면 to_integer 를 사용하는 것이 가장 좋습니다.  유형;음수를 나타내려면 std_logic_vector 를 사용해야합니다.  유형. 당신이 정말로 신경 쓰지 않는다면, 비트 패턴이 숫자가 아니거나 수학을 수행하지 않기 때문에 (한 장소에서 다른 장소로 옮기는 것만으로) to_integer 를 사용하는 것이 가장 좋습니다 .

    https://www.edaplayground.com/x/2Qq4

    std_logic_vector

  • 이전 c++ - 술어로서의 regex_match
  • 다음 javax.sound.midi - javamidisequencer로 사운드를 재생할 수 없습니다