質問

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