Hi,
bin absoluter Anfänger in VHDL und versuche es gerade mit learning by
doing zu lernen. Ich arbeite mit Altera Quartus II und einem DE1 Board.
Die ersten Gehversuche waren erfolgreich, mein mehrschrittiges 5-bit
Multiplizierwerk funktioniert - allerdings bisher nur mit einem Taster
von Hand getaktet.
Mein Problem ist, ich bekomme es nicht beschrieben, dass nach dem
init-Tastendruck (2 5-bit Zahlen werden davor mit den 10 vorhandenen
Schaltern eingestellt) genau 5 Clock Impulse für die Register generiert
werden. Ich bekomme diverse Fehlermeldungen aus denen ich kaum schlau
werde, bevorzugt diese: "Error (10818): Can't infer register for
"count[17]" at clock_gate.vhd(21) because it does not hold its value
outside the clock edge"
Mein letzter Ansatz ist:
1 | library ieee;
|
2 | use ieee.std_logic_1164.all;
|
3 |
|
4 | entity clock_gate is
|
5 | port(
|
6 | clk_in, init : in std_logic;
|
7 | clk_out : buffer std_logic := '0'
|
8 | );
|
9 | end entity clock_gate;
|
10 |
|
11 | architecture behav of clock_gate is
|
12 | signal count: natural := 10;
|
13 | begin
|
14 | process(init,clk_in) is
|
15 | begin
|
16 | if init = '1' then
|
17 | count <= 0;
|
18 | clk_out <= '0';
|
19 | end if;
|
20 | if rising_edge(clk_in) and init = '0' then
|
21 | if clk_out = '0' and count < 10 then
|
22 | clk_out <= '1';
|
23 | count <= count+1;
|
24 | elsif clk_out = '1' and count < 10 then
|
25 | clk_out <= '0';
|
26 | count <= count+1;
|
27 | else
|
28 | clk_out <= '0';
|
29 | end if;
|
30 | end if;
|
31 | end process;
|
32 | end architecture behav;
|
..und es ist nicht synthetisierbar. An clk_in sollte ein beliebiger der
vorhandenen Oszillatoren gehängt werden.
Hat da jemand einen guten Tipp? Ich krieg bald die Krise, da die
Grundaufgabe eigentlich echt einfach ist, ich aber keine funktionierende
Beschreibung hinbring..
Gruß :)