문제
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로 확인했습니다.
제휴하지 않습니다 StackOverflow