Forum: FPGA, VHDL & Co. Quartus VHDL error 10821


von Thomas R. (tinman) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

Da mein lieblingspinball langsam den geist aufgibt wollte teile davon in 
einem FPGA implementieren. Da der soundboard sehr einfach aufgebaut ist 
(6800/6821/ROM/RAM/DAC) fing ich erst damit.

Mit dem 6800/RAM/ROM ging schnell, war fehlt ist 6821 i/o. Beim 
opencores habe die IC6821.vhd gefunden - die den MC6821 abbildet. 
Allerdings bekomme ich es nicht zum laufen, ob Quartus oder ISE jeden 
menge fehler werden gemeldet. Da ich mich auf Altera festgelegt habe 
hier die Quartus error msg :

"HDL error at IC6821.vhd(305): can't infer register for "CB2" because 
its behavior does not match any supported register model"

Der author schrieb "finished the coding and some basing simulation using 
the QUARTUS" also sollte es läufähig sein. Kann bitte jemand blick drauf 
werfen ?

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


Lesenswert?

Du hast wahrscheinlich das Problem, dass du das Ding mit den anderen 
Komponenten zusammen in 1 FPGA packen willst?
Dann geht der inout-Port nicht:
1
CB2: inout std_logic;
Denn innerhalb eines FPGAs gibt es kein Tristate:
1
    CB2<='Z';
Wenn das nur diesen Port betrifft, sollte das Umschreiben nicht 
allzuviel Aufwand sein. Mich wundert in dem Fall aber, dass das nicht 
auch schiefgeht:
1
    DB<=(OTHERS=>'Z');

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
> Du hast wahrscheinlich das Problem, dass du das Ding mit den anderen
> Komponenten zusammen in 1 FPGA packen willst?

ja im endergebniss schon, wollte erst mal sehen ob ich es überhaupt 
benutzen kann.

Anscheinend hat Quartus 9 probleme mit z.b. "bufPB(i)<=PB(i); 
DB_PB(i)<=PB(i)", mit Quartus 5 funktioniert ohne probleme.

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


Lesenswert?

Oh, jetzt sehe ich das erst...
Das ist eine böse Beschreibung:
1
  if reset='0' then bufPA<=(others=>'0');
2
  elsif ...
3
  :
4
       if e'event and  e='0' then  bufPA(i)<=DB(i); end if;  
5
  :
6
       if e'event and  e='1' then  bufPA(i)<=PA(i); DB_PA(i)<=PA(i); end if;
7
  :
8
  end if;
9
END PROCESS;
Mit diesen 2 Zeilen werden FF beschrieben, die sowohl mit der steigenden 
wie auch der fallenden Flanke Daten übernehmen können. Sowas gibt es 
bestenfalls in den IO-Zellen eines FPGAs (DDR-Interface). Und das ist 
ziemlich durchgängig so beschreiben...  :-o

Probier das doch mal, indem du alle 'event rausnimmst, und alles über 
Latches abhandelst.
Z.B. vorher:
1
  if (reset='0') or (mpu_readA='1') then irqaf1_1<='0'; irqaf1_2<='0';
2
  elsif CRA(5)='0' and CRA(4)='0' then   -- the latch for the CA2 is from high to low
3
     if CA2'event and CA2='0' then irqaf2_1<='1'; end if;
4
  elsif CRA(5)='0' and CRA(4)='1' then   -- the latch for the CA2 is from low to high
5
     if CA2'event and CA2='1' then irqaf2_2<='1'; end if;
6
  end if;
Nachher:
1
  if (reset='0') or (mpu_readA='1') then irqaf1_1<='0'; irqaf1_2<='0';
2
  elsif CRA(5)='0' and CRA(4)='0' then   -- the latch for the CA2 is from high to low
3
     if CA2='0' then irqaf2_1<='1'; end if;
4
  elsif CRA(5)='0' and CRA(4)='1' then   -- the latch for the CA2 is from low to high
5
     if CA2='1' then irqaf2_2<='1'; end if;
6
  end if;
Dann passt auch wieder der Kommentar:
-- the latch for the CA2

Aber "schön" geht anders...

von Thomas R. (tinman) Benutzerseite


Lesenswert?

ja, auf die art geht.

Es werden jetzt 236 statt 262 LE benötigt, man sieht auch im RTL 
fehlende FFs. Da Quartus 5 (die web edition) kein Modelsim hat muss ich 
das anders prüfen/vergleichen. Ich denke datasheet vom MC6821 wird mir 
da schon weiterhelfen.

Danke für deine hilfe.

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.