quartus clock division problem

Başlatan tesladream, 02 Mayıs 2013, 21:36:15

tesladream

Merhaba arkadaşlar ,quartus II de led blinky alıştırması yapmaya çalışıyorum ama DE2-115 üzerindeki led sürekli yanıyor acaba problem neden kaynaklanıyor olabilir.Yardımcı olursanız sevinirim.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity clock is
port (
		clk : in std_logic;
		led : out std_logic
);
end clock;

architecture divider of clock is
--declarations
	constant CLK_FREQ 	: integer := 50000000;
	constant BLINK_FREQ 	: integer := 1;
	constant CNT_MAX 		: integer := CLK_FREQ/BLINK_FREQ/2-1;
	signal cnt 				: unsigned(31 downto 0);
	signal blink 			: std_logic;
	signal newclk			: std_logic;
begin
---------clock division operation---------------
process(clk)
	begin
		if (clk'event and clk='1') then
			if cnt=CNT_MAX then
				cnt <= (others => '0');
				newclk <=not newclk;
			else
				cnt <= cnt + 1;
			end if;
		end if;
end process;
------------------------------------------------
process(newclk)
begin
	blink <= not blink;
end process;

led <= blink;
end divider;

pic365

Merhaba,

En alttaki process'te sanırım newclk'ta değişiklik olduğunda blink sinyalinin de değişmesini istemişsiniz. Simülasyonlarda o process istediğiniz gibi davransa da sentez programı blink sinyalini de duyarlılık listesine ekler ve latch sentezler. O nedenle led sinyali not kapısının gecikmesi kadar sürede sürekli ters döner ve siz de led'i sürekli yanık görürsünüz. O process'i kaldırıp newclk sinyalini doğrudan led sinyaline bağlarsanız sorun büyük olasılıkla çözülecek.

speak48

process(newclk)
begin
    blink <= not newclk;
end process;

tesladream

Eyvallah arkadaşlar sağolasınız.:)