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


von Richard B. (rbrose)


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

von Rick Dangerus (Gast)


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

von Richard B. (rbrose)


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?

von Rick Dangerus (Gast)


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

von Richard B. (rbrose)


Angehängte Dateien:

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!

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von Richard B. (rbrose)


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?

von Richard B. (rbrose)


Lesenswert?

Kann mir einer ein Beispiel hier Posten?

Mache ich das so?
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
-- use work.AX_Pack.all;
7
8
-- This is the top-level definition, which connects to the
9
-- I/O pins of the FPGA.
10
entity fpga_top is
11
  port(
12
    CLK_50M   : in STD_LOGIC; -- 50 MHZ clock.
13
    BTN_NORTH : in STD_LOGIC; -- Use as a reset. Signal is high when pushed.
14
    -- SW     : inout STD_LOGIC_VECTOR(3 downto 0); -- Switches (port B).
15
    LED       : out STD_LOGIC_VECTOR(7 downto 0); -- LED's (port D).
16
    rxd_232   : in STD_LOGIC;  -- Connects to the RS-232 level shifter.
17
    txd_232   : out STD_LOGIC; -- Connects to the RS-232 level shifter.
18
    txd_logic : out STD_LOGIC   -- Connects to a digital I/O pin.
19
  );
20
end fpga_top;
21
22
architecture rtl of fpga_top is
23
  component A90Smisc port(
24
    Clk     : in std_logic;
25
    Reset_n : in std_logic;
26
    INT0    : in std_logic;
27
    INT1    : in std_logic;
28
    T0      : in std_logic;
29
    T1      : in std_logic;
30
    ICP     : in std_logic;
31
    RXD     : in std_logic;
32
    TXD     : out std_logic;
33
    OC      : out std_logic;
34
    Port_B  : inout std_logic_vector(7 downto 0);
35
    Port_D  : inout std_logic_vector(7 downto 0)
36
  );
37
  end component;
38
  signal int0_val : std_logic := '0';
39
  signal int1_val : std_logic := '0';
40
  signal t0_val : std_logic := '0';
41
  signal t1_val : std_logic := '0';
42
  signal icp_val : std_logic := '0';
43
  signal oc_val : std_logic := '0';
44
  --signal clk_div : std_logic_vector(23 downto 0);
45
  signal clk_div : std_logic_vector(15 downto 0);
46
  signal Clk : std_logic;
47
  signal portb_bits : std_logic_vector(7 downto 0);
48
  signal portd_bits : std_logic_vector(7 downto 0);
49
  signal btn_reset : std_logic;
50
  signal rxd_val : std_logic;
51
  signal txd_val : std_logic;
52
begin
53
  -- Divide the 50MHz master clock by 50, to create a 1MHz
54
  -- clock for the AX8 core.
55
  process(CLK_50M) begin
56
    if rising_edge(CLK_50M) then
57
      if clk_div = x"0031" then
58
        clk_div <= x"0000" ;
59
      else
60
        clk_div <= clk_div + 1;
61
      end if;
62
      if clk_div > x"0018" then
63
        Clk <= '1';  -- A more symmetric clock.
64
      else
65
        Clk <= '0';
66
      end if;
67
    end if;
68
  end process;
69
70
  -- Connect the inputs: reset and RS-232.
71
  btn_reset <= not BTN_NORTH;
72
  rxd_val <= rxd_232;
73
74
  avrchip : A90Smisc port map (
75
      Clk => Clk,
76
      Reset_n => btn_reset,
77
      INT0    => int0_val,
78
      INT1    => int1_val,
79
      T0      => t0_val,
80
      T1      => t1_val,
81
      ICP     => icp_val,
82
      RXD     => rxd_val,
83
      TXD     => txd_val,
84
      OC      => oc_val,
85
      Port_B  => portb_bits,
86
      Port_D  => portd_bits
87
    );
88
89
  -- Connect the outputs.
90
91
  LED <= portd_bits;     -- LED's on port D.
92
  txd_232 <= txd_val;    -- RS-232 output.
93
  txd_logic <= txd_val;  -- Logic-level copy of the RS-232 signal.
94
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.

von Rick Dangerus (Gast)


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

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.