2009-03-01 18 views
1

59'a kadar saymak için aşağıdaki kodu kullanıyorum. İyi çalışıyor ancak 31'den sonra ASCII karakterlerini sayı yerine '(', '$', '#' vb.) Göstermeye başlıyor. yanlış gidiyorum fikrin var mı?ASCII karakterlerini gösteren sayaç çıktısı

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; 

cevap

2

Hiçbir şey yazdırmayacağınız için, bunu bir dalga şekli görüntüleyicide gördüğünüzü farz ediyorum. Tam olarak gösterilen türü ayarla, AnthonyWJones'ın dediği gibi ASCII olarak sahip olabilirsiniz.

1

Ben, ancak, bu çıktıyı gözlemlemek için kullandığınız her ne değil size ASCII karakterleri gösteren olduğuna en muhtemel görünüyor ne vhdl hiç bir fikrin yok önce 32, çünkü bunlar kontrol karakterleri olurdu, bu yüzden sadece taviz veriyor ve onların değerlerini gösteriyor. 32 ve üstü yazdırılabilir karakterler olduğundan, bu araç, değerlerin ne olduğunu düşündüğü için bunları kullanmaya geçiyor.

+0

VHDL donanımı tanımlamak için kullanılır. Bu chip tasarımcıları tarafından kullanılır. –

+0

Hayır, gerçekten değil. VHDL bir modelleme dilidir; Gerçek hayatta bir donanımı veya eşzamanlı bir süreci modellemek için kullanılabilir. – Sadjad

1

takın ek sinyal: ayıklayıcı altında veya dalga izleyicide

my_char <= character'val(countSVal);  

Kontrol my_char sinyalini ve ASCII karakterleri göreceksiniz:

signal my_char: character; 

Sonra tamsayı gelen karaktere dönüşüm yapmak. Aldec Active-HDL 6.1 ile kontrol ettim.