Hallo
Also ich wollte ein Procedur bauen mit der in Button pressed und releasd
feststellen kann. Diese wollte ich dann mittels counter zählen.
Ich habe dafür folgende Procedur in einem package definiert und dann
verwendet
Leider meint der Quartus compiler das CLK_I und PUSH0 input sind die
nichts treiben, bzw legt dann PUSH0 auf grund und der Counter
funktioniert nicht.
In einer eigenen Entity funktioniert der selbe Code als Prozess sehr
gut.
Hoffe ihr könnt mir sagen was ich an Proceduren nicht verstanden habe
oder scheitert hier der Synthesiser?
1 | procedure PUSH(signal clk_i,push_i : in std_logic;
|
2 | signal push_pressed, push_released, push_state : out std_logic) is
|
3 |
|
4 | variable tmp : std_logic_vector(1 downto 0);
|
5 | begin
|
6 | if rising_edge(clk_i) then
|
7 | tmp := tmp(0) & push_i;
|
8 | push_pressed <= '0';
|
9 | push_released <= '0';
|
10 | push_state <= push_i;
|
11 |
|
12 | if( tmp = "10") then
|
13 | push_pressed <= '1';
|
14 | elsif( tmp = "01") then
|
15 | push_released <= '1';
|
16 | end if;
|
17 | end if;
|
18 | end PUSH;
|
1 | PUSH (clk_i => CLK_I,
|
2 | push_i => PUSH0,
|
3 | push_pressed => pressed,
|
4 | push_released => open,
|
5 | push_state => open);
|
6 |
|
7 | PUSH0_P : process(CLK_I)
|
8 | begin
|
9 |
|
10 | if rising_edge(CLK_I) then
|
11 | if pressed = '1' then
|
12 | counter <= counter + 1;
|
13 | end if;
|
14 | end if;
|
lg Mike