Forum: FPGA, VHDL & Co. EDK ---- Core Generator


von Hinni (Gast)


Lesenswert?

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

von Klaus F. (kfalser)


Lesenswert?

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

von Christian S. (Gast)


Lesenswert?

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.

von Christian S. (Gast)


Lesenswert?

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.

von Hinni (Gast)


Lesenswert?

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.

von Hinni (Gast)


Lesenswert?

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

von Christian S. (Gast)


Lesenswert?

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.

von na (Gast)


Lesenswert?

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.

von Hinni (Gast)


Lesenswert?

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?

von Christian S. (Gast)


Lesenswert?

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

von Hinni (Gast)


Lesenswert?

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?


von Hinni (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.