2009-03-01 11 views
1

Ich habe den folgenden Code zu zählen bis 59. Es beginnt gut, aber nach 31, beginnt, ASCII-Zeichen wie '(', '$', '#' etc., anstelle von Zahlen. jede Idee, wohin ich gehe falsch?Zähler Ausgabe zeigt ASCII Zeichen

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; 

Antwort

2

Da Sie nichts drucken, nehme ich an, dass Sie dies in einem Wellenform-Viewer betrachten. Setzen Sie den angezeigten Typ auf Integer, Sie können es als ASCII haben, wie AnthonyWJones sagte.

1

ich habe keine Ahnung, was vhdl ist jedoch, so scheint es sehr wahrscheinlich, dass, was auch immer Sie verwenden, um die Ausgabe zu beobachten ist nicht zeigt Ihnen, ASCII-Zeichen vor zu 32, weil das Kontrollzeichen wären, also kompromittiert es und zeigt Ihnen ihre Werte an.Weil 32 und mehr druckbare Zeichen sind, schaltet es auf diese um, weil das die Werte für das Werkzeug sind.

+0

VHDL wird verwendet, um Hardware zu definieren. Es wird von Chip-Designern verwendet. –

+0

Nein, nicht wirklich. VHDL ist eine Modellierungssprache; könnte verwendet werden, um eine Hardware oder einen gleichzeitigen Prozess im wirklichen Leben zu modellieren. – Sadjad

1

Insert zusätzliches Signal:

signal my_char: character; 

tun dann die Umwandlung von Ganzzahl Charakter:

my_char <= character'val(countSVal);  

prüfen my_char Signal unter Debugger oder in Wellenform-Viewer und Sie werden ASCII-Zeichen sehen. Ich habe es mit Aldec Active-HDL 6.1 überprüft.