Forum: FPGA, VHDL & Co. procedure ohne ergebniss


von Mike (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Was sagt die Simulation?

Ich könnte mir gut vorstellen, dass du Probleme mit dem Takt in der 
Prozedur hast. Probiers doch mal so:
1
   procedure PUSH(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); -- Hmhmhmhm, ob das gut geht... 
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;
19
:
20
:
21
  PUSH0_P : process(CLK_I)
22
  begin
23
   if rising_edge(CLK_I) then
24
    PUSH(PUSH0,pressed,open,open);
25
    if pressed = '1' then
26
      counter <= counter + 1;
27
    end if;
28
   end if;
29
 end process;

von Mike (Gast)


Lesenswert?

Hallo

testbench habe ich leider noch keine geschrieben (ich hielt den Code für 
überschaubar)

Bzw vermute ich das der Synthesiser hier aussteigt und die Simulation 
hier nutzlos wird.... (Da selber code als prozess in einer Entity 
FUNKTIONIERT)


Selbe Fehler meldung:
Warning: Design contains 2 input pin(s) that do not drive logic
  Warning (15610): No output dependent on input pin "CLK_I"
  Warning (15610): No output dependent on input pin "PUSH0"

lg Mike

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.