Moin ich habe mal eine Frage kann mir bitte mal jemand erklären was das EDK überhaupt macht. Habe es so verstanden, dass das KDE mir alle Ports für die geforderte Hardware beschreiben ist das richtig oder macht das ding noch was? und wenn ich es weiter verstanden habe kann ich dann mit meiner Programmierung drauf auf die Portdefinition aufsetzen. Und was macht der blöde Core Generator der macht doch eigentlich das gleiche oder nicht bzw. da habe ich schon ein bißchen code gesehen oder. Das ist also meine Frage was machen die beiden dinger überhaut für mich. Bin über alle Antworten dankbar
EDK und CoreGenerator sind 2 verschiedene Paar Stiefel. Core Generator erzeugt Dir Module, die Du in VHDL (oder Verilog) einbinden kannst. Die erzeugten Module sind Netzlisten, die (hoffentlich) optimal an den von Dir verwendeten Baustein angepasst sind, mit der gewünschten Funktion. Der vom Core Generator erzeugte VHDL Code ist nur zur Simulation. EDK ist eine komplexes, aus vielen verschiedenen Modulen bestehende Software, mit der man einen Prozessor auf einem FPGA nachbilden und benutzen kann. Dieser Prozessor und seine Peripherie ist über das EDK konfigurierbar, Du kann also z.B. angeben wieviele UARTS, usw. Man kann auch selbst Peripherie definieren. Weiters enthält das EDK einen Compiler und Libraries zum Ansprechen der mit dem EDK gelieferten Peripherie. Die Zuweisung der Ports ist das kleinste Detail, welches vom EDK erledigt wird. Sprachlich würde ich mir wünschen, daß man nicht alles als blöde bezeichnet, das man nicht versteht. Gruß Klaus
Das EDK beinhaltet hauptsächlich Hardware IP's für Xilinx Prozessoren,sowie GNU Compiler und Debugger zur CProgrammierung von Mikroblaze(und mehr).Wenn du also ein Prozessor ins FPGA einbinden möchtest verwendest du EDK genauer XPS.Soll dein Design zusätzliche Logik beinhalten nimmst du EDK für deinen Prozessor und ISE um die Anwender- logik und den Prozessor gemeinsam aufs FPGA zu bringen. Dein EDK Projekt wird dann in der ISE als Submodul ein gebunden neben deiner VHDL-Logik.Brauchst nur noch updaten bitstream und fertig. Hoffe es hilft bissl Gruss Christian S.
PS: EDK ist blöde oder hast schonmal intelligente SW gesehen. So komplex ist EDK auch nicht,man muss ja nicht gleich jeden Anfänger Angst machen.
Ah ok vielen Danke der vom Core Generator erzeugte Code ist also nur für die Simulation?! Kann man ihn nicht in den eigenen VHDL Code (teilweise) intigrieren? Er spricht meinen Baustein doch richtig an oder warum ist nur eine Simulation möglich? Mit dem wizard ist es ja möglich den Prozessor abzubilden und die Peripherie die man beutzen möchte einzubinden (selbst devinierte Peripherie ist erst mal außen vor). Jetzt würde es mich interessieren was das mit den Librarys und dem Ansprechen der Peripherie auf sich hat bzw. wie geht man nach der Erstellung des Prozessors mit seiner Peripherie am besten vor um einen externen Baustein zu steuern und sein eigenen VHDL code in diesem Projekt laufen zu lassen. Da wahrscheinlich keiner Lust hat mir das alles zu erklären, was ich voll verstehe würde ich mich auch sehr freuen wenn jemand eine gute Anleitung kennt, bzw ein gutes Buch. Mit der Xilinx Anleitung habe ich es schon versucht und muß sagen das sie für meinen Geschmack für mich persönlich nicht besonders hilfreich ist.
habe die anderen Nachrichten von Christian S erst später gesehen. vielen dank das hilft doch schon mal ich werde das jetzt für mich noch mal alles durchgehen und hoffe dan wird es klar
Kommt auf die Aufgabenstellung drauf an.Die Peripherie die du dir im Wizard erstellst kann dir als VHDLCode in der ISE in Form von Komponenten erscheinen wenn du ISE und EDK verbindest. Diese Komponenten musst du dann in dein VHDLCode kopieren um damit arbeiten zu können.Die Komponenten bestehen dann aus einer Prozessorkomponente und Komponenten für Peripherie.Über Port Mapping werden diese miteinander verbunden.z.b.ist der Ausgangsport des Prozessors mit dem Eingangsport der Peripherie verbunden. So kannst du auch deine eigene Logik dazwischen klemmen,indem du eigene Komponenten definierst. Besseres als die Xilinx doku wirst glaub ich nicht finden ist aber eigentlich alles gut dokumentiert.
Der vom Core-Genrator erzeugte Code ist nicht nur für die Simulation sondern die vom Coregen erzeugten VHDL-files. Für die Synthese wird eine Netzliste (.edn) vom Coregen erzeugt.
Moin da bin ich wieder. so habe was geschafft habe einen power pc reingeschossen mit einem kleine c programm was so aussieht und über COM1 ausgegeben wird (toll nä!). funktioniert auch so weit #include "xparameters.h" #include "xutil.h" int main (void) { print("-- Hello World --\r\n"); return 0; } Jetzt habe ich allerdings mal eine Frage das Programm habe ich mir mal ebend schnell aus einen Tutorial kopiert. Danach habe ich versucht das gleiche programm in C++ zu schreiben. ging aber nicht :o( was muß ich berücksichtigen wenn ich was in c++ programmieren will? Wahrscheinlich doch die includes die ja nicht die standarts sind (mit den standart c++ includes hat es auf jeden fall nicht funktioniert) ?! Wie kann ich ihm klar machen das ich ganz normal c++ schreiben will? bzw. wo kann ich die passenden includes finden?
In XPS kannst du dir auch Libarys generieren.Danach könnte es funktionieren.Ansonsten schau dir mal SDK an.Ist ein kompletts GUI zum XPS in den du SW-Lösungen entwickeln kannst,mit C/C++Editor.Genaueres kann ich dir auch nicht sagen.Hab immer nur in C programmiert. Gruss Christian
so meine wirklich letzte Frage! Ich habe jetzt also einen Power Pc core erstellt. und meine C anwendungen zum laufen gebracht mit Ausgabe auf COM 1 also nichts dolles sondern nur Hallo Welt! Mein großes wirkliches Anliegen ist es jetzt allerdings meinen Ethernet baustein zu verartzten. Also eingebunden ist er mit dem OPB Ethernet Media Access Controller (EMAC) (v1.04a). Das EDK hat mir jetzt mehrere Dateien erzeugt. 1. Einen ganzen Ordner "hdl\xlpp\opb_ethernet_v1_04_a\hdl\vhdl\*.*" wo alle möglichen vhd Dateien drin sind wohl mit funktionen drin. z.B. "rx_length_reg.vhd" und "tx_status_reg.vhd" und "receive.vhd" reingucken kann man da leider nicht :o( 2. zum anderen dirket unter dem "hdl" Ordner eine Datei mit dem Namen "ethernet_mac_wrapper.vhd" in dem ist der Port definiert und teilweise default werte zugewiesen. Kurzer Ausschnitt (mit lücken) ------------------------------------------------------------------------ ------- -- ethernet_mac_wrapper.vhd ------------------------------------------------------------------------ ------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM; use UNISIM.VCOMPONENTS.ALL; library opb_ethernet_v1_04_a; use opb_ethernet_v1_04_a.All; entity ethernet_mac_wrapper is port ( PHY_tx_clk : in std_logic; PHY_rx_clk : in std_logic; PHY_crs : in std_logic; PHY_dv : in std_logic; PHY_rx_data : in std_logic_vector(3 downto 0); PHY_col : in std_logic; PHY_rx_er : in std_logic; --- emac_intrpts : out std_logic_vector(0 to 21); IP2INTC_Irpt : out std_logic ); attribute incremental_synthesis : STRING; attribute incremental_synthesis of ethernet_mac_wrapper: entity is "yes"; attribute x_core_info : STRING; attribute x_core_info of ethernet_mac_wrapper: entity is "opb_ethernet_v1_04_a"; end ethernet_mac_wrapper; architecture STRUCTURE of ethernet_mac_wrapper is component opb_ethernet is generic ( C_DEV_BLK_ID : INTEGER; C_DEV_MIR_ENABLE : INTEGER; C_BASEADDR : std_logic_vector; C_HIGHADDR : std_logic_vector; C_RESET_PRESENT : INTEGER; C_INCLUDE_DEV_PENCODER : INTEGER; --- C_TX_INCLUDE_CSUM : INTEGER; C_RX_INCLUDE_CSUM : INTEGER ); port ( PHY_tx_clk : in std_logic; PHY_rx_clk : in std_logic; PHY_crs : in std_logic; PHY_dv : in std_logic; PHY_rx_data : in std_logic_vector(3 downto 0); PHY_col : in std_logic; PHY_rx_er : in std_logic; OPB_ABus : in std_logic_vector(0 to (C_OPB_AWIDTH-1)); OPB_DBus : in std_logic_vector(0 to (C_OPB_DWIDTH-1)); --- Mn_ABus : out std_logic_vector(0 to (C_OPB_AWIDTH-1)); emac_intrpts : out std_logic_vector(0 to 21); IP2INTC_Irpt : out std_logic ); end component; begin ethernet_mac : opb_ethernet generic map ( C_DEV_BLK_ID => 1, C_DEV_MIR_ENABLE => 1, C_BASEADDR => X"40c00000", C_HIGHADDR => X"40c0ffff", C_RESET_PRESENT => 1, --- C_RX_DRE_TYPE => 0, C_TX_INCLUDE_CSUM => 0, C_RX_INCLUDE_CSUM => 0 ) port map ( PHY_tx_clk => PHY_tx_clk, PHY_rx_clk => PHY_rx_clk, PHY_crs => PHY_crs, PHY_dv => PHY_dv, --- Mn_seqAddr => Mn_seqAddr, Mn_ABus => Mn_ABus, emac_intrpts => emac_intrpts, IP2INTC_Irpt => IP2INTC_Irpt ); end architecture STRUCTURE; Verweisen tut diese Datei aber ja auf "opb_ethernet". jetzt meine große große Frage ich möchte jetzt aber mich an diesen Ethernet Baustein / erzeugten Controller randocken und die reinkommenden Ethernet Packete (mit VHDL) Bearbeiten und weiterleiten. Wie kann dieses randocken passieren? Bzw. wie kann ich meine meinen VHDL Code mit einbinden (zur erinnerung die Datei mit den Ports verweist auf eine andere Datei) und den Inhalt der oben aufgeführten Datei benutzen?
oh ein Zusatz noch ein paar ganz wenige die in der Datei sind tauchen ja auch in der Port liste im EDK auf kann man da eventuell gesondert drauf zu greifen bzw. kann man nur auf diese zugreifen? aber wichtiger ist die andock frage! bis jetzt noch mal ein dickes danke an Christian S
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.