Hallo erstmal an alle, Seit einiger zeit beschäftige ich mich mit VHDL, sieht auch so ganz gut aus. Kleine Projekte in VHDL zu erstellen, machen keine Probleme. Deswegen möchte ich jetzt an größere Sachen wo ich einfach weiter üben kann. Unter dem neuen WebPack V10 habe ich >Open Example< den Demo Fifo Core v2_fifo_vhd_258 XAPP 258: 511x8Fifo VHDL gespeichert. Mit dieser demo übe ich schon seit 1 Woche. Ich kann Daten Speichern und ich kann die Daten wieder auslesen. Nur beim ersten Read Befehl bekomme ich 32Bit mit nullen, erst der zweite Read Befehl bringt mir das erste Write ans Tageslicht. Kann mir jmd einen Tipp geben wie ich das hinbekomme, das wenn ich zb. 64 mal Daten Speichere, dann auch beim ersten Leseversuch das erste geschriebene Datenwort bekomme und nicht nullen. Danke für Antworten. mfg frankS
Das hört sich für meinen Geschmack ganz nach einem Timing-Problem an. Ich vermute du übernimmst die Daten aus dem FIFO einfach zu früh. Bei einem normalen FIFO stehen die Daten erst nach der fallenden Flanke des read Impulses bereit (angenommen dieses Signal ist high-aktiv). Sie besitzen also eine Latenz von einem read Clock. Willst oder musst du die Daten schon vorher übernehmen müsstes du einen sog. First-Word Fall-Through FIFO implementieren. Bei dem stehen die Daten schon mit dem ersten read Impuls bereit. Hoffe ich konnte weiterhelfen.
Danke das du mir so schnell geantwortet hast :-) Also Timming würde ich nicht sagen, denn ich steppe das ganze. >>Bei einem normalen FIFO stehen die Daten erst nach der fallenden Flanke des read Impulses bereit (angenommen dieses Signal ist high-aktiv). << Ich denke das könnte es sein, ich sende Read Impuls (high-aktiv) und lese die Daten, das teste ich naher mal. >>Willst oder musst du die Daten schon vorher übernehmen müsstes du einen sog. First-Word Fall-Through FIFO implementieren.<< Das First-Word Fall-Through FIFO habe ich gerade unter IPCORE-Generator gefunden und mir ein Fifo erstellt, auch das werde ich mal testen. mfg FrankS
>>Bei einem normalen FIFO stehen die Daten erst nach der >>fallenden Flanke des read Impulses bereit >>(angenommen dieses Signal ist high-aktiv). Nein, sie stehen im naechsten Takt nach dem read Signal bereit. (Genauer: wenige Nanosekunden nach der steigenden Flanke der Clock, wenn das read Signal wenige Nanosekunden vor der Flanke bis wenige Nanosekunden anch der Flanke high war (wenig = 1-2 ns bei einem Virtex2/4). Das read-Signal kann z.B. dauerhaft high sein, dann werden in jedem Takt Daten gelesen.
>>Nein, sie stehen im naechsten Takt nach dem read Signal bereit<<.
Ja so ist es natürlich richtig. Aber eben nicht gleichzeitig mit dem
read signal wollte ich damit nur sagen.
Danke für eure Hilfe, Ich habe mir jetzt so wie ugly_dugly schrieb, einen First-Word Fall-Through FIFO erstellt. Eingebunden habe ich den (ENTITY fifo_generator_v4_3 IS) in mein Main.hdl file (entity main is) Und da stehe ich noch etwas auf dem Schlauch, da ich einen Fehler bekomme. ERROR:HDLParsers:3281 - "C:/Xilinx_Projekte10/V2_FIFO_VHDL/Test_fifo/fifo_generator_v4_3.vhd" Line 50. behavioral is not an architecture body for fifo_generator_v4_3 in library XilinxCoreLib. genau in dieser zeile springt er rein.. -- Configuration specification for all : wrapped_fifo_generator_v4_3 use entity XilinxCoreLib.fifo_generator_v4_3(behavioral) generic map( c_has_int_clk => 0, c_rd_freq => 1, c_wr_response_latency => 1, c_has_srst => 0, u.s.w ..... Könnt ihr mir einen Tipp geben, denn einen erstellten core vom CoreGenerator habe ich noch nie mit eingebunden. mfg Frank S
Ich vermute du versuchst das vom Core Generator erzeugte VHDL File für die Einbindung des FIFOs in dein Top-Level zu verwenden. Dieses VHDL File ist aber nur für die Simulation gedacht. Du musst den FIFO aber per black_box attribut einbinden. z.B. wie folgt:
1 | component fifo_sync_32Kx32 |
2 | port ( |
3 | clk : IN std_logic; |
4 | din : IN std_logic_VECTOR(31 downto 0); |
5 | rd_en : IN std_logic; |
6 | rst : IN std_logic; |
7 | wr_en : IN std_logic; |
8 | dout : OUT std_logic_VECTOR(31 downto 0); |
9 | empty : OUT std_logic; |
10 | full : OUT std_logic; |
11 | prog_full: OUT std_logic); |
12 | end component; |
13 | |
14 | attribute box_type : string; |
15 | attribute box_type of fifo_sync_32Kx32 : component is "black_box"; |
Guck einfach mal in die Hilfe zum Core Generator und ISE, da finmdest du mehr Infos dazu.
ugly_dugly wrote: > Ich vermute du versuchst das vom Core Generator erzeugte VHDL File für > die Einbindung des FIFOs in dein Top-Level zu verwenden. Hallo ugly, ja genau so ist es, aber ich sagte ja schon das ich noch nie einen Core vom coreCenerator eingebunden habe... Ich werde mir mal die Hilfe anschauen und wie man das macht. mfg FrankS
Na also, habe es geschafft. Man muss sich nur mal die Exampe von ISE anschauen. Also der Fifo bringt jetzt beim ersten Lesen auch das erste Word was man geschrieben hat. ( First-Word Fall-Through FIFO ) war das richtige. Nur was ich noch nicht verstanden habe, bei dem Example sind >-- FPGA Express Black Box declaration >attribute fpga_dont_touch: string; >attribute fpga_dont_touch of tenths: component is "true"; >-- Synplicity black box declaration >attribute syn_black_box : boolean; >attribute syn_black_box of tenths: component is true; aber erst mit ugly_dugly seinem text ging es >attribute box_type : string; >attribute box_type of fifo_sync_32Kx32 : component is "black_box"; Kann mir das einer von euch sagen woher und wofür die Wörter kommen. >fpga_dont_touch >syn_black_box >box_type mfg FrankS
Geh mal in deine Projektansicht, lade das VHDL-File des Fifos, das der CoreGen erzeugt hat, per "Add -> Existing File" ins Projekt rein, dann kannst du unten bei Processes "View instantiation template" starten und schon wirft dir die ISE die korrekte Einbindung raus. Da musst du dann nur noch die Signale an deine internen Signale oder externe Ports anschließen.
Das habe ich gemacht, aber bei mir kommt da nicht viel raus Started : "View HDL Instantiation Template". Compiling vhdl file "C:/Xilinx_Projekte10/V2_FIFO_VHDL/mein_fifo/../fifo/fifo_generator_v4 _3.vhd" in Library work. Entity <fifo_generator_v4_3> compiled. Entity <fifo_generator_v4_3> (Architecture <fifo_generator_v4_3_a>) compiled. tdtfi(vhdl) completed successfully. Process "View HDL Instantiation Template" completed successfully mfg FrankS
Dann öffne mal selber die Datei "fifo_generator_v4_3.vhi" im Projektverzeichnis, normalerweise wird die direkt nach dem Erstellen angezeigt.
Habe ich gerade gemacht, auch so wie du schon geschrieben hast, wird die fifo_generator_v4_3.vhi sofort geöffnet. Aber da steht die Anbindung auch nicht drin.. sondern.. > COMPONENT fifo_generator_v4_3 > PORT( > clk : IN std_logic; > din : IN std_logic_vector(31 downto 0); > rd_en : IN std_logic; > rst : IN std_logic; > wr_en : IN std_logic; > dout : OUT std_logic_vector(31 downto 0); > empty : OUT std_logic; > full : OUT std_logic > ); > END COMPONENT; > > Inst_fifo_generator_v4_3: fifo_generator_v4_3 PORT MAP( > clk => , > din => , > rd_en => , > rst => , > wr_en => , > dout => , > empty => , > full => > );
Meine Frage war ja wie etwas oben geschrieben, wie man auf die attribute text kommt. >Nur was ich noch nicht verstanden habe, bei dem Example sind >-- FPGA Express Black Box declaration >attribute fpga_dont_touch: string; >attribute fpga_dont_touch of tenths: component is "true"; >-- Synplicity black box declaration >attribute syn_black_box : boolean; >attribute syn_black_box of tenths: component is true; aber erst mit ugly_dugly seinem text ging es >attribute box_type : string; >attribute box_type of fifo_sync_32Kx32 : component is "black_box";
Also ich versteh dein problem nicht ganz. Den Abschnitt bei Component muss in die Architecture und die Instanziierung nach dem Begin in die Behavior des VHDL files, in welches du den FIFO einbauen willst. Noch die Signale anschließen und gut. Da muss man doch nix extra mit text irgendwas machen.
Jetzt verstehe ich das erst. Wenn ich die 2 zeilen raus nehme, >--attribute box_type : string; >--attribute box_type of fifo_511_32 : component is "black_box"; bekomme ich nur eine Warnung. >Xst:2211 - "C:/Xilinx_Projekte10/fifo/fifo/main.vhd" line 125: >Instantiating black box module <fifo_511_32>. wenn ich die zeilen einschreibe, bekomme ich keine Warnung. Das hat mich Interessiert, wie und woher der text kommt. (Instantiating black box module) mfg FrankS
Guten Morgen, Ich spiele gerade mit dem BlockRam Generator rum, na ja halt üben üben üben :-) Und bei einem Single Block Ram Erstellung bekomme ich input clka; input [31 : 0] dina; input [10 : 0] addra; input ena; input [0 : 0] wea; output [31 : 0] douta; Nur bei input [0 : 0] wea; verstehe ich nur Bahnhof ? warum [0:0] ? das ist doch nur EIN Input .! ich muss das also wirklich so schreiben, sonst bekomme ich einen Fehler. wea: in STD_LOGIC_VECTOR (0 downto 0); Kann mir dazu jmd was schreiben ? mfg
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.