D
Don Otknow
Guest
Hello,
I just had an odd error with XST. I have a record and code to
initialize it in a process:
architecture behavioral of vectors is
type six_vectors is record
vect_a : std_logic_vector(15 DOWNTO 0);
vect_b : std_logic_vector(15 DOWNTO 0);
vect_c : std_logic_vector(15 DOWNTO 0);
vect_d : std_logic_vector(15 DOWNTO 0);
vect_e : std_logic_vector(15 DOWNTO 0);
vect_f : std_logic_vector(15 DOWNTO 0);
end record;
signal six_vect_inst : six_vectors;
begin
some_process : process(rst,clk)
begin
if rst = '1' then
six_vect_inst <= (others => (others => '0'));
elsif clk'event and clk='1' then
do_some_stuff
end if;
end process;
end behavioral;
This doesn't work. XST gives me:
FATAL_ERROR:Simulator:CompilerAssert.h:40:1.64.18.3.18.1 - Internal
Compiler Error in file ../src/VhdlExpr.cpp at line 2582 Process will
terminate.
I read in a related error report on a Xilinx site that user-defined
types would cause ISE 12.1 to throw these types of errors. So I
changed the code to:
some_process : process(rst,clk)
begin
if rst = '1' then
six_vect_inst.vect_a <= (others => '0');
six_vect_inst.vect_b <= (others => '0');
six_vect_inst.vect_c <= (others => '0');
six_vect_inst.vect_d <= (others => '0');
six_vect_inst.vect_e <= (others => '0');
six_vect_inst.vect_f <= (others => '0');
elsif clk'event and clk='1' then
do_some_stuff
end if;
end process;
and it worked fine. Does anyone have any insight into why these cases
are handled so differently?
I just had an odd error with XST. I have a record and code to
initialize it in a process:
architecture behavioral of vectors is
type six_vectors is record
vect_a : std_logic_vector(15 DOWNTO 0);
vect_b : std_logic_vector(15 DOWNTO 0);
vect_c : std_logic_vector(15 DOWNTO 0);
vect_d : std_logic_vector(15 DOWNTO 0);
vect_e : std_logic_vector(15 DOWNTO 0);
vect_f : std_logic_vector(15 DOWNTO 0);
end record;
signal six_vect_inst : six_vectors;
begin
some_process : process(rst,clk)
begin
if rst = '1' then
six_vect_inst <= (others => (others => '0'));
elsif clk'event and clk='1' then
do_some_stuff
end if;
end process;
end behavioral;
This doesn't work. XST gives me:
FATAL_ERROR:Simulator:CompilerAssert.h:40:1.64.18.3.18.1 - Internal
Compiler Error in file ../src/VhdlExpr.cpp at line 2582 Process will
terminate.
I read in a related error report on a Xilinx site that user-defined
types would cause ISE 12.1 to throw these types of errors. So I
changed the code to:
some_process : process(rst,clk)
begin
if rst = '1' then
six_vect_inst.vect_a <= (others => '0');
six_vect_inst.vect_b <= (others => '0');
six_vect_inst.vect_c <= (others => '0');
six_vect_inst.vect_d <= (others => '0');
six_vect_inst.vect_e <= (others => '0');
six_vect_inst.vect_f <= (others => '0');
elsif clk'event and clk='1' then
do_some_stuff
end if;
end process;
and it worked fine. Does anyone have any insight into why these cases
are handled so differently?