Forum: FPGA, VHDL & Co. VHDL Synthese und Simulation


von Kaffeetasse (Gast)


Lesenswert?

Hallo,
ich bin noch neu im Gebiet des VHDL und habe einen VHDl-Code erzeugt 
welcher in der Simulation funktioniert, die Synthese "klappt" auch - 
jedoch nach der Simulation der synthetisierten Datei funktioniert leider 
nichts mehr... Meine Vermutung ist nun das ich nicht synthesefähigen 
Code erzeugt habe. Kann evtl. jemand im nachfolgenden Code die Stelle 
benennen an der ich den nicht synthesefähigen Code verwende ? (Info am 
Rande: synchronisiert wird das ganze mit dem q_st-Signal)

Vielen Dank!
LG K.

CODE:
1
--funktionsblock: AMPELKREUZUNG
2
---------------------------------
3
LIBRARY IEEE ; 
4
USE IEEE.STD_LOGIC_1164.ALL; 
5
USE IEEE.STD_LOGIC_ARITH.ALL ; 
6
USE IEEE.STD_LOGIC_UNSIGNED.ALL ; 
7
---------------------------------
8
9
-------------------------------------------------------------------------------------------
10
ENTITY ampelkreuzung IS 
11
PORT (sensoren: IN STD_LOGIC;                  --EINGANGSSIGNAL NÄHERUNGSSENSOREN KFZ
12
      f_sensoren: IN STD_LOGIC;                --EINGANGSSIGNAL FUSSGAENGERAMPEL  
13
      en: IN STD_LOGIC;                        --ON/OFF-SIGNAL
14
      t_n: IN STD_LOGIC;                       --TAG/NACHT-SENSORSIGNAL
15
      q_st: IN STD_LOGIC_VECTOR(4 DOWNTO 0);   --EINGANGSSINAL TAKTGEBER SIGNALUMSCHALTUNG
16
      stsig1: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 1
17
      stsig2: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 2
18
      stsig3: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 3
19
      stsig4: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 4
20
      stsig5: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL F-AMPEL 1
21
      stsig6: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL F-AMPEL 2
22
      stsig7: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL F-AMPEL 3
23
      stsig8: OUT  BIT_VECTOR ( 3 DOWNTO 0));  --STEUERSIGNAL F-AMPEL 4
24
END ampelkreuzung;
25
-------------------------------------------------------------------------------------------
26
27
-------------------------------------------------------------------------------------------
28
ARCHITECTURE behav OF ampelkreuzung IS 
29
30
  BEGIN
31
32
  p1 : PROCESS (sensoren, en, t_n, q_st)
33
  
34
  -----------------------------------------------------------------------------
35
  VARIABLE state: INTEGER RANGE 0 TO 4;       --ZUSTANDSVARIABLE
36
  VARIABLE state_2: INTEGER RANGE 0 TO 4;     --NEBENZUSTANDSVARIABLE
37
  VARIABLE sig1: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 1
38
  VARIABLE sig2: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 2
39
  VARIABLE sig3: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 3
40
  VARIABLE sig4: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 4
41
  VARIABLE sig5: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 5
42
  VARIABLE sig6: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 6
43
  VARIABLE sig7: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 7
44
  VARIABLE sig8: BIT_VECTOR ( 3 DOWNTO 0);    --SPEICHERVARIABLE STEUERSIGNAL 8
45
  -----------------------------------------------------------------------------
46
  
47
  BEGIN  
48
    
49
      IF (sensoren='1' AND t_n='0' AND en='1') THEN state:=1;  END IF;       -- ZUSTANDSABFRAGE
50
      IF (f_sensoren='1' AND t_n='0' AND en='1') THEN state_2:=1;  END IF;   -- ZUSTANDSABFRAGE_2
51
      ------------------------------------------------------------------------------------------------------------------  
52
      IF (state=0 AND (state_2=0 OR state_2=1) AND t_n='0') THEN sig1:="0011"; sig2:="0011"; sig3:="0001"; sig4:="0001"; 
53
                                                                 sig5:="0001"; sig6:="0001"; sig7:="0001"; sig8:="0001"; 
54
          --TAG + KEIN AUTO NS = HS GRUEN & NS ROT
55
      -------------------------------------------------------------------------------------------------------------------
56
      ELSIF (t_n='1' AND en='1') THEN sig1:="0000"; sig2:="0000"; sig3:="0101"; sig4:="0101"; 
57
                                      sig5:="0000"; sig6:="0000"; sig7:="0000"; sig8:="0000";
58
          --NACHT = HS AUS & NS GELB/AUS + FUSSGAENGERAMPEL AUS
59
      -------------------------------------------------------------------------------------------------------------------
60
      ELSIF (state=1 AND q_st="00101" AND en='1') THEN sig1:="0100"; sig2:="0100"; sig3:="0010"; sig4:="0010";
61
          --TAG + AUTO DA + TIMER=>5 = HS GELB & NS ROT-GELB
62
      ELSIF (state=1 AND q_st="01000" AND en='1') THEN sig1:="0001"; sig2:="0001"; sig3:="0010"; sig4:="0010";
63
          --TAG + AUTO DA + TIMER=>8 = HS ROT & NS ROT-GELB
64
      ELSIF (state=1 AND q_st="01001" AND en='1') THEN sig1:="0001"; sig2:="0001"; sig3:="0011"; sig4:="0011";
65
          --TAG + AUTO DA + TIMER=>9 = HS ROT & NS GRUEN
66
      ELSIF (state=1 AND q_st="01111" AND en='1') THEN sig1:="0010"; sig2:="0010"; sig3:="0100"; sig4:="0100";
67
          --TAG + AUTO DA + TIMER=>15 = HS ROT-GELB & NS GELB 
68
      ELSIF (state=1 AND q_st="10000" AND en='1') THEN sig1:="0010"; sig2:="0010"; sig3:="0001"; sig4:="0001";
69
          --TAG + AUTO DA + TIMER=>18 = HS ROT-GELB & NS ROT
70
      ELSIF (state=1 AND q_st="10011" AND en='1') THEN sig1:="0011"; sig2:="0011"; sig3:="0001"; sig4:="0001";
71
          --TAG + AUTO DA + TIMER=>19 = HS GRÜN & NS ROT
72
      ELSIF (q_st="11110" AND en='1') THEN state:=0; state_2:=0;
73
          --TIMER=>30 = STATE WIEDER 0
74
      END IF; 
75
      ---------------------------------------------------------------------
76
      IF (state=1 AND state_2=1 AND q_st="01001" AND en='1') THEN
77
      sig5:="0010"; sig6:="0010"; sig7:="0010"; sig8:="0010"; END IF;
78
          --TAG + FUSSGAENGER DA + TIMER=>9 = F-AMPEL GRUEN
79
      IF (state=1 AND state_2=1 AND q_st="01111" AND en='1') THEN
80
      sig5:="0001"; sig6:="0001"; sig7:="0001"; sig8:="0001"; END IF;
81
          --TAG + FUSSGAENGER DA + TIMER=>15 = F-AMPEL ROT
82
      ---------------------------------------------------------------------
83
  
84
  --SPEICHERVARIABELN ERGEBEN SICH ZU STEUERSIGNALE:
85
  -------------
86
  stsig1<=sig1;   
87
  stsig2<=sig2;
88
  stsig3<=sig3;
89
  stsig4<=sig4;
90
  stsig5<=sig5;   
91
  stsig6<=sig6;
92
  stsig7<=sig7;
93
  stsig8<=sig8;
94
  -------------
95
  
96
  END PROCESS p1 ; 
97
98
END behav;

FORCE-FILE:

force en 1  0 ns;
force t_n 1 0ns, 0 600 ns;
force sensoren 0 0ns, 1 300 ns, 0 500 ns, 1 1200 ns, 0 1800 ns, 1 2300 
ns;
force f_sensoren 0 0ns, 1 300 ns, 0 500 ns, 1 1200 ns, 0 1800 ns, 1 2300
ns;
force q_st 2#00000 0;
force q_st 2#00101 1300;
force q_st 2#01000 1500;
force q_st 2#01001 2000;
force q_st 2#01111 2500;
force q_st 2#10000 2700;
force q_st 2#10011 3000;
force q_st 2#10100 3200;
force q_st 2#11110 3500;

von Selbständiger (Gast)


Lesenswert?

Könnte ein Phantomfehler sein. Das mit den force Anweisungen kenne ich 
so nicht. Mach mal lieber eine Testbench, die läuft und die man per 
Simulation laufen lassen kann. Dann die Ergebnisse visuell 
dokumentieren. Meistens siehst Du dann schon selber, was nicht nicht.

von PittyJ (Gast)


Lesenswert?

Soll das wirklich auf ein FPGA synthetisiert werden?
Ich habe es anders gelernt. So mit Clock und rising_edge. Und Variablen 
sind für mich tabu, ich nehme Signale.
Mit diesen Einschränkungen lief es dann viel besser.

Welches Lehrbuch hast du?

von Klaus F. (kfalser)


Lesenswert?

Das Ganze fängt schon damit an, dass Du keine synthetisierbare 
Beschreibung für eine getaktete Schaltung verwendest.
Diese schaut nämlich so aus:
1
process(clk) is 
2
begin
3
    if rising_edge(clk) 
4
       if .,...
5
    end if;
6
end process;

clk wäre bei Dir q_st, nehme ich an.

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


Lesenswert?

Kaffeetasse schrieb:
> Meine Vermutung ist nun das ich nicht synthesefähigen Code erzeugt habe.
Du vermutest richtig. Das Ganze ist nur ein unübersichtlicher 
monstergroßer Kombinatorikhaufen. Darin ist kein definiertes 
Speicherelement, so eines wäre aber zum Speichern des aktuellen 
Ampelzustand unbedingt nötig.

Zudem ist durch deine Variablengeschichte die Suimulation einfach 
falsch, weil eigentlich eine Änderung von z.B. state auch eine 
Neuberechnung des Prozesses nötig macht. Weil aber eine Variable nicht 
in die Sensitivliste genommen werden kann, ist die Simulation falsch, 
denn die Hardware wird sich anders verhalten. Dazu der Klassiker:
Beitrag "Variable vs Signal"
Kurz: verwende niemals speichernde Variablen. Oder wenn schon, dann 
nach frühestens 1 Jahr ausgiebiger VHDL Praxis und nur in einem 
getakteten Prozess.

Und zur Simulation: vergiss diesen FORCE-Murks! Du hast doch VHDL für 
die Testbench. Mach erst mal eine blinkende LED und die zugehörige 
Simulation:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html
Und dann das Lauflicht:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html
Und insgesamt ist eine Ampel nichts anderes als ein etwas aufwendigeres 
Lauflicht...

Sieh dir mal diese Ampel an. Und verstehe sie. Vielleicht wird dir dann 
etwas klrer, was du alles falsch machst:
Beitrag "Re: Ampelsteuerung"

von Kaffeetasse (Gast)


Angehängte Dateien:

Lesenswert?

vielen dank für die vielen anmerkungen... ich habe mich mal an einige 
verbesserungen gemacht aber das problem bleibt das gleiche: simulation 
funktioniert, synthese + simulation nicht... im anhang hab ich das 
simulationsergebnis VOR der synthese (pic)... mein neuer quelltext + dem 
syntheseergebniss hab ich mal am anschluss aufgeführt. weis evtl. wer 
was weiterhin falsch ist?
vielen dank!
lg martin

quellcode:
1
LIBRARY IEEE ; 
2
USE IEEE.STD_LOGIC_1164.ALL; 
3
USE IEEE.STD_LOGIC_ARITH.ALL; 
4
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 
5
USE IEEE.NUMERIC_STD.ALL;
6
7
ENTITY ampelkreuzung IS 
8
PORT (sen1, sen2: IN STD_LOGIC;              --EINGANGSSIGNAL NÄHERUNGSSENSOREN KFZ
9
      en: IN STD_LOGIC;                      --ON/OFF-SIGNAL
10
      clk: IN STD_LOGIC ;                    --TAKT- & RESET-SIGNAL
11
      nacht: IN STD_LOGIC;                   --TAG/NACHT-SENSORSIGNAL
12
      sig1: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 1
13
      sig2: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 2
14
      sig3: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 3
15
      sig4: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL AMPEL 4
16
      sig5: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL F-AMPEL 1
17
      sig6: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL F-AMPEL 2
18
      sig7: OUT  BIT_VECTOR ( 3 DOWNTO 0);   --STEUERSIGNAL F-AMPEL 3
19
      sig8: OUT  BIT_VECTOR ( 3 DOWNTO 0));  --STEUERSIGNAL F-AMPEL 4    
20
END ampelkreuzung;
21
22
ARCHITECTURE behav OF ampelkreuzung IS 
23
24
  constant sec : integer := 5;                  --ZÄHLERKONSTANTE
25
  signal time : integer range 0 to 5*sec;       --ZÄHLERSIGNAL
26
  signal state : integer range 0 to 7;          --STATUSSIGNAL
27
  signal sensoren : STD_LOGIC;                  --INTERNES SENSORSIGNAL
28
29
  BEGIN
30
31
  p1 : PROCESS (clk, sensoren, en, nacht)
32
  
33
  BEGIN
34
    
35
  -----------------------------------------------------------
36
  IF ( clk'EVENT AND clk = '1' AND clk'LAST_VALUE = '0') THEN      --SYNCHRONISATION
37
  
38
  ---------------------------------
39
  IF (time/=0) THEN time <= time-1; --ZÄHLER
40
  END IF;
41
  ---------------------------------
42
  
43
  ---------------------------------------------
44
  IF (sen1='1' OR sen2='1') THEN sensoren<='1';  --SENSOR 1 ODER SENSOR 2 DANN OUT AUF HIGH  
45
  ELSE sensoren<='0';                            --SONST OUT AUF LOW 
46
  END IF; 
47
  ---------------------------------------------
48
  
49
  ---------------------------------
50
  IF (state=0) THEN --SENSORABFRAGE
51
    IF (sensoren = '1') THEN state <= 1;
52
                             time <= 2*sec;
53
    END IF;
54
  END IF;
55
  ---------------------------------
56
  
57
  ---------------------------------------------------------
58
  IF(nacht='1' AND en='1')                                   --NACHTSCHALTUNG
59
  THEN 
60
    sig1<="0000"; sig2<="0000"; sig3<="0101"; sig4<="0101";
61
    sig5<="0000"; sig6<="0000"; sig7<="0000"; sig8<="0000";
62
  END IF;
63
  ---------------------------------------------------------
64
  
65
  --------------------------------------------------------------------
66
  IF(time=0)
67
  THEN
68
    
69
    IF(nacht='0' AND en='1')
70
    THEN
71
    
72
    CASE state IS
73
      
74
    WHEN 0 => sig1<="0011"; sig2<="0011"; sig3<="0001"; sig4<="0001"; 
75
              sig5<="0001"; sig6<="0001"; sig7<="0001"; sig8<="0001"; 
76
              --TAG + KEIN AUTO NS = HS GRUEN & NS ROT
77
               
78
    WHEN 1 => sig1<="0100"; sig2<="0100"; sig3<="0010"; sig4<="0010";
79
              time <= 2*sec;
80
              state <= 2;
81
              --TAG + AUTO DA + TIMER=>2 = HS GELB & NS ROT-GELB
82
  
83
    WHEN 2 => sig1<="0001"; sig2<="0001"; sig3<="0010"; sig4<="0010";  
84
              time <= 2*sec;
85
              state <= 3;
86
              --TAG + AUTO DA + TIMER=>2 = HS ROT & NS ROT-GELB
87
              
88
    WHEN 3 => sig1<="0001"; sig2<="0001"; sig3<="0011"; sig4<="0011";
89
              sig5<="0010"; sig6<="0010"; sig7<="0010"; sig8<="0010"; 
90
              time <= 3*sec;
91
              state <= 4; 
92
              --TAG + AUTO DA + TIMER=>2 = HS ROT & NS GRUEN + F-AMPEL GRUEN
93
              
94
    WHEN 4 => sig1<="0010"; sig2<="0010"; sig3<="0100"; sig4<="0100";
95
              sig5<="0001"; sig6<="0001"; sig7<="0001"; sig8<="0001";  
96
              time <= 2*sec;
97
              state <= 5;
98
              --TAG + AUTO DA + TIMER=>2 = HS ROT-GELB & NS GELB + F-AMPEL ROT
99
    
100
    WHEN 5 => sig1<="0010"; sig2<="0010"; sig3<="0001"; sig4<="0001";
101
              time <= 2*sec;
102
              state <= 6;
103
              --TAG + AUTO DA + TIMER=>2 = HS ROT-GELB & NS ROT 
104
              
105
    WHEN 6 => sig1<="0011"; sig2<="0011"; sig3<="0001"; sig4<="0001";
106
              time <= 2*sec;
107
              state <= 7;
108
              --TAG + AUTO DA + TIMER=>2 = HS GRÜN & NS ROT
109
    
110
    WHEN 7 => state <= 0;
111
    
112
    END CASE;
113
  
114
    END IF;
115
    
116
  END IF;            
117
 
118
  END IF;
119
  
120
  END PROCESS p1 ; 
121
122
END behav;

synthese:
1
library IEEE,MTC45000;
2
use MTC45000.MTC45000_vcomponents.all;
3
use IEEE.STD_LOGIC_1164.all;
4
5
entity ampelkreuzung_synth is
6
   port (
7
      sen1 : IN std_logic ;
8
      sen2 : IN std_logic ;
9
      en : IN std_logic ;
10
      clk : IN std_logic ;
11
      nacht : IN std_logic ;
12
      sig1 : OUT std_logic_vector (3 DOWNTO 0) ;
13
      sig2 : OUT std_logic_vector (3 DOWNTO 0) ;
14
      sig3 : OUT std_logic_vector (3 DOWNTO 0) ;
15
      sig4 : OUT std_logic_vector (3 DOWNTO 0) ;
16
      sig5 : OUT std_logic_vector (3 DOWNTO 0) ;
17
      sig6 : OUT std_logic_vector (3 DOWNTO 0) ;
18
      sig7 : OUT std_logic_vector (3 DOWNTO 0) ;
19
      sig8 : OUT std_logic_vector (3 DOWNTO 0)) ;
20
end ampelkreuzung_synth ;
21
22
architecture behav of ampelkreuzung_synth is
23
   signal sig2_dup0_2, sig2_dup0_1, sig2_dup0_0, sig4_dup0_2, sig4_dup0_1, 
24
      sig4_dup0_0, sig8_dup0_1, sig8_dup0_0, sig1_dup0_3, state_2, time_4, 
25
      state_0, nx1454, state_1, sensoren, nx30, nx40, nx56, nx66, time_3, 
26
      nx1455, nx1456, time_2, time_1, time_0, nx74, NOT_294, nx166, nx212, 
27
      nx238, nx250, nx262, nx272, NOT_nx1453, nx1466, nx1496, nx1504, nx1514, 
28
      nx1524, nx1536, nx1546, nx1556, NOT_nx244, nx1594, nx1596, nx1606, 
29
      nx1614, nx1616, nx1632, nx1636, nx1640, nx1644, nx1647, nx1649, nx1655, 
30
      nx1662, nx1664, nx1667, nx1671, nx1677, nx1680, nx1684, nx1688, nx1691, 
31
      nx1694, nx1703, nx1705, nx1708, nx1714, nx1719, nx1733: std_logic ;
32
33
begin
34
   sig1(3) <= sig1_dup0_3 ;
35
   sig1(2) <= sig2_dup0_2 ;
36
   sig1(1) <= sig2_dup0_1 ;
37
   sig1(0) <= sig2_dup0_0 ;
38
   sig2(3) <= sig1_dup0_3 ;
39
   sig2(2) <= sig2_dup0_2 ;
40
   sig2(1) <= sig2_dup0_1 ;
41
   sig2(0) <= sig2_dup0_0 ;
42
   sig3(3) <= sig1_dup0_3 ;
43
   sig3(2) <= sig4_dup0_2 ;
44
   sig3(1) <= sig4_dup0_1 ;
45
   sig3(0) <= sig4_dup0_0 ;
46
   sig4(3) <= sig1_dup0_3 ;
47
   sig4(2) <= sig4_dup0_2 ;
48
   sig4(1) <= sig4_dup0_1 ;
49
   sig4(0) <= sig4_dup0_0 ;
50
   sig5(3) <= sig1_dup0_3 ;
51
   sig5(2) <= sig1_dup0_3 ;
52
   sig5(1) <= sig8_dup0_1 ;
53
   sig5(0) <= sig8_dup0_0 ;
54
   sig6(3) <= sig1_dup0_3 ;
55
   sig6(2) <= sig1_dup0_3 ;
56
   sig6(1) <= sig8_dup0_1 ;
57
   sig6(0) <= sig8_dup0_0 ;
58
   sig7(3) <= sig1_dup0_3 ;
59
   sig7(2) <= sig1_dup0_3 ;
60
   sig7(1) <= sig8_dup0_1 ;
61
   sig7(0) <= sig8_dup0_0 ;
62
   sig8(3) <= sig1_dup0_3 ;
63
   sig8(2) <= sig1_dup0_3 ;
64
   sig8(1) <= sig8_dup0_1 ;
65
   sig8(0) <= sig8_dup0_0 ;
66
   --ix1439 : GND port map ( Y=>sig1_dup0_3);
67
   sig1_dup0_3 <='0';
68
   ix1547 : AO35X05 port map ( Z=>nx1546, A=>state_0, B=>state_1, C=>nx1454, 
69
      D=>nx1705, E=>nx212);
70
   ix41 : MUX21X05 port map ( Z=>nx40, A=>sensoren, B=>nx1632, S=>nx1649);
71
   reg_sensoren : FD1QM port map ( Q=>sensoren, CP=>clk, D=>nx30);
72
   ix31 : OR2 port map ( Z=>nx30, A=>sen1, B=>sen2);
73
   reg_state_0 : FD1SM port map ( Q=>state_0, QN=>nx1632, CP=>clk, D=>nx40, 
74
      TE=>NOT_nx1453, TI=>state_0);
75
   ix1635 : NR2 port map ( Z=>NOT_nx1453, A=>nx1636, B=>nx1664);
76
   reg_state_1 : FD1M port map ( Q=>state_1, QN=>nx1640, CP=>clk, D=>nx1466
77
   );
78
   reg_state_2 : FD1M port map ( Q=>state_2, QN=>nx1644, CP=>clk, D=>nx1536
79
   );
80
   ix1537 : AO4 port map ( Z=>nx1536, A=>nx1647, B=>NOT_nx1453, C=>nx1644, D
81
      =>nx1664);
82
   reg_time_0 : FD1SQM port map ( Q=>time_0, CP=>clk, D=>nx74, TE=>NOT_294, 
83
      TI=>time_0);
84
   ix75 : AO7 port map ( Z=>nx74, A=>time_0, B=>nx66, C=>nx1662);
85
   ix1663 : ND4 port map ( Z=>nx1662, A=>nx1644, B=>state_1, C=>state_0, D=>
86
      nx1664);
87
   ix1665 : NR4X05 port map ( Z=>nx1664, A=>nx1456, B=>time_4, C=>nacht, D=>
88
      nx1694);
89
   ix1668 : NR3X05 port map ( Z=>nx1667, A=>time_0, B=>time_1, C=>time_2);
90
   ix1497 : AO7 port map ( Z=>nx1496, A=>nx1671, B=>nx1455, C=>nx1680);
91
   reg_time_1 : FD1M port map ( Q=>time_1, QN=>nx1671, CP=>clk, D=>nx1496);
92
   reg_time_4 : FD1M port map ( Q=>time_4, QN=>OPEN, CP=>clk, D=>nx1524);
93
   ix1525 : AN3 port map ( Z=>nx1524, A=>nx1677, B=>time_4, C=>nx1456);
94
   ix1678 : AO2 port map ( Z=>nx1677, A=>nx56, B=>nx1649, C=>sensoren, D=>
95
      nx1636);
96
   ix1681 : AO26X05 port map ( Z=>nx1680, A=>time_1, B=>time_0, C=>nx66, D=>
97
      nx1655, E=>nx1455);
98
   ix1505 : AO20X05 port map ( Z=>nx1504, A=>nx66, B=>nx1684, C=>nx1662, D=>
99
      NOT_294);
100
   ix1685 : AO20X05 port map ( Z=>nx1684, A=>time_0, B=>time_1, C=>time_2, D
101
      =>nx1667);
102
   ix1687 : NR3X05 port map ( Z=>NOT_294, A=>nx1456, B=>time_4, C=>nx66);
103
   reg_time_3 : FD1M port map ( Q=>time_3, QN=>nx1688, CP=>clk, D=>nx1514);
104
   ix1515 : AO28 port map ( Z=>nx1514, A=>nx1691, B=>nx1677, C=>nx1456, D=>
105
      NOT_294);
106
   ix1695 : IV port map ( Z=>nx1694, A=>en);
107
   reg_time_2 : FD1M port map ( Q=>time_2, QN=>OPEN, CP=>clk, D=>nx1504);
108
   reg_sig8_0 : FD1M port map ( Q=>sig8_dup0_0, QN=>nx1705, CP=>clk, D=>
109
      nx1546);
110
   ix213 : ND2 port map ( Z=>nx212, A=>nx1708, B=>nx1662);
111
   ix1709 : AO29 port map ( Z=>nx1708, A=>nx1664, B=>nx1640, C=>nx1632, D=>
112
      en, E=>nacht);
113
   reg_sig8_1 : FD1QM port map ( Q=>sig8_dup0_1, CP=>clk, D=>nx1556);
114
   ix1557 : AO7A port map ( Z=>nx1556, A=>sig8_dup0_1, B=>nx212, C=>nx1662);
115
   reg_sig4_0 : FD1SQM port map ( Q=>sig4_dup0_0, CP=>clk, D=>nx250, TE=>
116
      NOT_nx244, TI=>sig4_dup0_0);
117
   ix251 : AO7 port map ( Z=>nx250, A=>nx1714, B=>nx166, C=>nx1664);
118
   ix1718 : AO6 port map ( Z=>NOT_nx244, A=>en, B=>nacht, C=>nx1719);
119
   reg_sig4_1 : FD1SQM port map ( Q=>sig4_dup0_1, CP=>clk, D=>nx262, TE=>
120
      NOT_nx244, TI=>sig4_dup0_1);
121
   reg_sig4_2 : FD1SQM port map ( Q=>sig4_dup0_2, CP=>clk, D=>nx272, TE=>
122
      NOT_nx244, TI=>sig4_dup0_2);
123
   ix273 : OR2 port map ( Z=>nx272, A=>nx238, B=>nx1714);
124
   ix239 : ND2 port map ( Z=>nx238, A=>nx1664, B=>nx56);
125
   reg_sig2_0 : FD1QM port map ( Q=>sig2_dup0_0, CP=>clk, D=>nx1596);
126
   ix1597 : AO6N port map ( Z=>nx1596, A=>sig2_dup0_0, B=>NOT_nx244, C=>
127
      nx1594);
128
   ix1595 : AO20X05 port map ( Z=>nx1594, A=>state_2, B=>state_0, C=>nx1640, 
129
      D=>nx238);
130
   reg_sig2_1 : FD1QM port map ( Q=>sig2_dup0_1, CP=>clk, D=>nx1606);
131
   reg_sig2_2 : FD1QM port map ( Q=>sig2_dup0_2, CP=>clk, D=>nx1616);
132
   ix1617 : AO6N port map ( Z=>nx1616, A=>sig2_dup0_2, B=>NOT_nx244, C=>
133
      nx1614);
134
   ix263 : IV port map ( Z=>nx262, A=>nx1733);
135
   ix1720 : IV port map ( Z=>nx1719, A=>nx238);
136
   ix137 : IV port map ( Z=>nx1455, A=>NOT_294);
137
   ix67 : IV port map ( Z=>nx66, A=>nx1677);
138
   ix157 : IV port map ( Z=>nx1454, A=>nx1664);
139
   ix1637 : AN3 port map ( Z=>nx1636, A=>nx1640, B=>nx1644, C=>nx1632);
140
   ix1467 : AO2AN port map ( Z=>nx1466, A=>nx1703, B=>nx1664, C=>state_1, D
141
      =>NOT_nx1453);
142
   ix1648 : ND3A port map ( Z=>nx1647, A=>nx166, B=>nx1649, C=>nx56);
143
   ix1650 : NR2A port map ( Z=>nx1649, B=>nx1636, A=>nx1664);
144
   ix1656 : NR2A port map ( Z=>nx1655, B=>time_0, A=>nx1671);
145
   ix57 : OR3 port map ( Z=>nx56, A=>nx1640, B=>nx1644, C=>nx1632);
146
   ix133 : ND2A port map ( Z=>nx1456, A=>time_3, B=>nx1667);
147
   ix1692 : OR2 port map ( Z=>nx1691, A=>nx1688, B=>nx1667);
148
   ix1704 : ENX05 port map ( Z=>nx1703, A=>nx1632, B=>nx1640);
149
   ix1715 : AN3 port map ( Z=>nx1714, A=>nx1640, B=>state_2, C=>nx1632);
150
   ix167 : NR2A port map ( Z=>nx166, B=>nx1703, A=>nx1644);
151
   ix1607 : AO2AN port map ( Z=>nx1606, A=>nx238, B=>nx1733, C=>sig2_dup0_1, 
152
      D=>NOT_nx244);
153
   ix1734 : AO3C port map ( Z=>nx1733, A=>state_0, B=>state_1, C=>state_2, D
154
      =>nx1664);
155
   ix1615 : AN4 port map ( Z=>nx1614, A=>nx1644, B=>nx1640, C=>state_0, D=>
156
      nx1664);
157
end behav ;

von bko (Gast)


Lesenswert?

>ich habe mich mal an einige
>verbesserungen gemacht aber das problem bleibt das gleiche: simulation
>funktioniert, synthese + simulation nicht..

Was genau funktioniert nicht? Waveform?

>MTC45000.MTC45000_vcomponents.all;
Was ist dein Zielplattform?

MTC45000 ist doch eine Actel ASIC Lib oder irre ich mich?

von Kaffeetasse (Gast)


Lesenswert?

naja nachdem von"nacht" in den "tag" geschalten wird bei der 
ampelkreuzung sind auf einmal alle ausgänge undefeniert...
zielplattform ist:
Die Entwurfsimplementierung erfolgt an einem Spartan-Board mit dem 
FPGA-Typ XC3S500E, Package FG320, Speed Grade -5.

von bko (Gast)


Lesenswert?

Bin verwirrt, das da ist doch kein Xilinx!
>synthese:
>library IEEE,MTC45000;
>use MTC45000.MTC45000_vcomponents.all;
> (...)
>   reg_time_0 : FD1SQM port map ( Q=>time_0, CP=>clk, D=>nx74, >TE=>NOT_294,
>      TI=>time_0);
>   ix75 : AO7 port map ( Z=>nx74, A=>time_0, B=>nx66, C=>nx1662); D=>
> (...)
Das ist eine Alcatel CMOS 0.5u(o.ä.) CMOS-lib in der die Flipflop-Resets
fehlen!

Wenn du ein Asic machen willst, dann brauchst du eher so einen Reset:
Beitrag "Re: Reset für mehrere Komponenten"
Sonst geht in der Postlayoutsimulation wenig.
Syncron oder Asyncron, der Reset muss so oder so einsyncronisiert werden

Falls du aber tatsächlich ein FPGA als Ziel hast, dann gehen
auch initial Werte wie z.B.:

signal state : integer range 0 to 7 := 0;

Beitrag "Xilinx und die Resets"

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


Lesenswert?

Kaffeetasse schrieb:
> LIBRARY IEEE ;
> USE IEEE.STD_LOGIC_1164.ALL;
> USE IEEE.STD_LOGIC_ARITH.ALL;
> USE IEEE.STD_LOGIC_UNSIGNED.ALL;
> USE IEEE.NUMERIC_STD.ALL;
Hach....
Viel hilft viel. Such mal hier im Forum nach "STD_LOGIC_ARITH 
obsolete"...

>  p1 : PROCESS (clk, sensoren, en, nacht)
Wenn das wirklich ein synchroner Prozess ist, der nur auf clk reagiert, 
dann ist diese Sensitivliste überdefiniert.

BTW: Lange Quelltexte bitte als VHDL Datei anhängen.

: Bearbeitet durch Moderator
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.