Vivado IP Blocks und VHDL gemeinsam

Gast #5064560
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?
#5065750
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. :-)
(Firma: Schweigstill IT) Persönliche Seite #5066187
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.
#5066208
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.
Gast #5963901
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).
#5963911
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.
Gast #5972554
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.

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