2013-05-26 6 views
2

정수 신호 (범위는 0에서 9999)입니다. 7 세그먼트 디스플레이 집합에 표시하려고합니다. 멀티플렉서를 구현했습니다 (한 자리가 한 번에 표시됨). 이제 정수를 한자리 숫자로 나눠야합니다.VHDL : 10 진 정수의 n 번째 자리

이론상 매우 간단합니다. mod (ex NUM/100 mod 10은 두 번째 숫자를 나타냄)를 사용하십시오. 문제는 mod (4 번 사용)을 사용하여 솔루션을 컴파일했을 때 mod에 9000 개 이상의 셀을 사용하는 것입니다. 너무 많습니다 (그러나 작동합니다).

그런 다음 작은 정수로 캐스팅 시도했지만 작동하지 않습니다. 0에서 9까지의 정수 범위는 4 비트를 사용하므로 실제로 0에서 15까지의 범위입니다.

확실한 해결책이 더 간단 할 것이라고 확신하지만 찾을 수 없습니다. 제발 초심자입니다. :)

EDIT : 코드 :

이 부분은 소정의 자리

process (clk) 
begin 
    if rising_edge(clk) then 
     case number1 is 
      -- od prawej: a b c d e f g 
      when 0 => segment <="1000000"; -- '0' 
      when 1 => segment <="1111001"; -- '1' 
      when 2 => segment <="0100100"; -- '2' 
      when 3 => segment <="0110000"; -- '3' 
      when 4 => segment <="0011001"; -- '4' 
      when 5 => segment <="0010010"; -- '5' 
      when 6 => segment <="0000010"; -- '6' 
      when 7 => segment <="1111000"; -- '7' 
      when 8 => segment <="0000000"; -- '8' 
      when 9 => segment <="0010000"; -- '9' 
      when others=> segment <="1111111"; 
     end case; 
    end if; 
end process; 

이 제품은 디스플레이 (1/4)를 선택하고, 설정하는 숫자 값

수신을 표시하는 적절한 출력을 설정
process (clk) 
variable count: integer range 0 to 1000; 
begin 
    if rising_edge(clk) then 
     if count = 1000 - 1 then 
      count := 0; 
      case digit is 
       when "1000" => digit <="0001"; number1 <= year/1000 mod 10; 
       when "0001" => digit <="0010"; number1 <= year/100 mod 10; 
       when "0010" => digit <="0100"; number1 <= year/10 mod 10; 
       when "0100" => digit <="1000"; number1 <= year mod 10; 
       when others => digit <="0001"; 
      end case; 
     else 
      count := count + 1; 
     end if; 

    end if; 
end process; 
+0

일부 게시물 코드는 내가 vhdl에서 일한 이후 잠시 있었고, 이것으로 학교 과제를 가졌습니다. 어쩌면 내가 어떻게되는지 알 수있었습니다. –

+0

첫 번째 질문은 : 정수 신호가 어떻게 코딩 되었습니까? 그것은 VHDL "정수"또는 다른 표현인가요? –

+0

[this] (http://www.jjmk.dk/MMMI/Lessons/06_Arithmetics/No6_Conversion/Index.htm)가 도움이 될 것입니다. – Alexander

답변

0

일반적으로 숫자를 십진수 형식으로 나타내야 할 경우, choic 숫자의 e는 이진 코드 십진수 (Binary Coded Decimal, BCD)입니다. 기본 10 진수의 각 숫자는 4 비트의 이진수를 사용하여 인코딩됩니다.

물론 이것은 4 비트 숫자의 유효 범위가 0-9 (A-F는 유효하지 않음)이므로 전체 숫자를 하나의 이진 정수로 처리 할 수 ​​없음을 의미합니다. 따라서 소수 값 12는 "0001 0010"으로 인코딩됩니다.

단순히 두 개의 VHDL 부호없는 값 (또는 std_logic_vectors)을 추가하는 대신 숫자에 대한 모든 연산 (일반적으로 더하기 및 빼기)은 BCD에 맞게 조정 된 논리를 사용해야합니다. 예제와 함께 사용할 수있는 많은 온라인 리소스가 있으므로 (예를 들어 BCD adder 검색), 여기서는 더 이상 자세히 설명하지 않겠습니다.

관련 문제