Hallo, ich habe mir das Cyclone 10 LP Entwicklungsboard von intel zugelegt. Auf diesem ist Hyperram vorhanden. Es gibt einige Tutorials, in denen der Hypperram auch angesteuert wird. Diese habe ich bereits durchgearbeitet. Darin wird dann mittels QSys Plattform Designer z.B. ein Nios 2 eingerichtet, der auf den Ram zugreift. Soweit, so gut. Ich als Anfänger möchte nun jedoch mal ganz schlicht und einfach mittels VHDL ein paar bytes in den Ram schreiben und wieder auslesen... Jedoch fehlt mir das Wissen, wie ich so eine "kleine" Aufgabe lösen kann. Kennt ihr ein ganz einfaches Tutorial, in dem man wirklich lernt, was man tut und nicht nur durchklickt, was geschrieben steht? nach dem Durcharbeiten habe ich Null ahnung, wie der Zugreif auf den Speicher überhaupt erfolgt. Ich habe folgendes probiert: Auch mittels Platform Designer habe ich die Hyperbus IP erstellt und generiert. Das qip File habe ich in Quartus eingefügt. Ist diese Vorgehensweise grundsätzlich richtig? Und wie mache ich nun weiter? Danke im Voraus
Du solltest nicht direkt mit etwas wie RAM anfangen. Klingt nicht nach sonderlich viel, komplex klingt es auch nicht, ist es aber. Wenn du es trotzdem machen willst Nutz den IPCore und schau dir an wie das Avalon Interface funktioniert.
Die Frage ist, was du denn bauen möchtest. Mit "Hyperram" ist sicher das Cypress HyperRAM gemeint, oder?
@ Donni D: Ich möchte es auf jeden Fall mit der IP Core realisieren. Hast Du ein empfehlendswertes Tutorial für das Avalon Interface? Habe auch schon einige Infos dazu durch google gefunden. Aber vielleicht hast Du ja einen besonders guten Tipp? @Weltbester-FPGA Pongo: Ich möchte für den Anfang z.B. einfach Werte, die über einen ADC rein kommen im Speicher ablegen und anschließend auslesen (und über RS232 an den PC senden). Dies soll eine Übung sein. Und ja: Der Hyperram ist vom Hersteller Cypress.
FPGA Neuling schrieb im Beitrag #5623790: > Ich möchte für den Anfang z.B. einfach Werte, > die über einen ADC rein kommen im Speicher ablegen und anschließend > auslesen (und über RS232 an den PC senden). Dann würde ich mir erstmal eine passende State-Machine für die Aufgabe ausdenken. Duke
Vielen Dank für Deinen Hinweis. Wie geschrieben, habe ich jedoch Probleme, den Hyperram anzubinden. Um alles weitere, was nur der Beantwortung der Frage für "Weltbester-FPGA Pongo" diente, der wissen wollte, was ich vor habe, müsst ihr nicht weiter beachten. Das bekomme ich schon hin. Aber danke nochmal.
Hi, mein tipp, auch noch ziemlich grün hinter den Ohren was die ganze hardware design Sache angeht, schaue dir einfach an wie das RAM im QSYS instanziert wird, sollten man eigentlich in dessen Haupt-entity finden. Was für Signale und Parameter braucht die Komponente? Kopiers nicht einfach nur sondern versuche zu verstehn warum und wofür diese gebraucht werden, warscheinlich (nur geschätzt da ich das Hyperram nicht kenne) Takt, read und write Adressen, data in und out, read und write enable, leg diese entspechend in deinem entity an, instanzier damit das RAM, schmeiss das QSYS raus (natürlich nicht dessen files aus dem Projekt entfernen) und dann brauchste warscheinlich eine statemachine in der du die Signale des RAMs, je nachdem was du tun möchtest (schreiben / lesen), manipulierst. Sollte gehen ausser ich hab falsch verstanden was das Problem ist. Viel Erfolg.
FPGA Neuling schrieb im Beitrag #5623027: > Jedoch fehlt mir das > Wissen, wie ich so eine "kleine" Aufgabe lösen kann. Kennt ihr ein ganz > einfaches Tutorial, in dem man wirklich lernt, was man tut und nicht nur > durchklickt, was geschrieben steht? nach dem Durcharbeiten habe ich Null > ahnung, wie der Zugreif auf den Speicher überhaupt erfolgt. Tutorial ist der falsche Ansatz, du musst dir ein Datenblatt nehmen und daraus die Ansteuerung ermitteln. Sowas wird an der Hochschule in Fächern wie Digitaltechnik unterrichtet. Oder schau mal in eine Quellcodesammlung wie opencores.org. Für den Einstieg kanns du ja mit einem internen SRAM üben, der Cyc10-LP hat etliche davon. Dazu nimmst du einen RAM: 1-Port aus dem IP - Catalog (siehe Anhang). Dann bastelst du eine statemachine drumherum und schaust dir das in der Simu an und überlegst dir eine Testschaltung (BIST) mit der du das ganze testest, eventuell hilft Signal-Tap. Dann Uart und ADC drm und das meiste steht erst mal. Jetzt kann man sich dran machen den internen RAM durch den externen Hyperram (im prinzip SRAM mit DDR-dateninterface) ersetzen.
Danke nochmal an alle für die Tipps. Ich leider jetzt erst dazu gekommen, weiter zu machen. C.A. Rotwang: Diese Vorgehensweise hat mir sehr geholfen. ich habe einen 1-Port Ram angelegt, und eine Statemachine zum Füllen geschrieben. Ich habe es zum Testen so gemacht, wenn ich button1 drücke, wird gelesen. Button 2-4 füllen an Adresse 0x01 einfach eine 1, 3 oder 7, die ich mir über LEDs anzeigen lasse. Ich habe eine Testbench erzeugt und es mir in Modelsim angeschaut. Dort funktioniert es scheinbar, wie ich möchte. Wenn ich es aber auf den FPGA lade, dann leuchtet eine beliebige LED, wenn ich einen button drücke. Und zwar manchmal mehrmals hintereinander die gleiche LED, manchmal aber auch eine andere für ein und denselben Button. Kann mir vielleicht jemadn weiter helfen? Anmerkung: bitte achtet nicht auf die Entity bezeichnungen. Ich wollte erst SDRAM nehmen, hab ich jetzt aber doch nicht.
1 | library IEEE; |
2 | use IEEE.STD_LOGIC_1164.ALL; |
3 | use IEEE.NUMERIC_STD.ALL; |
4 | |
5 | entity SDRAM1 is |
6 | Port ( clk : in STD_LOGIC; |
7 | reset: in std_logic; |
8 | button1: in std_logic; |
9 | button2: in std_logic; |
10 | button3: in std_logic; |
11 | button4: in std_logic; |
12 | leds : out STD_LOGIC_VECTOR(3 downto 0) |
13 | );
|
14 | end SDRAM1; |
15 | |
16 | architecture Behavioral of SDRAM1 is |
17 | |
18 | signal x : std_logic_vector (3 downto 0) := (others=>'0'); |
19 | |
20 | type state_type is (state_decision, state_read, state_write); |
21 | signal state : state_type; |
22 | |
23 | --für Ram
|
24 | signal myAddress : std_logic_vector (9 downto 0) := (others=>'0'); |
25 | signal myData : STD_LOGIC_VECTOR (13 DOWNTO 0); |
26 | signal myWren : std_logic; |
27 | signal myQ : std_logic_vector (13 downto 0); |
28 | |
29 | Component ram1 IS |
30 | PORT
|
31 | (
|
32 | address : IN STD_LOGIC_VECTOR (9 DOWNTO 0); |
33 | clock : IN STD_LOGIC := '1'; |
34 | data : IN STD_LOGIC_VECTOR (13 DOWNTO 0); |
35 | wren : IN STD_LOGIC ; |
36 | q : OUT STD_LOGIC_VECTOR (13 DOWNTO 0) |
37 | );
|
38 | END component ram1; |
39 | |
40 | |
41 | |
42 | |
43 | begin
|
44 | Ram1_1: Ram1 port map ( |
45 | address=>myAddress, |
46 | clock=>clk, |
47 | data=>myData, |
48 | wren=>myWren, |
49 | q=>MyQ); |
50 | |
51 | process (clk, reset) |
52 | begin
|
53 | if (reset = '1') then |
54 | state <= state_decision; |
55 | elsif (rising_edge(clk)) then |
56 | case state is |
57 | |
58 | when state_decision => |
59 | if button1 = '0' then |
60 | myAddress <= "0000000001"; |
61 | state <= state_read; |
62 | elsif button2 = '0' then |
63 | myAddress <= "0000000001"; |
64 | myData <= "00000000000001"; |
65 | myWren <='1'; |
66 | state<=state_write; |
67 | elsif button3 = '0' then |
68 | myAddress <= "0000000001"; |
69 | myData <= "00000000000010"; |
70 | myWren <='1'; |
71 | state<=state_write; |
72 | elsif button4 = '0' then |
73 | myAddress <= "0000000001"; |
74 | myData <= "00000000000100"; |
75 | myWren <='1'; |
76 | state<=state_write; |
77 | else
|
78 | state <= state_decision; |
79 | end if; |
80 | |
81 | |
82 | when state_read => |
83 | x<=myQ(3 downto 0); |
84 | state <= state_decision; |
85 | |
86 | |
87 | when state_write => |
88 | myWren <='0'; |
89 | state<= state_decision; |
90 | |
91 | |
92 | when others => |
93 | state <= state_decision; |
94 | |
95 | end case; |
96 | end if; |
97 | end process; |
98 | |
99 | leds <= not x; -- Signal x an LEDs ausgeben |
100 | |
101 | |
102 | end Behavioral; |
FPGA Neuling schrieb im Beitrag #5640079: > Kann > mir vielleicht jemadn weiter helfen? erzeug mit einem simulator ein wave-diagramm der signale am ram und vergleich die mit der Darstellung im Datenblatt. Benutze "Signal Tap" zur Aufzeichnung der Signale am RAM und vergleiche diese mit dem Datenblatt.
FPGA Neuling schrieb im Beitrag #5640079: > Wenn ich es > aber auf den FPGA lade, dann leuchtet eine beliebige LED, wenn ich einen > button drücke. Hast Du deine Taster-Signale vernünftig entprellt und einsynchronisiert?
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.