Gestern in einem englischen Forum gelesen, dass es auch möglich sein soll auf DCM Wizard zu verzichten und DCM aus dem Code inferieren zu lassen. Es war der Verweis auf lib.pdf, in welchem ich auch nachgeschaut habe. Fand dort allerdings nichts. lib.pdf ist 2008 datiert und ist leicht mit google zu finden: library xilinx Now I am looking for the vhdl code pattern which would let xst to infere DCM. Does someone of you guys know how do it?
Eat this ;-) Top-level module:
1 | :
|
2 | :
|
3 | component xilinx_dcm |
4 | Port ( clkin : in STD_LOGIC; |
5 | reset : in STD_LOGIC; |
6 | clkout : out STD_LOGIC |
7 | );
|
8 | end component; |
9 | :
|
10 | :
|
11 | CLOCK_x7 : xilinx_dcm |
12 | port map ( clkin => lvdsclkin, |
13 | reset => resetdcm, |
14 | clkout => CLK |
15 | );
|
16 | :
|
Inferieren bedeutet ja, dass man einen allgemeinen VHDL-Befehl schreibt, der auf verschiedener Hardware verschieden umgesetzt werden könnte, und das Synthese Tool erkennt das und inferiert dann eben ein Element der jeweiligen Zielhardware (so wie ein if CLK='1' and CLK'event ein FF inferiert, obwohl das nicht direkt daraus hervorgeht). Die Library jedoch ist eine Sammlung von Macros und Primitives, die direkt verschiedene Elemente der Hardware repräsentieren - LUT's, FF's, IOB's, BRAM's, und eben auch DCM's (beim Spartan heißt es DCM_SP). Diese primitives kann man in VHDL-Code verwenden, das ist aber dann hardwareabhängig und nennt sich Instantiation. So kann man ohne DCM-Wizard direkt in VHDL-Code DCM's verwenden - aber es ist halt nicht inferieren. Der Hinweis auf eine Library im Zusammenhang mit Inferieren ist also widersprüchlich. Diese Library wird automatisch verwendet, wenn du mit der ISE ein Projekt für einen bestimmten FPGA anlegst, du kannst die Primitives sofort im VHDL-Code verwenden. Im ISE Manual Index (http://www.xilinx.com/itp/xilinx10/books/manuals.pdf) befinden sich Links zu den Anleitungen der Libraries der einzelnen FPGA-Typen (dort heißen sie Libraries Guide).
Das implizite Inferieren eines DCM war mir so abwegig, dass ich nicht mal auf die Idee kam, es könnte damit nicht Instantiieren gemeint sein. :-o Es stimmt natürlich: Abhängig von der Beschreibung kann die Synthese z.B. selbständig aus einer generischen Beschreibung eines getakteten RAMS ein Block-RAM inferieren. Der Code bleibt portabel. Ich kann das Bauteil aber auch von Hand instantiieren und verdrahten. Dieser Code kann nur für Xilinx-FPGAs verwendet werden. Beides läuft aber auf reiner VHDL-Beschreibung ohne irgendwelche Wizzards ab. EDIT: > Links zu den Anleitungen der Libraries der einzelnen FPGA-Typen Erwähnenswert hierbei auch die Datei xst.pdf, wo beschrieben ist, was die Xilinx-Synthese selber erkennen kann und was daraus gemacht wird. Bzw. im Umkehrschluss, wie eine Beschreibung aussehen muß, dass ein bestimmtes Bauteil daraus synthetisiert wird.
hallo, ich habe ein problem ,kann jemand von euch mir helfen? ich habe ein programm geschrieben und habe ein problem dass die simulation nicht ganz fonktioniert wie ich das vorgestellt habe. ich will 256 bits in einem speicher als 8 mal 32 bits speichern dafür habe ich einen Zähler verwendet. der zähler zählt von 0 bis 7 und jedes mal sollen 32 bits zu einem speicher(fsl_M_Data) geschickt werden dh 8 mal sollen 32 bits gespeichert. wenn jede paket bzw 32bits zum speicher (FSL_M_Data) angekomen sind ,soll das code FSL_M_Full='1' eingesetzt wird das soll nach jeder paket passieren .aber FSL_M_FULL wird auf 1 eingesetzt nur nach erster pakete. mein programm sieht so aus: states : process ( current_state, CRPT_Clk, CRPT_result_rdy ) variable l: integer := 0; Begin CASE current_state IS WHEN Adapter => m <= CRPT_result; crpt_next_result<='1'; WHEN MP_Ubergabe => FSL_M_Full<='0' ; FSL_M_Data<=m(((32*L)+0) to ((32*L)+31)); --(da werden die pakete dh jede 32 bits zum FSL_M_data geschickt) L:= L + 1; --das ist der Zähler --hier habe ich FSL_M_Data mit dem wert erster 32 bits eingesetzt if (FSL_M_data="00000000000000000000000000000001")then FSL_M_Full<='1'; was soll ich machen wenn FSL_M_full ='1' ist wenn jedes mal FSL_M_Data 32bits bekommt? dh FSL_M_Full='1'wenn fSL_M_Data sich wechselt ? danke schön.
@Amel Elh (imilia): Bitte mach mit Deiner Frage ein neues Thema auf. Außerdem ist komplette Quelltext (inklusive einer Testbench!) viel eher zur Fehlersuche geeignet, als irgendwelche Codeschnipsel. Duke
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.