J
Jaco Naude
Guest
Hi there,
I hope someone on this group can explain the reason for what I'm
seeing, for me it does not make any sense...
I have an output port that is defined like this, (other ports and
signals left out for simplicity sake):
entity darv_leaf_node is
Port( s_response : out response_bus );
where response bus is a record defined like this:
type response_control is
record
valid : std_logic;
status : status_type;
end record;
type response_bus is
record
data : std_logic_vector(31 downto 0);
control : response_control;
end record;
In the architecture of darv_leaf node I declare an internal/
intermediate signal as follows:
signal s_response_internal : response_bus;
and I have a process assigning different values to
s_response_internal. All I want to do is assign the output port,
s_response to the signal. This worked fine until I made some changes
to the design which are as far as I can see totally unrelated to this
output port. The process is shown below:
process (clk, rst_n)
begin
if (clk'event and clk = '1') then
if (rst_n = '0') then
s_response.data <= (others => '0');
s_response.control.valid <= '0';
s_response.control.status <= startup;
else
s_response <= s_response_internal;
end if;
end if;
end process;
The s_response simulation shows that only the .control.status bits
change correctly, the other bits (.data and .control.valid) are
staying X's for the complete duration of the simulation. Thus, it is
not even initialized properly during reset. s_response_internal's bits
are correct in simulation.
I'm doing a ModelSim PE simulation and there are lots of other places
where the same bus types work fine, thus the package inclusion is not
the problem.
Any ideas would be much appreciated, that's if I haven't gone grazy
before getting any responses
.
Thanks,
Jaco
I hope someone on this group can explain the reason for what I'm
seeing, for me it does not make any sense...
I have an output port that is defined like this, (other ports and
signals left out for simplicity sake):
entity darv_leaf_node is
Port( s_response : out response_bus );
where response bus is a record defined like this:
type response_control is
record
valid : std_logic;
status : status_type;
end record;
type response_bus is
record
data : std_logic_vector(31 downto 0);
control : response_control;
end record;
In the architecture of darv_leaf node I declare an internal/
intermediate signal as follows:
signal s_response_internal : response_bus;
and I have a process assigning different values to
s_response_internal. All I want to do is assign the output port,
s_response to the signal. This worked fine until I made some changes
to the design which are as far as I can see totally unrelated to this
output port. The process is shown below:
process (clk, rst_n)
begin
if (clk'event and clk = '1') then
if (rst_n = '0') then
s_response.data <= (others => '0');
s_response.control.valid <= '0';
s_response.control.status <= startup;
else
s_response <= s_response_internal;
end if;
end if;
end process;
The s_response simulation shows that only the .control.status bits
change correctly, the other bits (.data and .control.valid) are
staying X's for the complete duration of the simulation. Thus, it is
not even initialized properly during reset. s_response_internal's bits
are correct in simulation.
I'm doing a ModelSim PE simulation and there are lots of other places
where the same bus types work fine, thus the package inclusion is not
the problem.
Any ideas would be much appreciated, that's if I haven't gone grazy
before getting any responses
Thanks,
Jaco