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
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
useIEEE.STD_LOGIC_ARITH.ALL;
4
useIEEE.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
entityDelayeris
12
port(
13
reset:instd_logic;
14
clk:instd_logic;
15
cin:instd_logic;
16
dly_out:outstd_logic_vector(31downto0);
17
data_out:outstd_logic_vector(1downto0)
18
);
19
endDelayer;
20
21
architectureBehavioralofDelayeris
22
23
signaldel:std_logic_vector(127downto0);
24
signalpd_D:std_logic_vector(127downto0);
25
signalpd_R:std_logic_vector(31downto0);
26
signaldata_R:std_logic_vector(1downto0);
27
28
signalclk_n:std_logic;
29
30
attributekeep:string;
31
attributekeepofdel:signalis"true";
32
attributekeepofpd_D:signalis"true";
33
attributekeepofpd_R:signalis"true";
34
attributekeepofdata_R:signalis"true";
35
36
attributeINIT:string;
37
attributeINITofffloop_1:labelis"0";
38
attributeINITofffloop_2:labelis"0";
39
attributeINITofffd_1:labelis"0";
40
attributeINITofffd_2:labelis"0";
41
42
--attribute equivalent_register_removal : string;
43
--attribute equivalent_register_removal of mloop is "false";
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