Hallo, ich habe einen Stratix EP1S80 geschenkt bekommen und wollte es benutzen für einen Logic Analyzer. Ich bin noch nicht sicher ob ich einen minila oder sump nachbauen werde, jedoch sicher ist das ich den blockram des Stratix benutzen werde. Es sind immerhin 7427520 bit verfgbar, so könnte ich 128k sample ram machen (4194304 bit) und es würden immer noch genug ram blocks bleiben für andere sachen. So weit so gut, allerdings wenn ich im Quartus die RAM MegaFunction benutze, kann ich maximal 'nur' 2mbit addressieren. Ich kann zwar mit VHDL einen RAM module bauen, mit 4 mbit, allerdings bin ich nicht sicher ob das wirklich geht (warum dann eine begrenzung im Quartus auf 2mbit). Ich habe zwar gemerkt das die RAM MegaFunction mir eine 65536*64 statt 32 bit erlaubt, damit würde ich dann auf 4 mbit kommen, nur wie kann ich dann 64bit RAM mit einem 32bit bus ansteuern (ohne extra verzögerungen, sonst macht der schnelle blockram wenig sinn)?
Der Block Ram wird wohl intern mit 16 bit Adresse angebunden sein, deswegen geht nicht mehr. Eine andere Begründung fällt mir jedenfalls nicht ein. Sehe aber dein Problem nicht... wenn ich dich richtig verstanden habe bekommst du immer 32bit die du schreiben willst. Also speicherst du die 32bit einfach schon im high/low teil des 64bit Registers was einen Takt später mit den nächsten 32bit komplett geschrieben wird. Klar ist das ein wenig mehr Logikverbrauch, aber bei so einem Riesenchip spielt das wohl keine Rolle.
EP1S80 für einen LA ? urgs, verkaufe es oder benutze es für was vernünftiges. Der sollte doch paar hundert euro wert sein - dafür kannst du dir 10 kg minila's kaufen/bauen - mit 2mbit/kanal ZBT ram. Es sei den du baust spectrum analyzer/LA/Digiscope. Dann kann ich mir sowas vorstellen aber nur wegen den ram.
@Thomas ich bin ein FPGA anfänger daher sind komplexe sachen noch nicht drin. LA sources sind da, fehlt nur RAM. Spectrum Anlyser brauche ich nicht, für digitales oscilloskop brauche ich AD wandler, das kann doch der FPGA nicht. Verkaufen will ich nicht,mit so einem riesen chip eröfnen sich so viele möglichkeiten, gut ich weiss noch nciht welche aber schadet nciht etwas reserve zu haben. @Iulius wenn ich high/low die 32bit speichere und die nacheinander auslese entsteht doch eine verzögerung. takt - high 32 lesen (in time) takt - low 32 lesen (1 takt verzögert) takt - address couter erhöhen (gehört zu design sowieso) takt - high 32 lesen (1 task schon verögert durch low 32 von voraddresse) takt - low 32 lesen (2 takte schon verzögert) oder ist das total falsch und die low32 sind nur jedesmal einen takt verzögert? Geht sowas auch bei jeder taktflanke? Kannst du bitte das als vhdl beispiel zeigen? Ich habe mir paar vhdl memory controller angeguckt, nur wie ich die high/low ohne zeit verlust buffern soll verstehe ich nicht ganz.
mal ein beispiel für 32bit lesen und 64bit schreiben.
1 | eingang_32bit : in STD_LOGIC_VECTOR (31 downto 0); |
2 | ausgang_64bit : out STD_LOGIC_VECTOR (63 downto 0); |
3 | writeenable : out STD_LOGIC; |
4 | eingang_adresse : out STD_LOGIC_VECTOR (15 downto 0); |
5 | ausgang_adresse : out STD_LOGIC_VECTOR (15 downto 0); |
6 | ...
|
7 | SIGNAL puffer : STD_LOGIC_VECTOR (31 downto 0); |
8 | SIGNAL addr_puffer_eingang : STD_LOGIC_VECTOR (15 downto 0); |
9 | SIGNAL addr_puffer_ausgang : STD_LOGIC_VECTOR (15 downto 0); |
10 | SIGNAL write_wait : STD_LOGIC := '0'; |
11 | ...
|
12 | |
13 | schreiben: process(takt,write_wait) |
14 | begin
|
15 | IF RISING_EDGE(takt) THEN |
16 | |
17 | IF write_wait='0' |
18 | writeenable <= 1; -- hier : low aktiv |
19 | puffer <= eingang_32bit; |
20 | else
|
21 | ausgang_64bit <= puffer & eingang_32bit; |
22 | ausgang_adresse <= addr_puffer_ausgang; |
23 | writeenable <= 0; |
24 | addr_puffer_ausgang <= addr_puffer_ausgang +'1' |
25 | end if; |
26 | |
27 | write_wait <= not write_wait; |
28 | |
29 | eingang_adresse <= addr_puffer_eingang; |
30 | addr_puffer_eingang <= addr_puffer_eingang +'1'; |
31 | |
32 | end if; |
33 | end process schreiben; |
hoffe das ist verständlich. das mit dem 64bit register war etwas unglicklich formuliert oben...du speicherst natürlich nur den einen teil zwischen und brauchst demzufolge auch nur einen 32bit puffer. so hast du aber 64bit in 2 takten, also wieder 32bit pro takt. Falls du was anderes meinst, beschreib es bitte mal genauer.
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.