mikrocontroller.net

Forum: FPGA, VHDL & Co. AX8 mcu in einen Spartan 3E


Autor: Richard B. (rbrose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammmen,

Ich habe das Spartan 3E Starter Kit und will die Softcore AX8 benutzen.
Leider weiss ich nicht wie ich das mache?

Wie kriege ich dieses Softcore in den FPGA? Wie kann ich die Pins 
difinieren?
Gibt es irgendwo ein Tutorial?

Ich benutze den ISE von Xilinx. Mache ich ein Project mit einem main 
Modul und füge die Sourcen hinzu?

Gibt es irgendwo eine Step by Step Einführung?


Danke

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, für ISE gibt es ein Tutorial. Bei Deinem Kenntnissstand (nicht böse 
gemeint), würde ich Dir empfehlen erstmal die LEDs auf Tastendruck 
blinkern zu lassen. Mach Dich mit dem Werkzeug vertraut, mach Dich mit 
VHDL vertraut. Dann kannst Du die Komplexität steigern und schaust Dir 
den Picoblaze an. Und dann den AX8. BTDT.

Rick

Autor: Richard B. (rbrose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das stimmt wohl. Habe aber alle möglichen sagen wie LED lauflicht, 
led blinker, tastenabfrage und drehregler in VHDL gemacht. Funktiniert 
auch. Werde mir erstmal den Picoblaze anschauen.
Kannst du mir trotzdem mal sagen wo ich das Tutorial finde?

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok. Ich glaube ich habe Dich falsch verstanden. Ich dachte Du suchst ein 
ISE-Tutorial, aber Du suchst offenbar eher ein AX8-Xilinx-Tutorial. Da 
gibt es m.E. keins.

- hol Dir die AX8-Quellen von OpenCores.
- lade die Quellen in ein neues Projekt
- stricke die RAM/ROM-Beschreibung für xst um (siehe Forumssuche)
- packe Dein hex-File in den ROM
- passe das ucf-File an Deine Hardware an
- synthetisiere das Ganze

und freue Dich über einen AVR mit 40 MHz. Wenn es hängt, darfst Du hier 
konkrete Fragen stellen :-)

Rick

Autor: Richard B. (rbrose)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab eine Frage zu ROM. In Anhang findest du ein Beispiel für ein ROM. 
Das wird von PicoBlaze benutzt.
Jetzt meine Frage: Muss ich ständig meinen Code den ich für den 
PicoBlaze geschrieben habe per Hand in die labels von ram_1024_x_18 
kopieren?

Kann man das nicht irgendwie automatisiert machen das die control.vhd 
generiert wird?

Danke!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Beschreibung wie sie vom Core-Generator erzeugt wird ist ein Krampf. 
ROM kann man auch einfach als Array definieren, die Synthese macht dann 
ein Block-RAM draus.

In jedem Fall kann man den Programmcode auch nach der Synthese noch 
ändern, wie das geht steht im Artikel T51-Core.

Autor: Richard B. (rbrose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab den Picoblaze erfolgreich auf meinem Board installiert und ein 
bisschen rum gespielt.
Jetzt will ich doch mal den AX8 drauf machen, weil man halt den AVR gut 
kennt.
Funktioniert der AX8 genau so wie der Picoblaze? also kann ich genau so 
ein ROM in VHDL bauen und da das ROM-File ablegen?

Autor: Richard B. (rbrose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir einer ein Beispiel hier Posten?

Mache ich das so?
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- use work.AX_Pack.all;

-- This is the top-level definition, which connects to the
-- I/O pins of the FPGA.
entity fpga_top is
  port(
    CLK_50M   : in STD_LOGIC; -- 50 MHZ clock.
    BTN_NORTH : in STD_LOGIC; -- Use as a reset. Signal is high when pushed.
    -- SW     : inout STD_LOGIC_VECTOR(3 downto 0); -- Switches (port B).
    LED       : out STD_LOGIC_VECTOR(7 downto 0); -- LED's (port D).
    rxd_232   : in STD_LOGIC;  -- Connects to the RS-232 level shifter.
    txd_232   : out STD_LOGIC; -- Connects to the RS-232 level shifter.
    txd_logic : out STD_LOGIC   -- Connects to a digital I/O pin.
  );
end fpga_top;

architecture rtl of fpga_top is
  component A90Smisc port(
    Clk     : in std_logic;
    Reset_n : in std_logic;
    INT0    : in std_logic;
    INT1    : in std_logic;
    T0      : in std_logic;
    T1      : in std_logic;
    ICP     : in std_logic;
    RXD     : in std_logic;
    TXD     : out std_logic;
    OC      : out std_logic;
    Port_B  : inout std_logic_vector(7 downto 0);
    Port_D  : inout std_logic_vector(7 downto 0)
  );
  end component;
  signal int0_val : std_logic := '0';
  signal int1_val : std_logic := '0';
  signal t0_val : std_logic := '0';
  signal t1_val : std_logic := '0';
  signal icp_val : std_logic := '0';
  signal oc_val : std_logic := '0';
  --signal clk_div : std_logic_vector(23 downto 0);
  signal clk_div : std_logic_vector(15 downto 0);
  signal Clk : std_logic;
  signal portb_bits : std_logic_vector(7 downto 0);
  signal portd_bits : std_logic_vector(7 downto 0);
  signal btn_reset : std_logic;
  signal rxd_val : std_logic;
  signal txd_val : std_logic;
begin
  -- Divide the 50MHz master clock by 50, to create a 1MHz
  -- clock for the AX8 core.
  process(CLK_50M) begin
    if rising_edge(CLK_50M) then
      if clk_div = x"0031" then
        clk_div <= x"0000" ;
      else
        clk_div <= clk_div + 1;
      end if;
      if clk_div > x"0018" then
        Clk <= '1';  -- A more symmetric clock.
      else
        Clk <= '0';
      end if;
    end if;
  end process;

  -- Connect the inputs: reset and RS-232.
  btn_reset <= not BTN_NORTH;
  rxd_val <= rxd_232;

  avrchip : A90Smisc port map (
      Clk => Clk,
      Reset_n => btn_reset,
      INT0    => int0_val,
      INT1    => int1_val,
      T0      => t0_val,
      T1      => t1_val,
      ICP     => icp_val,
      RXD     => rxd_val,
      TXD     => txd_val,
      OC      => oc_val,
      Port_B  => portb_bits,
      Port_D  => portd_bits
    );

  -- Connect the outputs.

  LED <= portd_bits;     -- LED's on port D.
  txd_232 <= txd_val;    -- RS-232 output.
  txd_logic <= txd_val;  -- Logic-level copy of the RS-232 signal.
end;




Wieso wird A90Smisc benutzt? Und nicht AX8? Ist das Richtig?
Wäre sehr dankbar für ein Beispiel wo ich auf die Ports D und B.

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo hast Du denn A90Smisc her?

Ich verwende übrigens ein modifiziertes hex2rom 
(Beitrag "hex2rom für AX8 und Xilinx:XST") um mir ein 
synthetisierbares ROM zu erzeugen.

Prinzipiell kann man sich auch einen $readmemh-Ersatz (Verilog) bauen 
und den Speicher bei der Synthese aus einem geeigneten File 
initialisieren (siehe Beispiel im xst.pdf). Mein Versuch ein 
read_intel_hex zu verwenden funktioniert zwar im Simulator, aber xst 
meint: INTERNAL_ERROR:Xst:cmain.c:3111:1.8.6.1  :((

Rick

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.