Forum: FPGA, VHDL & Co. Xilinx unisim library und ghdl, DCM tut nicht


von berndl (Gast)


Lesenswert?

Hi allerseits,

ich habe einen Design mit DCM (input clk=20ns, dcm-clk=10ns), der 'auf 
Arbeit' unter ISE10.1+Windows prima simuliert (ModelSim).

Jetzt versuche ich zuhause unter Ubuntu8.04 die Simulation mit 'ghdl' 
ans laufen zu bekommen. Dazu habe ich die Xilinx libs und den Design 
folgendermassen compiliert und simuliert:
1
Unisim Library
2
--------------
3
mkdir ~/Misc/vhdl/unisim
4
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit unisims/unisim_VCOMP.vhd
5
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit unisims/unisim_VPKG.vhd
6
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit unisims/unisim_VITAL.vhd
7
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit unisims/unisim_SMODEL.vhd
8
9
Design
10
------
11
mkdir ~/Misc/vhdl/<design>
12
mkdir ~/Misc/vhdl/<design>/work
13
ghdl -i --workdir=work *.vhd
14
ghdl -m --workdir=work -P../unisim --ieee=synopsys -fexplicit <design_tb>
15
ghdl -r top_iis_labcar_tb --vcd=<design_tb>.vcd
16
gtkwave <design_tb>.vcd &

Scheint prinzipiell zu funktionieren, ein BRAM kann ich prima 
ansprechen. Nur aus dem DCM kommt keine Clock raus :o(

Hat da jemand einen Tipp fuer mich?

von berndl (Gast)


Lesenswert?

so, nachdem keine Antwort kam...

Ich habe mir einen kleinen Mini-DCM selbst geschrieben, der bedient den 
clk-out sowie den locked.

Funzt erstmal prima, aber ich muss natuerlich eine neue entity in dem 
Design einbinden, also m.E. nach suboptimal.

Wenn keiner 'ne Idee hat, dann ist das hier halt 'closed'...

von Christian R. (supachris)


Lesenswert?

Vielleicht ist die Lib irgendwie zu alt. Ich arbeite noch mit 9.2.0.4 
unter Win XP, da geht die Simulation des DCM mit Modelsim auch nicht 
korrekt (das Locked geht nie auf High).

von THe ImAgEr (Gast)


Lesenswert?

Auflösung auf ps gestellt? :-)

von berndel (Gast)


Lesenswert?

wo/wie stelle ich in ghdl die Auloesung denn ein?

von Sven (Gast)


Lesenswert?

Hallo berndl,

hast du eine Loesung dafuer gefunden? Ich habe gerade das gleiche 
Problem...

Gruesse

Sven

von berndl (Gast)


Lesenswert?

nee, leider nicht...

Ich verwende fuer die Simulation halt einen eigenen 'hand-made' DCM

von René D. (Firma: www.dossmatik.de) (dose)


Angehängte Dateien:

Lesenswert?

Hi,

 genau das Problem habe ich gerade gelöst.

ISE 11.4


Ausgegangen bin ich von der Anleitung.
http://aoa.vwthunderstorm.de/wiki/FPGA_Linux_Simulation

Leider ist das Simulationsskript in ganz ok. Die DCM ist im 
Unterverzeichnis primitive von der Unisim und das muss mit angeben 
werden.


PS:
Als Simulationsausgabe nutze das Format ghw das ist für VHDL besser.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Nochmal in plaintext. Bei meinem Webbrowser konnte ich die Shell nicht 
online öffnen.
#---------------------------------------------
#remove library directories if they exist
cd ../libs
if [ -e work ]; then
  rm -r work
fi
if [ -e unisim ]; then
  rm -r unisim
fi

#make new directories
mkdir work
mkdir unisim
cd ..

echo 'compile xilinx unisim libraries'
ghdl -i --work=unisim --workdir=libs/unisim 
/opt/Xilinx/11.1/ISE/vhdl/src/unisims/*.vhd
ghdl -i --work=unisim --workdir=libs/unisim 
/opt/Xilinx/11.1/ISE/vhdl/src/unisims/primitive/*.vhd
echo 'compile design files'
ghdl -i --workdir=libs/work ../rtl/*.vhd

echo 'make a design'
ghdl -m -g -Plibs/unisim --workdir=libs/work --warn-default-binding 
--warn-binding --warn-library --warn-body --warn-specs --warn-unused 
--ieee=synopsys $2

echo '=================================='
echo 'design consists of following units:'
echo '----------------------------------'
ghdl -d --work=work --workdir=libs/work
echo '===================================='
echo 'detected following design hierarchy:'
echo '------------------------------------'

echo 'run the testbench'
ghdl -r $2  --disp-tree=inst --stop-time=20000ns --wave=waveform/$1.ghw

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich habe zu GHDL und Unisim ein Dokument verfasst, um das Problem der 
Einbindung der Unisim schneller in griff zu bekommen.


Es baut auf einen VGA Beispiel auf. Hier wird an der der Auflösung 
erhöht und dabei kommt man nicht um eine Taktvervielfachung mit der DCM 
nicht herum.


http://www.dossmatik.de/ghdl/ghdl_unisim.pdf

von berndl (Gast)


Lesenswert?

Hi,

um den alten Thread nochmal auszugraben...

Ich hatte mir bisher damit geholfen, dass ich einen 'hand-made' DCM 
gebaut habe. Dieser wurde als component 'dcm_test' eingebunden, dann 
waren in der Instantiierung halt 2 Zeilen, der originale DCM von Xilinx 
und mein 'dcm_test' auszuwaehlen (mittels Kommentar).

Jetzt habe ich vor, einen Spartan3 Multiplier zu benutzen. Ich bin 
wieder ueber das Problem gestolpert, dass GHDL nix sinnvolles rauswirft.

Ich hab's mal mit den Xilinx 11.1 Libs versucht, genauso wie Rene es 2 
Posts weiter oben beschrieben hat. Aber es kommt nix raus....


Also Preisfrage: Wer hat GHDL mit den Xilinx Libs (DCM, Multiplier, ...) 
am laufen und wie hat er das hingekriegt?

Ich vermute, es liegt an den Pikosekunden, die in den Libs immer wieder 
verwendet werden. Und ich habe bisher noch nix gefunden, wie ich GHDL 
diese Pikosek. Aufloesung beibringen kann.


Hat da jemand den Durchblick?

Gruss,
- berndl

von berndl (Gast)


Lesenswert?

so, ich habe jetzt mal den VHDL code aus der Xilinx Lib (bei mir 10.3) 
fuer den Multiplier in eine eigene entity/component reinkopiert und die 
eine Stelle an der was mit 'ps' stand durch '1 ns' ersetzt. Und: Nix 
geht!

Ich kriege aus dem Multiplier MULT18X18S nur 'xxx' raus!

Also ich bin mit meinem Latein jetzt am Ende.......

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Hallo Bernd,



hast du ein Screenshot von gtkwave?
oder eine Fehlermeldung

1. Also die DCM zumindest habe ich mit GHDL zum Laufen bekommen. Das 
habe ich auch in dem Beispielcode genutzt.

2. Ich habe auch bereits Multiplikationen mit GHDL simuliert. Das war 
z.B. in einem 2D Cosinustransformator für einen jpeg Decoder.
VHDL stellt mit der Numeric lib eine Multiplikation bereit, die auch 
synthetisiert werden kann.


use IEEE.numeric_std.all;

von hobbie (Gast)


Lesenswert?

Hi,

ich verwende ISIM statt GHDL. Damit gelingt die Simulation aller
Xilinx-Komponenten (habe auch GTX,TEMAC/EMAC,DSP48(E)...ausgiebigst
probiert) ohne Probleme.
EINZIGE VORAUSSETZUNG: die Auflösung muss immer auf 1PS gesetzt
werden (vieleicht klappen auch ein paar PS). Stellt man die Auflösung 
wesentlich gröber, dann kriegt man nur noch XXXX.
Versuch also einfach mal, GHDL 1PS als Auflösung beizubringen.

Gruss

von berndl (Gast)


Lesenswert?

René D. schrieb:
> 1. Also die DCM zumindest habe ich mit GHDL zum Laufen bekommen. Das
> habe ich auch in dem Beispielcode genutzt.

DCM habe ich jetzt mit der 11.1 Lib noch nicht probiert, versuche ich 
nochmal

>
> 2. Ich habe auch bereits Multiplikationen mit GHDL simuliert. Das war
> z.B. in einem 2D Cosinustransformator für einen jpeg Decoder.
> VHDL stellt mit der Numeric lib eine Multiplikation bereit, die auch
> synthetisiert werden kann.

Ja, das funktioniert, aber ich wollte die Komponente instantiieren.

Ich spiel heute nochmal ein bisschen rum...


@hobbie: Auf dem Rechner ist gar kein ISE drauf, ich habe nur die Libs 
vom Windowsrechner gezogen. Und wie ich bei GHDL 1ps Aufloesung 
einstelle koennte eines der Probleme sein. Ich habe dazu noch nix 
gefunden...

von hobbie (Gast)


Lesenswert?

Ich habe selbst noch kein GHDL benutzt, kenne uA aber
mehrere Anleitungen wie diese:
http://www.dossmatik.de/ghdl/ghdl_unisim_eng.pdf
Hier wird (angeblich erfolgreich) eine DCM simuliert.

Viel Spass

von berndl (Gast)


Lesenswert?

So, habe jetzt nochmal rumgespielt. Ich habe ein Ubuntu 8.04 (will 
demnaechst auf 10.04 umsteigen). Die Xilinx Webpack Libraries von 11.1 
liegen unter ~/Misc/vhdl/unisims. Da gibt es 'unisim_VCOMP.vhd' und 
'unisim_VPKG.vhd'. Dazu noch ein Subdirectory 'primitive' mit den ganzen 
Files (1043 Objekte).

Jetzt ein Directory '~/Misc/vhdl/unisim' angelegt, dann 'cd ~/Misc/vhdl' 
und
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit 
unisims/*.vhd
sowie
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit 
unisims/primitive/*.vhd

Das funktionierte nur, nachdem ich in 
'~/Misc/vhdl/unisims/primitive/RAM16BWE.vhd' die 6 Zeilen
--    variable Write_A_Write_B : memory_collision_type := 
Write_A_Write_B;
--    variable Read_A_Write_B  : memory_collision_type := 
Read_A_Write_B;
--    variable Write_A_Read_B  : memory_collision_type := 
Write_A_Read_B;
--    variable Write_B_Write_A : memory_collision_type := 
Write_B_Write_A;
--    variable Read_B_Write_A  : memory_collision_type := 
Read_B_Write_A;
--    variable Write_B_Read_A  : memory_collision_type := 
Write_B_Read_A;
auskommentiert habe. Das hatte ich auch schon mit den Libs von 10.3 so. 
Der ganze Krempel liegt also kompliert unter '~/Misc/vhdl/unisim' sowie 
im Source unter '~/Misc/vhdl/unisims'.

Flugs einen Design, der mit meinem 'hand-made' DCM funktioniert (und 
auch in der echten HW sowie mit ModelSim XE und PE mit dem 'echten' DCM) 
kompiliert und: => NIX. Keine Clock 2x aus dem DCM!


Also ich versteh's nicht. Meinen Design starte ich (ein subdirectory von 
~/Misc/vhdl/ mit
* ghdl -i --workdir=work *.vhd
* ghdl -m --workdir=work -P../unisim --ieee=synopsys -fexplicit 
<design_tb>
* ghdl -r <design_tb> --vcd=<design_tb>.vcd

Also, hat jemand mal einen Beispieldesign mit DCM (oder wahlweise auch 
Multiplier), der mit den Xilinx Libraries und GHDL funktioniert? Ich 
krieg's nicht hin...

Gruss+schoenen Sonntag noch,
- berndl

von René D. (Firma: www.dossmatik.de) (dose)


Angehängte Dateien:

Lesenswert?

Um mehreres auszuschließen, habe es gerade mit der aktuellen Version 
12.3 ausprobiert. Ich nutze Linux und habe ein Makefile für den Vorgang 
DCM erstellt. Besser kann ich es nicht erkären.

Im makefile muss der Path zur ISE stimmen. Der sollte entsprechend 
angepasst werden. Ich habe hier den Standard verwendet.
Das Makefile lädt die Testbench und ein VGA VHDL Beispiel, in der eine 
DCM enthalten ist,von meiner Homepage herunter.

Dann wird GHDL angeschoben und die Simulation erstellt eine ghw Datei.
ghw ist für VHDL besser geeignet.


also

make
make view

und dann in gtkwave die entscheidenden Signal auswählen und darstellten.

Bernd du schaffst das noch.
Ich kenne jetzt auch nicht alle Optionen von GHDL. Ich glaube du musst 
die unisim auch mit ghdl -i .... explizit auch einbinden.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Das Makefile als plain text nochmal, falls jemand den Anhang oben nicht 
sieht.




ISE_PATH=/opt/Xilinx/12.3/ISE_DS/ISE


all:
  mkdir vga1024x768
  cd vga1024x768
  wget http://www.dossmatik.de/ghdl/tb_vga.vhd
  wget http://www.dossmatik.de/ghdl/vga1024_768.vhd
  ghdl -i --work=unisim $(ISE_PATH)/vhdl/src/unisims/*.vhd
  ghdl -i --work=unisim $(ISE_PATH)/vhdl/src/unisims/primitive/*.vhd
  ghdl -i *.vhd
  ghdl -m -g -Punisim --warn-unused --ieee=synopsys tb_vga
  ghdl -r tb_vga --stop-time=20000ns --wave=vga.ghw

view:
  gtkwave  vga.ghw

von berndl (Gast)


Lesenswert?

Hallo Rene,
danke, probiere ich heute abend zuhause mal aus.

von berndl (Gast)


Lesenswert?

Sodele,

hab' mal Renes Vorschlag befolgt und bin wie oben beschrieben 
vorgegangen. Und: Funktioniert!

Jetzt faellt mir auf, dass ich die Xilinx Lib mit dem ghdl Schalter -a 
kompiliert habe, bei Rene steht da -i.

Komisch nur, dass zumindest das BRAM auch mit meiner Methode 
funktioniert, nicht hingegen DCM und Multiplier.

Also: Ich sehe ein, es geht. Danke fuer die Hilfen!

Gruss,
- berndl

von berndl (Gast)


Lesenswert?

So, nachdem Renes Design auch bei mir tut habe ich mal einen meiner 
Designs nach gleichem Schema getestet: Tut nix! Und das obwohl die HW 
damit schon 1-1/2 Jahre laeuft...

Hier mal mein Code zur DCM Instantiierung (clk ist die 50MHz Input 
Clock, clk100 meine 2x FPGA Clock):
1
   IBUFG_inst : IBUFG
2
   generic map (
3
      IOSTANDARD => "DEFAULT")
4
   port map (
5
      O => clkbuf,     -- Clock buffer output
6
      I => clk        -- Clock buffer input (connect directly to top-level port)
7
   );
8
9
   BUFG_inst : BUFG
10
   port map (
11
      O => clk100,       -- Clock buffer output
12
      I => clkdcm        -- Clock buffer input
13
   );
14
15
   DCM_inst : DCM generic map (
16
      CLKDV_DIVIDE => 2.5,         --  Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
17
                          --     7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
18
      CLKFX_DIVIDE => 1,           --  Can be any interger from 1 to 32
19
      CLKFX_MULTIPLY => 4,         --  Can be any integer from 1 to 32
20
      CLKIN_DIVIDE_BY_2 => FALSE,     --  TRUE/FALSE to enable CLKIN divide by two feature
21
      CLKIN_PERIOD => 20.0,            --  Specify period of input clock
22
      CLKOUT_PHASE_SHIFT => "NONE",   --  Specify phase shift of NONE, FIXED or VARIABLE
23
      CLK_FEEDBACK => "2X",           --  Specify clock feedback of NONE, 1X or 2X
24
      DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",   --  SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
25
                                --     an integer from 0 to 15
26
      DFS_FREQUENCY_MODE => "LOW",     --  HIGH or LOW frequency mode for frequency synthesis
27
      DLL_FREQUENCY_MODE => "LOW",     --  HIGH or LOW frequency mode for DLL
28
      DUTY_CYCLE_CORRECTION => FALSE,   --  Duty cycle correction, TRUE or FALSE
29
      FACTORY_JF => X"C080",            --  FACTORY JF Values
30
      PHASE_SHIFT => 0,              --  Amount of fixed phase shift from -255 to 255
31
      STARTUP_WAIT => FALSE)         --  Delay configuration DONE until DCM LOCK, TRUE/FALSE
32
   port map (
33
      CLK0 => open,         -- 0 degree DCM CLK ouptput
34
      CLK180 => open,       -- 180 degree DCM CLK output
35
      CLK270 => open,       -- 270 degree DCM CLK output
36
      CLK2X => clkdcm,       -- 2X DCM CLK output
37
      CLK2X180 => open,     -- 2X, 180 degree DCM CLK out
38
      CLK90 => open,         -- 90 degree DCM CLK output
39
      CLKDV => open,         -- Divided DCM CLK out (CLKDV_DIVIDE)
40
      CLKFX => open,         -- DCM CLK synthesis out (M/D)
41
      CLKFX180 => open,     -- 180 degree CLK synthesis out
42
      LOCKED => dcm_locked,   -- DCM LOCK status output
43
      PSDONE => open,       -- Dynamic phase adjust done output
44
      STATUS => open,       -- 8-bit DCM status bits output
45
      CLKFB => clk100,       -- DCM clock feedback
46
      CLKIN => clkbuf,       -- Clock input (from IBUFG, BUFG or DCM)
47
      PSCLK => '0',         -- Dynamic phase adjust clock input
48
      PSEN => '0',           -- Dynamic phase adjust enable input
49
      PSINCDEC => '0',       -- Dynamic phase adjust increment/decrement
50
      RST => '0'            -- DCM asynchronous reset input
51
   );
clkdcm und clk100 machen keinen Mucks, sind immer auf logisch 'high'...

Sieht da jemand meinen Fehler?

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Super Bernd,
vieleicht kannst du mir auch mal helfen.

eigentlich müsste es auch mit -a gehen. Es scheint ein Problem in der 
unisim zu sein. Xilinx ist hier nicht ganz sauber mit dem VHDL Standard.

von berndl (Gast)


Lesenswert?

René D. schrieb:
> Super Bernd,

nee, nicht wirklich. Bei mir tut der DCM ja immer noch nicht...

Bisher habe ich nur gesehen, dass dein DCM funktioniert (50MHz -> 
75MHz). Meiner (50 -> 100) haelt sich immer noch vornehm zurueck......

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Kannst du deinen Code mit einer Testbench posten?

von berndl (Gast)


Lesenswert?

Klar, ich stripp den Code mal runter bis aufs Minimum und poste das mal 
hier. Kann aber 1-2 Tage dauern bis ich dazu Zeit habe. Wuerde mich echt 
interessieren was da schief laeuft...

Gruss+danke,
- berndl

von Duke Scarring (Gast)


Lesenswert?

berndl schrieb:
> Bei mir tut der DCM ja immer noch nicht...

Schau mal hier, ob alle Bedingungen zutreffen:

http://forums.xilinx.com/t5/Simulation-and-Verification/DCMs-not-locking-in-ISE10-1-03i-ModelSim6-3c/m-p/30115/highlight/true#M283

Duke

P.S.: Das wäre dann kein ghdl-Problem, sondern ein wie verwende ich das 
DCM-Modell-Problem.

von berndl (Gast)


Angehängte Dateien:

Lesenswert?

Hi Duke,

hab' mich erstmal nicht getraut zu antworten, bevor ich die Simulation 
angeschmissen habe :o)

Hier mal ein Spieldesign (dcm_test_tb) mit 3 Variationen des Xilinx DCM. 
Die 3 Variationen sind:
* Renes DCM von weiter oben
* Mein DCM auch von weiter oben
* Ein am Freitag mit ISE10.3 und dem Wizard generierter DCM 2x Design

Das ganze mit den Xilinx 10.3 Libraries (liegen bei mir hier in einem 
'Parallelverzeichnis' zum Design), die Library wie auch weiter oben 
beschrieben compiliert.

Jetzt in meinem Target Verzeichnis (wo die .vhd Files liegen) folgendes 
gemacht:
* mkdir work
* ghdl -i --workdir=work *.vhd
* ghdl -m --workdir=work -P../unisim --ieee=synopsys -fexplicit 
dcm_test_tb
* ghdl -r dcm_test_tb --vcd=dcm_test_tb.vcd
* gtkwave dcm_test_tb.vcd &

Der Eingang ist clk50_in, die Ausgaenge sind clk75_rene_out, 
clk100_berndl_out und xil_wiz_clk2x_out.

Renes clk75 funktioniert. Meine und auch die Xilinx-Wizard generierte 2x 
Clock funktionieren nicht! In Modelsim funktioniert meine Clock, auch in 
der echten HW seit 1-1/2 Jahren.

Hat da irgend jemand eine Idee?

Gruss,
- berndl

von Duke Scarring (Gast)


Lesenswert?

berndl schrieb:
> Hat da irgend jemand eine Idee?
Nicht wirklicht. Ich bekomme es hier mit ghdl nicht simuliert:
1
ghdl -i --work=unisim BUFG.vhd DCM.vhd DCM_SP.vhd IBUFG.vhd unisim_VCOMP.vhd unisim_VPKG.vhd
2
3
ghdl -i berndl_dcm.vhd dcm_test_tb.vhd rene_dcm.vhd xil_wiz_dcm.vhd
4
5
ghdl -m -g -Punisim --ieee=synopsys dcm_test_tb
6
..\ieee\timing_b.vhd:196:15:warning: procedure "vitalerror" is never referenced
7
..\ieee\timing_b.vhd:217:15:warning: procedure "vitalerror" is never referenced
8
..\ieee\prmtvs_b.vhd:1041:15:warning: function "toedge" is never referenced
9
10
ghdl -r dcm_test_tb --stop-time=1us --vcd=../dcm_test_tb.vcd
11
rene_dcm.vhd:34:4:warning: component instance "clkin_ibufg_inst" is not bound
12
rene_dcm.vhd:18:14:warning: (in default configuration of rene_dcm(behavioral))
13
rene_dcm.vhd:38:4:warning: component instance "clk0_bufg_inst" is not bound
14
rene_dcm.vhd:18:14:warning: (in default configuration of rene_dcm(behavioral))
15
rene_dcm.vhd:44:4:warning: component instance "clkfx_bufg_inst" is not bound
16
rene_dcm.vhd:18:14:warning: (in default configuration of rene_dcm(behavioral))
17
rene_dcm.vhd:49:3:warning: component instance "dcm_sp_inst" is not bound
18
rene_dcm.vhd:18:14:warning: (in default configuration of rene_dcm(behavioral))
19
berndl_dcm.vhd:23:4:warning: component instance "ibufg_inst" is not bound
20
berndl_dcm.vhd:12:14:warning: (in default configuration of berndl_dcm(behavioral))
21
berndl_dcm.vhd:31:4:warning: component instance "bufg_inst" is not bound
22
berndl_dcm.vhd:12:14:warning: (in default configuration of berndl_dcm(behavioral))
23
berndl_dcm.vhd:37:4:warning: component instance "dcm_inst" is not bound
24
berndl_dcm.vhd:12:14:warning: (in default configuration of berndl_dcm(behavioral))
25
xil_wiz_dcm.vhd:45:4:warning: component instance "clkin_ibufg_inst" is not bound
26
xil_wiz_dcm.vhd:36:14:warning: (in default configuration of xil_wiz_dcm(behavioral))
27
xil_wiz_dcm.vhd:49:4:warning: component instance "clk2x_bufg_inst" is not bound
28
xil_wiz_dcm.vhd:36:14:warning: (in default configuration of xil_wiz_dcm(behavioral))
29
xil_wiz_dcm.vhd:53:4:warning: component instance "dcm_inst" is not bound
30
xil_wiz_dcm.vhd:36:14:warning: (in default configuration of xil_wiz_dcm(behavioral))

Er findet offenbar die IBUFs und die DCMs nicht.
1
ghdl -d --work=unisim
2
entity bufg
3
architecture bufg_v of bufg
4
entity dcm_clock_divide_by_2
5
architecture dcm_clock_divide_by_2_v of dcm_clock_divide_by_2
6
entity dcm_maximum_period_check
7
architecture dcm_maximum_period_check_v of dcm_maximum_period_check
8
entity dcm_clock_lost
9
architecture dcm_clock_lost_v of dcm_clock_lost
10
entity dcm
11
architecture dcm_v of dcm
12
entity dcm_sp_clock_divide_by_2
13
architecture dcm_sp_clock_divide_by_2_v of dcm_sp_clock_divide_by_2
14
entity dcm_sp_maximum_period_check
15
architecture dcm_sp_maximum_period_check_v of dcm_sp_maximum_period_check
16
entity dcm_sp_clock_lost
17
architecture dcm_sp_clock_lost_v of dcm_sp_clock_lost
18
entity dcm_sp
19
architecture dcm_sp_v of dcm_sp
20
entity ibufg
21
architecture ibufg_v of ibufg
22
package vcomponents
23
package vpkg
24
package body vpkg

Hab ich was übersehen?

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>
> Hab ich was übersehen?
>
> Duke

Berndl hat drei DCM-Varianten.

Du must die Testbench nehmen und eine DCM. Du hast gleich alle drei in 
das Projekt importiert. Ich hatte noch keine Zeit es mir genauer von 
Berndl anzuschauen. Will die Woche es mir auch mal reinziehen.

von berndl (Gast)


Lesenswert?

Hey danke fuer eure Bemuehungen...

@duke: Die Xilinx Libs wie oben (post vom 29.5.2009, der Eingangspost) 
compiliert (vorher die angemeckerten Zeilen in den Libs auskommentiert), 
dann den Design wie im post vom 24.10.2010 compiliert (in dem Post steht 
auch nochmal wie die Lib compiliert wurde). Tut bei mir syntaktisch 
fehlerfrei. Das ganze mit den Libs von ISE 10

@all: Wenn ich Renes DCM nehme, den Teiler/Multiplier auf 2/4 setze, 
dann kommt auch eine schoene 100MHz Clock raus.
Es muss also irgendwie an dem Clock2x Output des DCM liegen, da ist 
naemlich Funkstille... Weil ja auch aus dem Xilinx erzeugten Teil (mit 
dem Wizard) nix rauskommt... Unter Modelsim XE und PE auf Arbeit 
funktioniert alles...

Gruss,
- berndl

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Das wäre die nächste Frage, was ISIM und Modelsim.

Also Modelsim geht.

von berndl (Gast)


Lesenswert?

ISIM habe ich noch nie probiert. Ich nehme aber mal an, dass das dort 
funktioniert. Ist ja schliesslich die komplette Xilinx Toolchain. Die 
Bloesse, dass da was nicht tut, werden sie sich sicher nicht geben.

Ich denke halt, dass sich GHDL mit der Beschreibung des DCM 2x (also der 
'einfache' Taktverdoppler) da irgendwie verhaut. Aber ich habe leider 
noch keinen Plan, was da schief geht...

Ich muss mir nochmal das Datenblatt nehmen und gucken, was an deiner und 
meiner Implementierung des DCM unterschiedlich ist. Bei mir ist es ja 
der clock2x, bei dir der eigentlich kompliziertere Teil mit 
clock*mult/div...

Gruss,
- berndl

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Mit ISIM geht es:
1
vhpcomp *.vhd
2
3
fuse -o tb.exe dcm_test_tb
4
5
cmd /c "c:\Xilinx\12.2\ISE_DS\settings64.bat; tb.exe -gui"



GHDL meldet mir nach gefühlten fünf Minuten Laufzeit:
1
This application has requested the Runtime to terminate it in an unusual way.
2
Please contact the application's support team for more information.
3
[Error: 3]

:-(

Duke

von berndl (Gast)


Lesenswert?

Hi Duke,

was ich erwartet habe. Mit ISIM geht es. Und, danke, meine 
Implementierung verhaelt sich genauso wie die des Xilinx Wizards.

Also bezueglich GHDL: Irgendwas mit dem CLK2x output funktioniert da 
nicht richtig. Ob's nun GHDL oder Xilinx ist, weiss ich nicht...

PS: Wenn du bei Renes DCM mal den Divisor auf 2 laesst und den 
Multiplikator auf 4 setzt, dann wirst du eine wunderschoene 100MHz clock 
(=2x) am Ausgang sehen...

Also ich hab's mal an die ghdl mailing list geschrieben, mit Verweis auf 
den Thread hier. Evtl. schreibe ich das auch mal an Xilinx.

Danke fuer euer Interesse Jungs!

Gruss,
- berndl

von Duke Scarring (Gast)


Lesenswert?

Mit GHDL bekomme ich es immer noch nicht hin...
1
$ uname -srvmo
2
CYGWIN_NT-6.1-WOW64 1.7.5(0.225/5/3) 2010-04-12 19:07 i686 Cygwin
3
4
$ ghdl --version
5
GHDL 0.29 (20100109) [Sokcho edition]
6
 Compiled with GNAT Version: GPL 2009 (20090519)
7
 mcode code generator
8
Written by Tristan Gingold.
9
10
$ xst -?
11
Release 12.2 - xst M.63c (nt64)
12
Copyright (c) 1995-2010 Xilinx, Inc.  All rights reserved.
13
14
15
$ ghdl -a --work=unisim --ieee=synopsys -fexplicit --syn-binding unisims/unisim_VCOMP.vhd unisims/unisim_VPKG.vhd unisims/primitive/IBUFG.vhd unisims/primitive/BUFG.vhd unisims/primitive/DCM_SP.vhd unisims/primitive/DCM.vhd
16
17
$ ghdl -i  --syn-binding *.vhd 
18
19
$ ghdl -m --ieee=synopsys -fexplicit --syn-binding dcm_test_tb
20
..\ieee\timing_b.vhd:196:15:warning: procedure "vitalerror" is never referenced
21
..\ieee\timing_b.vhd:217:15:warning: procedure "vitalerror" is never referenced
22
..\ieee\prmtvs_b.vhd:1041:15:warning: function "toedge" is never referenced
23
24
$ ghdl -r dcm_test_tb --vcd=dcm_test_tb.vcd 
25
                                  
26
This application has requested the Runtime to terminate it in an unusual way.
27
Please contact the application's support team for more information.
28
[Error: 3]

Sehr merkwürdig.

Duke

von berndl (Gast)


Lesenswert?

Ok, also nochmal im Stenogramm:

ich habe hier ein Directory ~/Misc/vhdl

Darunter habe ich die Xilinx ISE 10 Library in einem Subdirectory 
./unisims liegen. Dann mache ich:

mkdir ~/Misc/vhdl/unisim
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit 
unisims/unisim_VCOMP.vhd
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit 
unisims/unisim_VPKG.vhd
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit 
unisims/unisim_VITAL.vhd
ghdl -a --work=unisim --workdir=unisim --ieee=synopsys -fexplicit 
unisims/unisim_SMODEL.vhd

Also alles nach ./unisim compiliert. Bei den 10 und 11 Libraries musste 
ich noch

(Achtung: in unisim_VITAL.vhd muessen die Zeilen
> -    variable Read_A_Write_B  : memory_collision_type := Read_A_Write_B;
> -    variable Write_A_Read_B  : memory_collision_type := Write_A_Read_B;
> -    variable Write_B_Write_A : memory_collision_type := Write_B_Write_A;
> -    variable Read_B_Write_A  : memory_collision_type := Read_B_Write_A;
> -    variable Write_B_Read_A  : memory_collision_type := Write_B_Read_A;
> +--    variable Write_A_Write_B : memory_collision_type := Write_A_Write_B;
> +--    variable Read_A_Write_B  : memory_collision_type := Read_A_Write_B;
> +--    variable Write_A_Read_B  : memory_collision_type := Write_A_Read_B;
> +--    variable Write_B_Write_A : memory_collision_type := Write_B_Write_A;
> +--    variable Read_B_Write_A  : memory_collision_type := Read_B_Write_A;
> +--    variable Write_B_Read_A  : memory_collision_type := Write_B_Read_A;

auskommentieren.

Mein Design liegt in ~/Misc/hugo

Darin mache ich ein

mkdir ~/Misc/vhdl/hugo/work

Dann gehe ich nach 'hugo' und lege los:

ghdl -i --workdir=work *.vhd
ghdl -m --workdir=work -P../unisim --ieee=synopsys -fexplicit 
<design_tb>
ghdl -r <design_tb> --vcd=<design_tb>.vcd
gtkwave <design_tb>.vcd &

(<design_tb> halt entsprechend der Testbench ersetzen...

Und dann arbeite ich damit. Also damit solltest du die Libs compilieren 
koennen und auch den Design.

Wo hakt's denn bei dir?

Gruss,
- berndl

von Duke Scarring (Gast)


Lesenswert?

berndl schrieb:
> Wo hakt's denn bei dir?

Das mit den verschiedenen Verzeichnissen/Laufwerken scheint unter cygwin 
nicht so recht zu funktionieren. Daher hab ich alles von unisims in 
einen lokalen Unterordner gesteckt.

Außerdem scheint Xilinx etwas aufgeräumt zu haben:
1
$ ls unisims
2
primitive/  secureip/  unisim_VCOMP.vhd  unisim_VPKG.vhd

Dann hat er wegen den bindings rumgemosert. Das habe ich mit 
--syn-binding in den Griff bekommen.

Jetzt scheitert es nur noch am Ausführen der Simulation (siehe Fehler 
oben).  Möglicherweise kommt er mit meinen 64 Bit nicht klar.

Duke

von berndl (Gast)


Lesenswert?

hmmm,

bei ISE 10 waren die Libs ja noch folgendermassen:
-> unisims
   unisim_SECUREIP.vhd
   unisim_SMODEL.vhd
   unisim_VCOMP.vhd
   unisim_virtex5_SMODEL.vhd
   unisim_VITAL.vhd
   unisim_VPKG.vhd

bei ISE 11 wars dann:
   unisim_VCOMP.vhd
   unisim_VPKG.vhd
   primitive/*
(mit den ganzen primitives drin...)

Ich hab' das ganze sowohl mit den 11ern als auch mit den 10ern probiert, 
und es hat, bis auf die bekannten Fehler in den Libs, problemlos 
compiliert.

Gruss,
- berndl

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich vermute es fehlt ein Eintrag in der Sensitve list in der DCM.
Hier ein Beispiel aus der DCM. In diesem Process müsste der Clock in die 
sensitive list.
 Die anderen Simulatoren vervollständigen die sensitve List automatisch 
und GHDL triggert nicht, weil es nicht durch den Code "informiert" ist, 
auf einen Flankenwechsel zu warten. Das wäre eine mögliche Erklärung.



  gen_reset : process
  begin
    if (rising_edge(clock)) then
      rst_reg(0) <= rst;
      rst_reg(1) <= rst_reg(0) and rst;
      rst_reg(2) <= rst_reg(1) and rst_reg(0) and rst;
    end if;
    wait on clock;
  end process gen_reset;

von Duke Scarring (Gast)


Lesenswert?

René D. schrieb:
> Ich vermute es fehlt ein Eintrag in der Sensitve list in der DCM

Nein, daran liegt es nicht. Die Prozesse im DCM-Modell haben alle ein 
"wait on ...". Damit entfällt die sensitivity-list.

Bei Ergänzung hagelt es sonst diesen Fehler:
1
unisims/primitive/DCM.vhd:68:5: wait statement not allowed in a sensitized process

Duke

von Duke Scarring (Gast)


Lesenswert?

berndl schrieb:
> problemlos compiliert.
Das ist auch nicht das Problem. Nur der Simulator rennt nicht so recht.

Duke

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>
> Bei Ergänzung hagelt es sonst diesen Fehler:
>
1
> unisims/primitive/DCM.vhd:68:5: wait statement not allowed in a
2
> sensitized process
3
>
>
> Duke

Das geht leider nicht. Der Prozess ist sonst beidseitig terminiert. GHDL 
kann es nicht und ob so etwas in VHDL erlaubt ist, wäre die Frage.

Ich habe das Problem auf die GHDL mailing list gesetzt. Mal sehen ob, 
jemand noch ein paar Tricks hat.

von berndl (Gast)


Lesenswert?

Hallo zusammen,

ich hab' mich jetzt auch mal auf die GHDL mailing list setzen lassen. 
Bin mal gespannt, was von der Seite kommt. Man koennte das ganze ja auch 
mal Xilinx zukommen lassen, es riecht doch schon etwas danach, dass die 
mit ihren Libraries ganz fies tricksen. Und da sie ja Bausteine 
verkaufen wollen, sollte eine gute Simulatorunterstuetzung auch in ihrem 
Interesse sein...

Gruss,
- berndl

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

berndl schrieb:
> Hallo zusammen,
>
> ich hab' mich jetzt auch mal auf die GHDL mailing list setzen lassen.
> Bin mal gespannt, was von der Seite kommt. Man koennte das ganze ja auch
> mal Xilinx zukommen lassen, es riecht doch schon etwas danach, dass die
> mit ihren Libraries ganz fies tricksen. Und da sie ja Bausteine
> verkaufen wollen, sollte eine gute Simulatorunterstuetzung auch in ihrem
> Interesse sein...
>
> Gruss,
> - berndl


Ich sehe deine Eintrag nicht in der GHDL Mailing list.

Ich hatte das Thema bereit drauf gesetzt und bis jetzt keine Rückmeldung 
erhalten.

von berndl (Gast)


Lesenswert?

ich war da noch nicht angemeldet, meine mail wurde also nur mal bei den 
Leuten zur Diskussion gestellt. Aber da du es ja 'offiziel' eingekippt 
hast ist's ja ok.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

in der Mailing List habe ich gelesen, dass ein illegaler VHDL Construct 
in der DCM beseitigt wurde. Ich hatte noch keine Zeit zu testen ob die 
DCM jetzt besser läut. Es wäre sehr interessant, da die DCM häufig 
benutzt wird.
Das wäre sehr interessant.
______________________________________________________________________

  Between ISE 11.2 and 13.2 the module
    DCM_CLKGEN
  failed to compile for unisim as well as simprim. This is finally fixed
  in ISE 13.3. The reason was an illegal VHDL construct (arithmetic
  with mixed types, which is not allowed in VHDL) which is apparently
  tolerated by most commercial VHDL simulators, but not accepted by 
ghdl.

- Simulations of DCM's

  This is known to be unstable at best. Between November 2009 and 
November
  2010 several postings on ghdl-discuss touched in this, look for the
  threads

    Xilinx Unisim DCM is not working.in GHDL
    DCM from Xilinx unisim

  My experience as of ISE 13.1 is that in general no output clock is
  generated and that models with DCM's fail to work, and as far as I
  know the issue was never resolved.

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
Noch kein Account? Hier anmelden.