Frage

Ich habe den folgenden Code zu zählen bis 59. Es beginnt in Ordnung, aber nach 31, beginnt ASCII-Zeichen zu zeigen, wie ‚(‘, ‚$‘, ‚#‘ usw., anstelle von Zahlen. Jede Idee, wo ich würde falsch?

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;
War es hilfreich?

Lösung

Da Sie nichts drucken, ich nehme an, Sie an diesem in einem Wellenform-Viewer suchen. Legen Sie den Typ gezeigt auf Integer, können Sie es als ASCII haben als AnthonyWJones gesagt.

Andere Tipps

Ich habe keine Ahnung, was vhdl ist jedoch, so scheint es sehr wahrscheinlich, dass, was auch immer Sie die Ausgabe zu beobachten verwenden, ist nicht Sie ASCII-Zeichen vor 32 zeigt, weil diese Steuerzeichen sein würde , so dass nur Kompromisse es und zeigt deren Werte. Seit 32 und über druckbare Zeichen sind es schaltet auf diejenigen, weil das ist mit, was das Werkzeug denkt sind die Werte.

Fügen Sie zusätzliches Signal:

signal my_char: character;  

Dann machen Sie die Umwandlung von Ganzzahl Charakter:

my_char <= character'val(countSVal);       

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top