umarcor on keep-compiling
ci: use the built-in '--keep-co… (compare)
umarcor on cosim
cosim/dpi-ffi: add 'vhdpi_ghdl.… cosim/dpi-ffi: add VHDPI_Test (compare)
umarcor on cosim
WIP setenv (compare)
umarcor on main
cosim/dpi-ffi/ghdl-vffi/test: a… (compare)
umarcor on cosim
umarcor on main
WIP envvars (compare)
umarcor on cosim
WIP envvars (compare)
umarcor on master
umarcor on main
umarcor on cosim
umarcor on master
cosim/dpi-ffi: create subdir 'g… cosim/dpi-ffi: fix compilation … cosim/dpi-ffi/ghd-vffi: use VUn… and 2 more (compare)
umarcor on cosim
ci: add workflow CoSim cosim/dpi-ffi: add README (compare)
umarcor on cosim
ci: add workflow CoSim cosim/dpi-ffi: add README (compare)
umarcor on cosim
cosim/dpi-ffi: create subdir 'g… cosim/dpi-ffi: fix compilation … cosim/dpi-ffi/ghd-vffi: use VUn… and 2 more (compare)
umarcor on top-subtype
umarcor on master
2008: ad tb_top_generic_subtype cosim: add ref to aguinet/drago… (compare)
umarcor on top-subtype
2008: ad tb_top_generic_subtype (compare)
umarcor on top-subtype
2008: ad tb_top_generic_subtype (compare)
umarcor on top-subtype
2008: ad tb_top_generic_subtype (compare)
umarcor on style
I came across this oddity compiling my testbench today.
package gen_pkg is
generic ( W : natural );
constant CONST : natural := W;
end package gen_pkg;
entity name_clash is
end entity name_clash;
architecture clash of name_clash is
package pkg is new work.gen_pkg generic map( 8 );
use pkg.all;
begin
p: process
package pkg is new work.gen_pkg generic map( 9 );
use pkg.all;
begin
report to_string(CONST);
wait;
end process;
end architecture;
With this code, I get the error that the reference to CONST
is ambiguous as it can I see two packages where it is visible. The question is, I know I can get to pkg.CONST
local to the process, but how could I get the reference to CONST
in the package in the architecture?
( The double declaration in my code was an error, but it got me wondering )
p.
but I'm not sure if it is p.pkg.CONST
or just p.CONST
because you used all
.
PS C:\Temp> ghdl.exe -a --std=08 "C:\msys64\home\Patrick Lehmann\temp\trickyhead.vhdl"
C:\msys64\home\Patrick Lehmann\temp\trickyhead.vhdl:19:13:warning: declaration of "pkg" hides instantiation package "pkg" [-Whide]
package pkg is new work.gen_pkg generic map( 9 );
^
C:\msys64\home\Patrick Lehmann\temp\trickyhead.vhdl:22:22: no declaration for "const" (due to conflicts)
report to_string(CONST);
^
C:\msys64\mingw64\bin\ghdl.exe: compilation error
entity name_clash is
end entity name_clash;
architecture clash of name_clash is
constant CONST2 : bit := '0';
begin
p: process
constant CONST2 : bit := '0';
begin
report to_string(CONST2);
wait;
end process;
end architecture;
-Whide
warning, but no error.
Use
behave differently.
entity name_clash is
end entity name_clash;
architecture clash of name_clash is
begin
p: process
package pkg is new work.gen_pkg generic map( 9 );
use pkg.all;
begin
# report to_string(CONST);
wait;
end process;
process
begin
report to_string(CONST);
wait;
end process;
end architecture;
If the LRM states the above written text, then this code should work.but you have no visible package to get
CONST
in the 2nd process?
I did an inverse proof. When the LRM says both Use Clauses can not hide each other, they must be in the same scope.
This means, the Use Clause is applied to the parent layer (here architecture). If it's applied to the Process, it would be a new scope and thus can not collide.
So if it's in the architecture layer, it should be visible in the 2nd process, right?
But it's not.
CONST2
character
is defined over USASCII, so character'pos(character'right)
is 127.character
is defined over ISO8859-1 so character'pos(character'right)
is 255.Doesnt it also require a vendor to sign up to compliance to those standards?
For VHDL, there is no compliance enforced as for e.g. USB. So vendors can call their tools to support VHDL with whatever they implement. If we had a compliance rule, all tools would now support VHDL-2019 !