Forum: FPGA, VHDL & Co. Vivado IP Blocks und VHDL gemeinsam


von Vivado Einsteiger (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade in Vivado zusätzlich zum IP Block mit einem 
Microblaze und Uart eine Button/LED Logik zu implementieren.

Es ist aber so, dass im Pin Design die Ports für LED und Button nicht 
auftauchen (nur die aus dem IP Design).

Bei meiner Suche habe ich die Möglichkeit gefunden einen eigenen IP 
Block zu erstellen und diesen dann in das IP Design zu integrieren.

Für mich erscheint das aber als Overkill, wenn ich einfach einen 
Schalter mit einer LED verbinden möchte.

Geht das nicht einfacher/schneller?

von Klakx (Gast)


Lesenswert?

Vivado Einsteiger schrieb:
> Pin Design

Was ist denn das? IO-Planner?

Ansonsten setz doch noch in dein Blockdesign ein GPIO-Controller rein. 
Da kannst du sicher LED und Taster-Pins rausführen ("Make External").

von S. R. (svenska)


Lesenswert?

Es ist möglich, ein VHDL-Design als Block im Blockdesign (BD) zu 
benutzen. Wie man das in der GUI macht, weiß ich nicht, ich erzeuge das 
BD aus einem TCL-Script (d.h. das BD ist mein Top-Level-Design). Die 
Source-Files müssen Vivado bekannt sein, dann findet der die Referenz 
auch.

Für einen Zynq sieht das z.B. so aus:
1
# block erzeugen
2
set design [ create_bd_cell -type module -reference design design_0 ]
3
4
# block verdrahten (hier für clk)
5
connect_bd_net -net FCLK_CLK0 \
6
  [ get_bd_pins proc_sys_reset_0/slowest_sync_clk ] \
7
  [ get_bd_pins processing_system7_0/FCLK_CLK0 ] \
8
  [ get_bd_pins design_0/clk ]

Im Blockdesign taucht das Modul dann als "RTL"-Block auf. Ist sogar in 
der GUI parametrierbar, wenn man die GENERICs passend hinschreibt. :-)

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Ich habe auch schon mit RTL-Modulen (VHDL) in Vivado gearbeitet und bin 
damit auch sehr zufrieden. Meines Erachtens ein Bug besteht darin, dass 
beim Öffnen des Projektes immer eines der eigenen Module als 
Top-Level-Modul gesetzt wird. Deswegen muss ich jedes Mal wieder das 
Microblaze-Blockdesign mit "Set as Top" explizit setzen. Etliche 
Versuche, dies in das TCL-Skript zur Erzeugung des Projektes 
aufzunehmen, sind gescheitert.

Kennt jemand von Euch den Trick?

Das obige Verhalten ist reproduzierbar mit Vivado 2016.2, 2016.4, 
2017.1. Als Basis für mein Projekt habe ich die von Trenz 
bereitgestellten Skripte usw. für das TE0725 verwendet, d.h. Artix 7 mit 
Microblaze.

von S. R. (svenska)


Lesenswert?

Andreas S. schrieb:
> Kennt jemand von Euch den Trick?

Mein build.tcl enthält:
1
# create 'sources_1' fileset (if not found), set its properties
2
if {[string equal [get_filesets -quiet sources_1] ""]} {
3
  create_fileset -srcset sources_1
4
}
5
set obj [get_filesets sources_1]
6
set_property "top" "top_wrapper" $obj
7
set_property "ip_repo_paths" "[file normalize $origin_dir/ip_repo]" $obj
8
update_ip_catalog -rebuild
9
10
...
11
12
# create block design and wrapper
13
source $origin_dir/src/bd/top.tcl
14
set design_name [get_bd_designs]
15
make_wrapper -files [get_files $design_name.bd] -top -import

Damit funktioniert's bei mir (Vivado 2016.2).
Allerdings habe ich keinen MicroBlaze, sondern einen Zynq.

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Vielen Dank, das werde ich demnächst mal ausprobieren!

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

und?

von Xilinx USER (Gast)


Lesenswert?

Ich habe eine ähnliche Anforderung und möchte einen kleinen VHDL-Block 
in ein MicroBlaze-Design einsetzen. Wie geht das am Schnellsten, bzw 
welche AXI-Block wäre empfehlenswert?

Das VHDL hat verschiedenen Parameter und Ergebnisvektoren, die Stati 
anzeigen. Diese sollen per MicroBlaze geschrieben und gelesen werden. 
(am MB hängt ein CAN-Controller, der schon läuft).

von Samuel C. (neoexacun)


Lesenswert?

Dann ist es in deinem Fall wohl am einfachsten, über den Menüpunkt 
Tools->Create an Package New IP (ich gehe davon aus, du nutzt Vivado) 
einen eigenen AXI-Slave zu generieren. In dem Slave kannst du dann 
beliebig auf Schreib- und Lesezugriffe des Masters reagieren.

Ein eigener Thread für deine Frage wäre übrigens besser gewesen, anstatt 
hier so einen Zombie zu erzeugen.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Samuel C. schrieb:
> Ein eigener Thread für deine Frage wäre übrigens besser gewesen, anstatt
> hier so einen Zombie zu erzeugen.

Zombie?

Er schreibt ja:

Xilinx USER schrieb:
> Ich habe eine ähnliche Anforderung

-----------

Ich mache das so, dass alle reinen VHDL-Module einen wrapper bekommen, 
die sich AXI-kompatibel machen und zwar entweder AXI oder AXIS und 
keinesfalls beides zusammen mit dem VHDL Interface.

Das aufrechterhält die Modularität und gestattet flexibel zu bauen.

Umgekehrt brauchen dann die AXI-Brocken einen VDHL-wrapper, der deren 
Timing "entaxifiziert". Geht zusammen mit einem Buffer und einem 
AXI-Master/Slave der die Daten in einen kontinuierlichen Daten strom 
verwandelt.

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.