Quartus VHDL error 10821

OP Persönliche Seite #1550515
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 ?
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1550557
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');
Moderator (Firma: Titel) Persönliche Seite #1550955
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren