Ik heb, om wat uit te proberen, een package gemaakt met daarin een 'en' component. Deze package laad ik in m'n vhd file en vervolgens port map ik het component vier keer. Tot slot laat ik er een korte testbench op los om te zien of het allemaal werkt. Er zit dus nergens een clk of reset in. Want:
uit my_package.vhd:
dan en_module.vhd:
en tot slot tb_en_module.vhd:
Compileren en simuleren gaat vloeiend, totdat ik de wave.list wil openen (list.do bevat btw add list /* ). Deze geeft een division by zero. Open ik hem in kladblok dan zie ik het volgende:
Afgezien van dat f gek doet (?) is de tijd erg interessant; alles wordt in 0 ps uitgevoerd! Err... ik heb toch echt wait 10 ns; in de testbench staan. Wat doe ik fout? In eerdere testbenches die ik gemaakt heb werkte het wel
-edit-
Het is vreemd, maar als ik de testbench langer maak, dan werkt het wel
Erg raar gedrag. In ieder geval doet het absoluut niet wat ik verwacht. Ondanks het feit dat er geen clk is, lijkt het me wel synthetiseerbaar. Dat zou logisch zijn, en di tools weet er mee te werken, en galaxy (warp) kan het in een device fitten (22v10). En toch gedraagt f zich erg vreemd.
Ik heb de bestanden even geupload, ze zijn hier te vinden:
mypackage.vhd
en_module.vhd
tb_en_module.vhd
(list.do -> add list /* )
Wat doe ik nu fout?
modje, kan titel gewijzigd worden? dank
uit my_package.vhd:
vhdl:
1
2
3
4
5
6
7
8
9
| entity en is port( a,b : in std_logic; f : out std_logic); end en; architecture arch_en of en is begin f <= '1' when (a = b) else '0'; end arch_en; |
dan en_module.vhd:
vhdl:
1
2
3
4
5
6
7
8
| architecture arch_en_module of en_module is begin -- vier and poorten mappen via positional association u3: en port map (a(3), b(3), f(3)); u2: en port map (a(2), b(2), f(2)); u1: en port map (a(1), b(1), f(1)); u0: en port map (a(0), b(0), f(0)); end arch_en_module; |
en tot slot tb_en_module.vhd:
vhdl:
1
2
3
4
5
6
7
8
9
| tb_input: process begin a <= "0101"; b <= "0100"; wait for 10 ns; a <= "1001"; b <= "0001"; wait; end process; |
Compileren en simuleren gaat vloeiend, totdat ik de wave.list wil openen (list.do bevat btw add list /* ). Deze geeft een division by zero. Open ik hem in kladblok dan zie ik het volgende:
code:
1
2
3
4
5
| ps delta a b f
=================================
0 +0 UUUU UUUU UUUU
0 +1 0101 0100 1111
0 +2 0101 0100 1110 |
Afgezien van dat f gek doet (?) is de tijd erg interessant; alles wordt in 0 ps uitgevoerd! Err... ik heb toch echt wait 10 ns; in de testbench staan. Wat doe ik fout? In eerdere testbenches die ik gemaakt heb werkte het wel
-edit-
Het is vreemd, maar als ik de testbench langer maak, dan werkt het wel
Ik heb de bestanden even geupload, ze zijn hier te vinden:
mypackage.vhd
en_module.vhd
tb_en_module.vhd
(list.do -> add list /* )
Wat doe ik nu fout?
modje, kan titel gewijzigd worden? dank
[ Voor 31% gewijzigd door wacco op 20-01-2004 19:15 . Reden: code van package iets uitgebreid voor de duidelijkheid & vervolgje... ]