문제

59 세까지 계산할 다음 코드가 있습니다. 잘 시작하지만 31 세 이후에는 숫자 대신 '(', '$', '#'등과 같은 ASCII 문자를 보여주기 시작합니다. ?

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;

entity counter is 
    port(clk: IN STD_LOGIC;
         secs:OUT INTEGER RANGE 0 to 59);
end counter;

architecture counter_behav of counter is
signal countSVal: INTEGER RANGE 0 to 59:=0;
begin

process(clk)
begin
if(rising_edge(clk)) then
    if(countSVal>=59) then
        countSVal <= 0;     
    else
        countSVal <= countSVal + 1;     
    end if;
    secs <= countSVal;
end if;
end process;
end counter_behav;
도움이 되었습니까?

해결책

당신이 아무것도 인쇄하지 않기 때문에, 나는 당신이 이것을 파형 뷰어에서보고 있다고 가정합니다. 정수로 표시된 유형을 설정하면 Anthonywjones가 말한 것처럼 ASCII가있을 수 있습니다.

다른 팁

그러나 VHDL이 무엇인지 모르겠지만 출력을 관찰하는 데 사용하는 것은 ~ 아니다 32 이전의 ASCII 문자를 보여주기 때문에 제어 문자이기 때문에 타협하고 가치를 보여줍니다. 32 세 이상은 인쇄 가능한 문자이므로 도구가 값을 생각하는 것이기 때문에 사용으로 전환합니다.

추가 신호 삽입 :

signal my_char: character;  

그런 다음 정수에서 캐릭터로 변환하십시오.

my_char <= character'val(countSVal);       

디버거 또는 파형 뷰어에서 my_char 신호를 확인하면 ASCII 문자가 표시됩니다. Aldec Active-HDL 6.1로 확인했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top