Disabled generate gives compile error in Modelsim

[This is a repost. Posted this to comp.lang.vhdl a few days ago, but no replies. So maybe nobody knows the answer, it was a malformed question or there are no readers in that group. So a repost (with a little clarification, I hope) with the comp.arch.fpga added at least resolves the last option. ;-)]

It has been a while since I used VHDL so I am a little rusty. Did not much use the generate statement in the past either. And now I have the problem that I have (been given) a VHDL model that has a conditional generate in it. And this does not work as I expected. In the model, the purpose of the conditional is that there is a clock source that cannot be simulated, so an alternative is simulated. I have reproduced the problem in the minimal example below.

If I declare 'sigio' as 'inout', as below and as I got the model, then when I simulate it, the signals in the simulation remain 'U'. So somehow the 'gentest' model drives the 'sigio' signal although the generic 'this_is_a_simulation' has been set to true.

If I declare 'sigio' as 'in' (change the comment line in the port), I get a compilation error in Modelsim on driving the type 'in' 'sigio' signal. When I then just comment out the 'rtlblk' generate, the model simulates as expected.

Can this be made to work as expected (simulation/clocksource model switch without changing the code)? Unfortunately I cannot get information from the original creator of this construct and I don't know if it ever worked.

-------- gentest.vhd ------------ library ieee; use ieee.std_logic_1164.all;

entity gentest is generic( this_is_a_simulation : boolean := true ); port(

-- sigio : in std_logic; -- Compile error sigio : inout std_logic; -- Original line sigout : out std_logic ); end entity gentest;

architecture behav of gentest is begin

-- If I comment out this generate, the compile error with sigio as -- 'in' disappears. -- But should this section not be ignored if 'this_is_a_simulation' -- is set to false? rtlblk : if this_is_a_simulation = false generate sigio <= '1'; sigout <= '1'; end generate;

simblk : if this_is_a_simulation = true generate sigout <= sigio; end generate;

end architecture behav;

-------- tb_gentest.vhd ------------ library ieee; use ieee.std_logic_1164.all;

entity tb_gentest is end entity tb_gentest;

architecture behav of tb_gentest is signal clk : std_logic; signal sigout : std_logic; begin

gentest_inst : entity work.gentest generic map( this_is_a_simulation => true ) port map( sigio => clk, sigout => sigout );

process begin clk <= '0'; wait for 10ns; clk <= '1'; wait for 10ns; end process;

end architecture behav;

Reply to
Stef
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.