Hallo! Ich möchte eine Delay Line in VHDL generieren (die auch synthetisierbar sein soll). Außerdem funktioniert das Ganze wie eine Art Sampler... Ich bekomme 32 Abtastpunkte. Habe soweit folgendes zusammen: [╝vhdl] library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Delayer is port( reset : in std_logic; clk : in std_logic; cin : in std_logic; dly_out : out std_logic_vector (31 downto 0); data_out : out std_logic_vector (1 downto 0) ); end Delayer; architecture Behavioral of Delayer is signal del : std_logic_vector (127 downto 0); signal pd_D : std_logic_vector (127 downto 0); signal pd_R : std_logic_vector (31 downto 0); signal data_R : std_logic_vector (1 downto 0); signal clk_n : std_logic; attribute keep : string; attribute keep of del : signal is "true"; attribute keep of pd_D : signal is "true"; attribute keep of pd_R : signal is "true"; attribute keep of data_R : signal is "true"; attribute INIT : string; attribute INIT of ffloop_1 : label is "0"; attribute INIT of ffloop_2 : label is "0"; attribute INIT of ffd_1 : label is "0"; attribute INIT of ffd_2 : label is "0"; --attribute equivalent_register_removal : string; --attribute equivalent_register_removal of mloop is "false"; component MUXCY_L port (LO : out STD_ULOGIC; CI : in STD_ULOGIC; DI : in STD_ULOGIC; S : in STD_ULOGIC); end component; component XORCY_L port(LO : out STD_ULOGIC; CI : in STD_ULOGIC; LI : in STD_ULOGIC); end component; component FDC -- synthesis translate_off generic (INIT : bit:= '1'); -- synthesis translate_on port (Q : out STD_ULOGIC; C : in STD_ULOGIC; CLR : in STD_ULOGIC; D : in STD_ULOGIC); end component; attribute box_type : string; attribute box_type of MUXCY_L : component is "black_box"; attribute box_type of XORCY_L : component is "black_box"; attribute box_type of FDC : component is "black_box"; attribute noopt : boolean; attribute noopt of MUXCY_L : component is true; attribute noopt of XORCY_L : component is true; attribute noopt of FDC : component is true; begin clk_n <= not clk; mux0: MUXCY_L port map(LO => del(0), CI => cin, DI => '0', S => '1'); mloop: for j in 1 to 127 generate mux: MUXCY_L port map(LO => del(j), CI => del(j-1), DI => '0', S => '1'); end generate; xloop: for k in 0 to 127 generate xor_del: XORCY_L port map(LO => pd_D(k), CI => del(k), LI => '1'); end generate; ffloop_1: for m in 0 to 15 generate ff : FDC -- synthesis translate_off generic map (INIT => '0') -- synthesis translate_on port map (Q => pd_R(m), C => clk, CLR => reset, D => pd_D(4*m)); end generate; ffd_1 : FDC -- synthesis translate_off generic map (INIT => '0') -- synthesis translate_on port map (Q => data_R(0), C => clk_n, CLR => reset, D => pd_D(62)); ffd_2 : FDC -- synthesis translate_off generic map (INIT => '0') -- synthesis translate_on port map (Q => data_R(1), C => clk_n, CLR => reset, D => pd_D(63)); ffloop_2: for n in 16 to 31 generate ff : FDC -- synthesis translate_off generic map (INIT => '0') -- synthesis translate_on port map (Q => pd_R(n), C => clk, CLR => reset, D => pd_D(4*n)); end generate; dly_out <= pd_R; data_out <= (not data_R(1), not data_R(0)); end Behavioral; [/vhdl] Die mittleren zwei Elemente der Delay Line möchte ich zusätzlich abgreifen. Jetzt würde ich das Ganze gerne simulieren, bekomme aber für alle Elemente von mloop, xloop, ffloop_1, ffd_1, ffd_2, ffloop_2 folgende Fehlermeldung (Hier eine Beispielhaft): ** Warning: (vsim-3473) Component instance "mux : muxcy_l" is not bound. Was bedeutet das in dem Kontext? Ich mein verbunden sind die doch alle korrekt, oder? Wurden die wegoptimiert? Hab ich nen Denkfehler? Viele Grüße, Erdin
Hallo! Ich möchte eine Delay Line in VHDL generieren (die auch synthetisierbar sein soll). Außerdem funktioniert das Ganze wie eine Art Sampler... Ich bekomme 32 Abtastpunkte. Habe soweit folgendes zusammen:
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 | ---- Uncomment the following library declaration if instantiating
|
7 | ---- any Xilinx primitives in this code.
|
8 | --library UNISIM;
|
9 | --use UNISIM.VComponents.all;
|
10 | |
11 | entity Delayer is |
12 | port( |
13 | reset : in std_logic; |
14 | clk : in std_logic; |
15 | cin : in std_logic; |
16 | dly_out : out std_logic_vector (31 downto 0); |
17 | data_out : out std_logic_vector (1 downto 0) |
18 | );
|
19 | end Delayer; |
20 | |
21 | architecture Behavioral of Delayer is |
22 | |
23 | signal del : std_logic_vector (127 downto 0); |
24 | signal pd_D : std_logic_vector (127 downto 0); |
25 | signal pd_R : std_logic_vector (31 downto 0); |
26 | signal data_R : std_logic_vector (1 downto 0); |
27 | |
28 | signal clk_n : std_logic; |
29 | |
30 | attribute keep : string; |
31 | attribute keep of del : signal is "true"; |
32 | attribute keep of pd_D : signal is "true"; |
33 | attribute keep of pd_R : signal is "true"; |
34 | attribute keep of data_R : signal is "true"; |
35 | |
36 | attribute INIT : string; |
37 | attribute INIT of ffloop_1 : label is "0"; |
38 | attribute INIT of ffloop_2 : label is "0"; |
39 | attribute INIT of ffd_1 : label is "0"; |
40 | attribute INIT of ffd_2 : label is "0"; |
41 | |
42 | --attribute equivalent_register_removal : string;
|
43 | --attribute equivalent_register_removal of mloop is "false";
|
44 | |
45 | component MUXCY_L |
46 | port (LO : out STD_ULOGIC; |
47 | CI : in STD_ULOGIC; |
48 | DI : in STD_ULOGIC; |
49 | S : in STD_ULOGIC); |
50 | end component; |
51 | |
52 | component XORCY_L |
53 | port(LO : out STD_ULOGIC; |
54 | CI : in STD_ULOGIC; |
55 | LI : in STD_ULOGIC); |
56 | end component; |
57 | |
58 | component FDC |
59 | -- synthesis translate_off
|
60 | generic (INIT : bit:= '1'); |
61 | -- synthesis translate_on
|
62 | port (Q : out STD_ULOGIC; |
63 | C : in STD_ULOGIC; |
64 | CLR : in STD_ULOGIC; |
65 | D : in STD_ULOGIC); |
66 | end component; |
67 | |
68 | attribute box_type : string; |
69 | attribute box_type of MUXCY_L : component is "black_box"; |
70 | attribute box_type of XORCY_L : component is "black_box"; |
71 | attribute box_type of FDC : component is "black_box"; |
72 | |
73 | attribute noopt : boolean; |
74 | attribute noopt of MUXCY_L : component is true; |
75 | attribute noopt of XORCY_L : component is true; |
76 | attribute noopt of FDC : component is true; |
77 | |
78 | begin
|
79 | |
80 | clk_n <= not clk; |
81 | |
82 | mux0: MUXCY_L port map(LO => del(0), CI => cin, DI => '0', S => '1'); |
83 | |
84 | mloop: for j in 1 to 127 generate |
85 | mux: MUXCY_L port map(LO => del(j), CI => del(j-1), DI => '0', S => |
86 | '1'); |
87 | end generate; |
88 | |
89 | xloop: for k in 0 to 127 generate |
90 | xor_del: XORCY_L port map(LO => pd_D(k), CI => del(k), LI => '1'); |
91 | end generate; |
92 | |
93 | ffloop_1: for m in 0 to 15 generate |
94 | ff : FDC |
95 | -- synthesis translate_off
|
96 | generic map (INIT => '0') |
97 | -- synthesis translate_on
|
98 | port map (Q => pd_R(m), C => clk, CLR => reset, D => pd_D(4*m)); |
99 | end generate; |
100 | |
101 | ffd_1 : FDC |
102 | -- synthesis translate_off
|
103 | generic map (INIT => '0') |
104 | -- synthesis translate_on
|
105 | port map (Q => data_R(0), C => clk_n, CLR => reset, D => pd_D(62)); |
106 | |
107 | ffd_2 : FDC |
108 | -- synthesis translate_off
|
109 | generic map (INIT => '0') |
110 | -- synthesis translate_on
|
111 | port map (Q => data_R(1), C => clk_n, CLR => reset, D => pd_D(63)); |
112 | |
113 | ffloop_2: for n in 16 to 31 generate |
114 | ff : FDC |
115 | -- synthesis translate_off
|
116 | generic map (INIT => '0') |
117 | -- synthesis translate_on
|
118 | port map (Q => pd_R(n), C => clk, CLR => reset, D => pd_D(4*n)); |
119 | end generate; |
120 | |
121 | dly_out <= pd_R; |
122 | data_out <= (not data_R(1), not data_R(0)); |
123 | |
124 | end Behavioral; |
Die mittleren zwei Elemente der Delay Line möchte ich zusätzlich abgreifen. Jetzt würde ich das Ganze gerne simulieren, bekomme aber für alle Elemente von mloop, xloop, ffloop_1, ffd_1, ffd_2, ffloop_2 folgende Fehlermeldung (Hier eine Beispielhaft): ** Warning: (vsim-3473) Component instance "mux : muxcy_l" is not bound. Was bedeutet das in dem Kontext? Ich mein verbunden sind die doch alle korrekt, oder? Wurden die wegoptimiert? Hab ich nen Denkfehler? Viele Grüße, Erdin
Lies dir mal die vier Kommentarzeilen fast m Anfang des Codes durch. Du wirst an der normalen Simulation aber keine Freude haben - du musst eine timing simulation machen, sonst werden keine Laufzeiten im FPGA simuliert.
Ich muss gestehen, mir ist das auch gerade aufgefallen, dass die auskommentiert waren =D! Das war nicht so gedacht... Was meinst Du mit Timing Simulation? Wie kann ich die machen?
Warum machst du dir diesen abartigen Aufwand, um ein paar Register,
einen MUX und ein XOR zu instantiieren? Hier wäre eine
Verhaltensbeschrbung tausendmal durchschau- und lesbarer...
> Was meinst Du mit Timing Simulation? Wie kann ich die machen?
Du mußt dein Design implementieren und danach auf den ensprechenden
Knopf (Prozess) drücken. So ähnlich, wie die Verhaltenssimulation, aber
etwas weiter unten...
Hmm... also ich find den Code recht kompakt... Wenn Du das in VHDL kürzer hinbekommst... nur zu =)! Ich bin blutiger Anfänger und brauche erst noch das Gefühl. Zumal ich mich relativ strikt an die Xilinx AppNote 250 gehalten habe um das zu implementieren. Die machen das da auch so... Das mit der Simulation hab ich auch mittlerweile rausgefunden... Muss mich noch mit den ganzen Tools anfreunden =/...
> Wenn Du das in VHDL kürzer hinbekommst ... nur zu =)! Wenn du mir sagst, was es tun soll... ;-) Oder alternativ, wofür du es brauchst... > Ich bin blutiger Anfänger und brauche erst noch das Gefühl. > Zumal ich mich relativ strikt an die Xilinx AppNote 250 gehalten habe > um das zu implementieren. Die machen das da auch so... Du bist Anfänger und hast die XAPP250 im Auge. Donnerwetter, mein Respekt... :-o
Lothar Miller schrieb: > Wenn du mir sagst, was es tun soll... ;-) > Oder alternativ, wofür du es brauchst... Wie in der AppNote beschrieben, soll das ne DelayLine werden, die bei einem Takt von 160MHz etwas mehr als eine Periode aber nicht mehr als zwei Perioden buffert. Dabei wird das Signal gleichmäßig an 32 Punkten abgetastet, um später damit eine Flanke zu erkennen (wird nicht in diesem Modul gemacht). Das Ganze wird gebraucht, um Clock Data Recovery zu machen. Ich will hier also die übertragenen Bits zurückgewinnnen. Ein externer VCO wir dabei so gesteuert, dass der Flankenwechsel immer in der Mitte der Delayline geschieht. Die anderen Abtastwerte werden verwendet, um den VCO zu steuern. >> Ich bin blutiger Anfänger und brauche erst noch das Gefühl. >> Zumal ich mich relativ strikt an die Xilinx AppNote 250 gehalten habe >> um das zu implementieren. Die machen das da auch so... > Du bist Anfänger und hast die XAPP250 im Auge. > Donnerwetter, mein Respekt... :-o Naja irgendwie muss sich doch mein Studium für was gelohnt haben =D ! Naja ich kann ja relativ gut Verilog... Somit ist es nicht allzu schlimm =) !
>** Warning: (vsim-3473) Component instance "mux : muxcy_l" is not bound. >Was bedeutet das in dem Kontext? Ich mein verbunden sind die doch alle >korrekt, oder? Wurden die wegoptimiert? Hab ich nen Denkfehler? Bei einer funktionalen Simulation (Simulation des HDL-Codes, nicht der synthetisierten Netzliste) wird nicht wegoptimiert. Das hört sich eher dananch an, dass du das Portmapping falsch machst, oder du hast nicht die richtigen Bibliotheken eingebunden. IsKlar
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.