Forum: FPGA, VHDL & Co. Radiant: Place & Route schlägt fehl


von Sven S. (radi2k)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin absoluter FPGA-Anfänger und versuche mich gerade an einem 
UPduino-v3.0 mit Radiant. FPGA ist ein Lattice UltraPlus ICE40UP5K.

Das Beispiel unter 
https://github.com/tinyvision-ai-inc/UPduino-v3.0/tree/master/RTL/radiant-reveal/rgb_blinky 
versuche ich gerade nach VHDL zu konvertieren. Beim Bauen des Projekts 
erhalte ich irgendwann folgenden Fehler:
1
INFO <60001137> - Iteration 5_1 failed due to design error(s).
2
ERROR <60001149> - All 1 iterations failed with design error(s).
3
It is recommended to correct all design errors before running multiple iterations.
4
Please check the Place and Route reports (.par) for the individual iterations under the directory
5
 "C:\Users\win11\Desktop\DccLib\implementation\DccLib_implementation_par.dir\5_1.par".
6
Error: the command par_run failed.

Der Inhalt der PAR-Datei ist im Anhang zu finden. Ich finde darin 
einfach keinen Fehler. Kann mir da jemand weiterhelfen?
Die PAR-Datei mit dem erfolgreich bauenden Verilog Projekt habe ich 
ebenfalls angehängt - hier ist deutlich mehr Text enthalten, jedoch kann 
ich mir nicht ableiten wo mein Fehler liegt.

Mein VHDL-Code ist ebenfalls angehängt.

Ich nutze Synplify Pro und verwende folgende Constraints:
1
create_clock -name {clkHSOSC} -period 20.833333333333 [get_nets clkHSOSC]
2
ldc_set_location -site {39} [get_ports led_green]
3
ldc_set_location -site {40} [get_ports led_blue]
4
ldc_set_location -site {41} [get_ports led_red]
5
ldc_set_port -iobuf {} [get_ports led_green]
6
ldc_set_port -iobuf {} [get_ports led_blue]
7
ldc_set_port -iobuf {} [get_ports led_red]

von Antti L. (trioflex)


Lesenswert?

Sven S. schrieb:
> Hallo zusammen,
>
> ich bin absoluter FPGA-Anfänger und versuche mich gerade an einem
> UPduino-v3.0 mit Radiant. FPGA ist ein Lattice UltraPlus ICE40UP5K.
>
> Das Beispiel unter
> 
https://github.com/tinyvision-ai-inc/UPduino-v3.0/tree/master/RTL/radiant-reveal/rgb_blinky
> versuche ich gerade nach VHDL zu konvertieren. Beim Bauen des Projekts

es ist besser Verilog zu lernen als konvertieren. Dann hast keine 
Probleme :)

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

Passt da was mit dem RGBA_DRV - Module nicht ?

Schau mal da: 
https://stackoverflow.com/questions/50276929/using-the-sb-rgba-drv-primitive-in-vhdl

nach dem Report nutzt dein Design keine IO:
"I/O Usage Summary (final):
   0 out of 56 (0.0%) I/O sites used.
   0 out of 36 (0.0%) bonded I/O sites used."

Und soll
"  PRIMARY "clkHSOSC" from comp "hsosc2.osc_inst" on site "HFOSC_R1C32", 
clk load = 16, ce load = 0, sr load = 0"

bedeuten, das nur 16 FF am Takt hängen ?

von Sven S. (radi2k)


Lesenswert?

Hallo zusammen,

habe den Fehler gefunden. Meine Constraints waren falsch. Hatte zwei 
LED-Outputs vertauscht und damit waren diese nicht auf den korrekten 
Hardware-Pins für die jeweilige "Dual Function" des Hard-IP. Schade nur, 
dass in solchen Fällen keine (hilfreiche) Fehlermeldung ausgegeben wird.

Die Nutzung der IP-Blöcke "via library iCE40UP;" sowie "use 
iCE40UP.Components.all;" war übrigens korrekt für Radiant. Mit iceCube2 
bräuchte man die anderen Libs wie im Stackoverflow Link.

Es ist auch korrekt, dass an der Clock gerade nur die 16 FF hängen. Da 
läuft momentan nur ein Counter drauf.

Alt und falsch:
1
ldc_set_location -site {39} [get_ports led_green]
2
ldc_set_location -site {40} [get_ports led_blue]
3
ldc_set_location -site {41} [get_ports led_red]

Neu und korrekt:
1
ldc_set_location -site {39} [get_ports led_blue]
2
ldc_set_location -site {40} [get_ports led_green]
3
ldc_set_location -site {41} [get_ports led_red]

Gruß
Sven

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> habe den Fehler gefunden. Meine Constraints waren falsch. Hatte zwei
> LED-Outputs vertauscht und damit waren diese nicht auf den korrekten
> Hardware-Pins für die jeweilige "Dual Function" des Hard-IP.

Im VHDL code ist auch so eine Vertauschung bei der Instanziierung, das 
schien mir aber nicht besonders wichtig:

1
port map (
2
      CURREN   => '1',  -- I
3
      RGBLEDEN => '1',  -- I
4
      RGB0PWM  => led_red_int,  -- I
5
      RGB1PWM  => led_green_int,  -- I
6
      RGB2PWM  => led_blue_int,  -- I
7
      RGB2     => led_red,  -- O
8
      RGB1     => led_green,  -- O
9
      RGB0     => led_blue   -- O
10
    );

red_int wird auf RGB0* verdrahtet, led_red dagegen auf RGB2*, der selbe 
Mischmasch bei blue .

> Schade nur,
> dass in solchen Fällen keine (hilfreiche) Fehlermeldung ausgegeben wird.

FPGA's sind eben auch hinsichtlich des IO-Pinings sehr komplex, da 
schaffen es die Tool-programmierer selten, alles abzutesten und 
aussagekräftig zu berichten was anVoraussetzunegn und Einschränkungen im 
Datenblatt genannt wird.

Wenn beim Zynq ein Schaltnild zu reviewen ist, nehm ich mir immer 
mehrere Stunden Zeit für den Review der MDIO (also Multiplexed 
Hardcore-Peripherals (I2C, UART,...) mit den User-IO) resp. nachschlagen 
der zulässigen Verdrahtungsmöglichkeiten im Datenblatt ( 
https://docs.amd.com/r/en-US/ug1085-zynq-ultrascale-trm/MDIO-Interface 
).

Da die FPGA_Firmware moch nicht erstellt ist, kann man nicht die tools 
für einen automatischen DRC (Design Rule Check) drüber laufen lassen.

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.