정수 신호 (범위는 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;
일부 게시물 코드는 내가 vhdl에서 일한 이후 잠시 있었고, 이것으로 학교 과제를 가졌습니다. 어쩌면 내가 어떻게되는지 알 수있었습니다. –
첫 번째 질문은 : 정수 신호가 어떻게 코딩 되었습니까? 그것은 VHDL "정수"또는 다른 표현인가요? –
[this] (http://www.jjmk.dk/MMMI/Lessons/06_Arithmetics/No6_Conversion/Index.htm)가 도움이 될 것입니다. – Alexander