Hi guys,
I have little example code:
A generic package:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package test_pkg is
generic(
N : positive := 20
);
type t_arr is array(natural range <>) of std_logic_vector(N-1 downto 0);
type t_rec is record
data : t_arr(0 to 3);
end record;
end test_pkg;
package body test_pkg is
end test_pkg;
A instance of the generic package:
library ieee;
package test10_pkg is new work.test_pkg
generic map (
N => 10
);
And a rtl-testbench:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.test10_pkg.all;
entity tb is
port(
test1_in : in t_rec;
test1_out1 : out t_rec;
test1_out2 : out t_arr(0 to 3);
test1_out3 : out std_logic_vector(9 downto 0);
test1_out4 : out std_logic;
test1_out5 : out std_logic_vector(1 downto 0)
);
end tb;
architecture rtl of tb is
begin
test1_out1 <= test1_in;
test1_out2 <= test1_in.data;
test1_out3 <= test1_in.data(0);
test1_out4 <= test1_in.data(1)(5);
test1_out5 <= test1_in.data(1)(3 downto 2);
end rtl;
And a screenshot of the RTL:
Can some explain why the outputs 4 and 5 are not connected in the RTL?
Best Regards
Oliver
链接已复制
sorry I cannot open the file in 18.2 - I do not have a 19.2 installation.
I have checked again in 18.2, my code example compiles fine. Just copy the three parts as they are, e.g. in a single file called tb.vhd, make it the top-level, set vhdl-2008 option and off you go.
Hi,
I have tested the example code above with modelsim and it works just fine. The version I used is this:
> ModelSim - INTEL FPGA STARTER EDITION 10.6d
> Revision: 2018.02
> Date: Feb 24 2018
Can you comment any further on the issue why this happens?
Regards
Oliver
I try to run the simulation, it shows that test1-out5 and test1_4 is having zero value. Which is the code that you had written is not recognized in modelsim as well.
If you can prove the code in IEEE std should be usable, I can help to file an enhancement for you. Will attached for you on this.
Hi,
In you screenshot, you clearly see that modelsim does recognize it because it changes from "red" (X) to "0". And second, your stimulus is wrong, please try again with the following:
force -freeze sim:/tb/test1_in.data(0) 10'hFFF 0
The bits (5) and (3 downto 2) are used, with h"111" you just stimulated bit (0),(4) and (8).
thank you
Hi,
Please try all of the arrays elements, as you did before!
force -freeze sim:/tb/test1_in.data(0) 10'hFFF 0
force -freeze sim:/tb/test1_in.data(1) 10'hFFF 0
force -freeze sim:/tb/test1_in.data(2) 10'hFFF 0
force -freeze sim:/tb/test1_in.data(3) 10'hFFF 0
thank you
