2009-03-01 54 views
1

我有下面的代碼來計數到59.它開始罰款,但31後,開始顯示ASCII字符像'(','$','#'等,而不是數字。任何想法,我要去哪裏錯了?計數器的輸出顯示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; 

回答

2

由於您沒有打印任何內容,我假設您正在使用波形查看器查看此內容。將顯示的類型設置爲整數,您可以將其設置爲ASCII,如AnthonyWJones所述。

1

我不知道的,但是,它似乎什麼VHDL最有可能使用的是觀察輸出什麼都爲顯示你的ASCII字符之前到32,因爲那些將是控制字符,所以它只是妥協,並向您顯示它們的值。由於32及以上是可打印字符,因此它切換到使用這些字符,因爲那是工具認爲的值。

+0

VHDL用於定義硬件。它被芯片設計師使用。 – 2009-03-07 23:41:33

1

插入額外的信號:

signal my_char: character; 

然後做轉換整數到字符:

my_char <= character'val(countSVal);  

檢查my_char信號下的調試程序或者波形顯示器,你會看到ASCII字符。我用Aldec Active-HDL 6.1進行了檢查。