質問
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