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?
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").
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
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.
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
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).
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.