Forum: FPGA, VHDL & Co. Proceduren: Unterschied Altera und Xilinx


von PittyJ (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe ein ganz einfaches Testprogramm mit einer Unter-Procedure.

>>>>>>>>>>>>>>>>>>>>>>>
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;


entity testprocedure is
    Port ( signal Clock   : in  STD_LOGIC;
          signal Command : in  STD_LOGIC;
           signal Answer  : out  STD_LOGIC);
end testprocedure;

architecture Behavioral of testprocedure is

  procedure AA is begin
    if Command = '1' then
      Answer <= '1';
    else
      Answer <= '0';
    end if;
  end procedure AA;

begin

  main: process(Clock,Command) is begin
    if rising_edge(Clock) then
      AA  ;
    end if;

  end process;

end Behavioral;

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Altera Quartus kompiliert das wunderbar und erzeugt auch eine Logik 
dafür.

Bei Xilinx ISE 13.1 bekomme ich folgende Fehlermeldung:
HDLParsers:3426 -Line 16. Can not drive signal Answer in subprogram AA.

Ich möchte aber nicht alle Signale, die ja Entity-Global sind, noch an 
die Procedure extra weiter geben müssen.

Meiner Meinung nach müßte die Procedure so kompilieren.

Denke ich falsch?
Hat Xilinx eine Einschränkung?
Kann ich Answer in der Procedure zuweisen, ohne es im Procedure-Kopf 
übergeben?
Wenn Altera mehr kann, als die VHDL-Spec, wie muss das Programm nach der 
reinen VHDL-Spec aussehen?

von SuperWilly (Gast)


Lesenswert?

Probier mal, die Prozedur in den Prozess zu packen:
1
begin
2
3
  main: process(Clock,Command)
4
    procedure AA is
5
    begin
6
       if Command = '1' then
7
         Answer <= '1';
8
       else
9
         Answer <= '0';
10
       end if;
11
    end procedure AA;
12
13
  begin
14
    if rising_edge(Clock) then
15
      AA ;
16
    end if;
17
18
  end process;

VG, SuperWilly

von SuperWilly (Gast)


Lesenswert?

Command kann aus der Sensitivitätsliste.

von berndl k. (bernd_l)


Lesenswert?

was stoert es dich, wenn du die Signale bei der Prozedur definieren 
musst? Ich verwende Prozeduren oder Funktionen, wenn ich 'oft', aka mehr 
als einmal, etwas ausfuehren will, im Normalfall mit unterschiedlichen 
Parametern/Werten...

Und wenn du die Parameter angibst, hast du auch noch ein checking bzgl. 
'in', 'out', 'inout'; und das ist auch nicht zu verachten.

Dass Altera das schluckt finde ich eher befremdlich...

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


Lesenswert?

Bernd L. schrieb:
> Dass Altera das schluckt finde ich eher befremdlich...
Lattice (Synplify) macht da auch irgendwas draus...
Aber ich finde dieses Konstrukt mit den globalen Signalen auch ein wenig 
haarsträubend. Diese Prozedur kann ja sowieso nur von 1 Stelle aus 
aufgerufen werden, ich glaube nicht, dass der Synthesizer hier einen 
Aufruf aus 2 getrennten Prozessen packt...

von SuperWilly (Gast)


Lesenswert?

Was hilft es, dass die Synthese-Tools diese Beschreibung z.T. schlucken, 
wenn wann sie nicht simulieren kann ?
Modelsim schluckt die dubiose Beschreibung jedenfalls nicht! Also 
Prozedur rein in den Prozess.

VG, SuperWilly

von Klaus (Gast)


Lesenswert?

SuperWilly schrieb:
> Modelsim schluckt die dubiose Beschreibung jedenfalls nicht! Also
> Prozedur rein in den Prozess.

Nein, eher raus mit der Verwendung von Signalen in der Prozedur, welche 
der Prozedur nicht explizit übergeben wurden!

von SuperWilly (Gast)


Lesenswert?

>Nein, eher raus mit der Verwendung von Signalen in der Prozedur, welche
>der Prozedur nicht explizit übergeben wurden!

Diese Ansicht teile ich nicht. Es kann durchaus Sinn machen, gewisse 
Beschreibungsteile in Prozeduren auszulagern. Wieso soll man dann 
Prozess-Variablen und globale Signale explizit übergeben, wenn deren 
direkter Zugriff durch Einbindung der Prozedur in den Prozess geschenkt 
ist ?


VG, SuperWilly

von Klaus (Gast)


Lesenswert?

SuperWilly schrieb:
> Diese Ansicht teile ich nicht. Es kann durchaus Sinn machen, gewisse
> Beschreibungsteile in Prozeduren auszulagern. Wieso soll man dann
> Prozess-Variablen und globale Signale explizit übergeben, wenn deren
> direkter Zugriff durch Einbindung der Prozedur in den Prozess geschenkt
> ist ?

Gegenfrage: Wieso macht man bei herkömmlichen Programmiersprachen nicht 
alle Variablen global, wenn man auf die weiße den Zugriff auf alles ohne 
Parameterübergabe geschenkt bekommt?

von SuperWilly (Gast)


Lesenswert?

Zeig mir ein kleines VHDL-Beispiel, bei dem der Gültigskeitraum von 
Variablen oder Signalen zu funktionalen Problemen führt, ohne dass der 
Compiler es einem um die Ohren haut.


VG, SuperWilly

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.