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