ENTITY Klokdeler IS
    PORT ( clk 	: IN  STD_LOGIC;
           reset 	: IN  STD_LOGIC;
           Q1		: BUFFER STD_LOGIC);
--			  Q2		: BUFFER STD_LOGIC;
--			  Q10		: BUFFER STD_LOGIC;
--			  Q50		: BUFFER STD_LOGIC);
END Klokdeler;

ARCHITECTURE Behavioral OF Klokdeler IS
BEGIN
		divider : PROCESS(clk, reset) IS
		
		-- Interface signalen
		VARIABLE cnt : STD_LOGIC_VECTOR(3 DOWNTO 0);
		
		BEGIN
			IF(reset = '1') THEN
				cnt := (OTHERS => '0');
			ELSIF rising_edge(clk) THEN
						
				IF(count1 = 49999999) THEN
					cnt := 0;
					Q2 <= NOT Q2;
				ELSE
					count1 := count1 + 1;
					Q2 <= '0';
				END IF;
			END IF;
		END PROCESS divider;		
					
			
		
--		deler_50MHz : PROCESS(clk) IS
--		VARIABLE count2 : INTEGER := 0;
--		
--		BEGIN
--			-- Frequentie van 1Hz
--			
----			IF(count1 = 49999999) THEN
----				count1 := 0;
----				q1 <= '1';
----			ELSE 
----				count1 := count1 + 1;
----				q1 <= '0';
----			END IF;
--			
--			IF (rising_edge(clk)) then
--			
--				-- Frequentie van 2Hz
--				IF(count2 = 24999999) THEN
--					count2 := 0;
--					Q2 <= NOT Q2;
--				ELSE 
--					count2 := count2 + 1;
--				END IF;
--			END IF;
--			
--			-- Frequentie van van 5Hz
--			-- IF(count5 = 10000000) THEN
--			--	count5 := 0;
--			--	q5 <= '1';
--			-- ELSE 
--			--	count5 := count5 + 1;
--			--	q5 <= '0';
--			-- END IF;
--			
--			-- Frequentie van 
--			
----			IF(count10 = 5000000) THEN
----				count10 := 0;
----				q10 <= '1';
----			ELSE 
----				count10 := count10 + 1;
----				q10 <= '0';
----			END IF;
----			
----			-- Frequentie van 
----			IF(count50 = 5000000) THEN
----				count50 := 0;
----				q50 <= '1';
----			ELSE 
----				count10 := count10 + 1;
----				q50 <= '0';
----			END IF;
--			
--		END PROCESS deler_50MHz; 

END Behavioral;

Kan iemand eens nazien dat het met één deeltal kan werken en hoe kan ik die uitgangen als bitvectors zetten want dat aanvaard de compiler niet als je iets toekent met logische operatoren.

- [edit - Aart] Tag verplaats imv leesbaarheid.

[Bericht gewijzigd door Aart op (1%)]

Onzinposts verwijderd, de TS begrijpt zelf ook wel waarom reakties uitblijven.

TS, waarom wil je zoveel verschillende klokken maken? Je kunt beter het hele design op een enkere source clk laten lopen. Vervolgens maak je pulsjes op een lagere frequentie. Daarmee laat je dan bepaalde acties op een lagere snelheid lopen. Dus zoeiets:


PROCESS(clk, reset) IS
  signal divider : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
  IF(reset = '1') THEN
    divider <= (OTHERS => '0');
  ELSIF rising_edge(clk) THEN
    divider <= divider + 1;
  END IF;
END PROCESS;
sec_pulse <= divider(7);

PROCESS(clk, reset) IS
  signal count : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
  IF(reset = '1') THEN
    count <= (OTHERS => '0');
  ELSIF rising_edge(clk) THEN
    IF(sec_pulse='1') THEN
      count <= count + 1;
      -- en al het andere wat je elke 
      -- seconde tick wilt doen
    END IF;
  END IF;
END PROCESS;

Op deze manier heb je nog maar een clk in je systeem, en dus ook een veel simpeler constraint voor je synthese.

Paar tips nog:
- Gebruik geen variabelen in synthetiseerbare code. Werkt alleen maar verwarrend als je vars en signals gaat mixen.
- Gebruik liever geen TABs, het schiet aan alle kanten buiten mn scherm. Gewoon spaties werkt veel handiger.

PS, code gaat nog niet helemaal goed omdat sec-pulse langer dan 1 clk cycle hoog is. Maar het gaat om het idee.