T
THurkmans
Guest
Hello,
I've been working on getting my Post-synthesis simulation to work.
What I do is place the newly synthesized block into my design by
removing the simulation version of that block. The simulation is
working. This is the only block I synthesized. I'm using Synplify Pro.
What I have is an entity which I want to synthesize:
entity ders3x3
port
(
clk : in std_logic;
enable : in std_logic;
completed : out std_logic;
d_image0_enable : in std_logic;
d_image0_write_enable : in std_logic;
d_image0_address : in std_logic_vector(17 downto 0);
d_image0_inoutput : in std_logic_vector(7 downto 0);
q_image0_enable : out std_logic;
q_image0_write_enable : out std_logic;
q_image0_address : out std_logic_vector(17 downto 0);
q_image0_inoutput : out std_logic_vector(7 downto 0)
);
end entity;
architecture behavioral of ders3x3 is
type reg_type is record
counter : natural range 0 to 4;
end record;
signal r, rin : reg_type;
r_image0, r_image0_in : .. -- like image 0
begin
-- combinational process
comb : process(r, enable)
variable v : reg_type;
variable v_image0 : .. -- like image_0
begin
-- default assignment
v := r;
v_image0.image0 := r_image0;
v_image0.enable := d_image0_enable;
v_image0.write_enable := d_image0_write_enable;
v_image0.address := d_image0_address;
v_image0.inoutput := d_image0_inoutput;
--... modify values code through v_image 0...
q_image0_enable <= v_image0.enable;
q_image0_write_enable <= v_image0.write_enable;
q_image0_address <= v_image0.address;
q_image0_inoutput <= v_image0.inoutput;
r_image0_in <= v_image0;
rin <= v;
end
end process;
-- sequential process
regs : process(clk)
begin
if rising_edge(clk) then
r <= rin;
r_image0 <= r_image0_in.image0;
end if;
end process;
end behavioral;
d_image0 is my input bus, q_image0 is my output bus. D_image0 and
Q_image0 are connected to the same bus in the design above, because
they are functioning as an input/output bus to my image0 sram.
Now, in simulation this works, but after synthesizing, the block runs
into an iteration limit (delta > 5000000) the moment it starts doing
things with the image0 memory. Stepping through the code does not lead
me to any of my own code (only synthesized components in which it
keeps looping).
It sounds like I have an infinite loop somewhere, but I cannot find
out where.
- What am I doing wrong?
- Is this an infinite loop and how can I fix that?
- What other things can cause an iteration limit?
If you need more info on this matter, please say so.
I've been working on getting my Post-synthesis simulation to work.
What I do is place the newly synthesized block into my design by
removing the simulation version of that block. The simulation is
working. This is the only block I synthesized. I'm using Synplify Pro.
What I have is an entity which I want to synthesize:
entity ders3x3
port
(
clk : in std_logic;
enable : in std_logic;
completed : out std_logic;
d_image0_enable : in std_logic;
d_image0_write_enable : in std_logic;
d_image0_address : in std_logic_vector(17 downto 0);
d_image0_inoutput : in std_logic_vector(7 downto 0);
q_image0_enable : out std_logic;
q_image0_write_enable : out std_logic;
q_image0_address : out std_logic_vector(17 downto 0);
q_image0_inoutput : out std_logic_vector(7 downto 0)
);
end entity;
architecture behavioral of ders3x3 is
type reg_type is record
counter : natural range 0 to 4;
end record;
signal r, rin : reg_type;
r_image0, r_image0_in : .. -- like image 0
begin
-- combinational process
comb : process(r, enable)
variable v : reg_type;
variable v_image0 : .. -- like image_0
begin
-- default assignment
v := r;
v_image0.image0 := r_image0;
v_image0.enable := d_image0_enable;
v_image0.write_enable := d_image0_write_enable;
v_image0.address := d_image0_address;
v_image0.inoutput := d_image0_inoutput;
--... modify values code through v_image 0...
q_image0_enable <= v_image0.enable;
q_image0_write_enable <= v_image0.write_enable;
q_image0_address <= v_image0.address;
q_image0_inoutput <= v_image0.inoutput;
r_image0_in <= v_image0;
rin <= v;
end
end process;
-- sequential process
regs : process(clk)
begin
if rising_edge(clk) then
r <= rin;
r_image0 <= r_image0_in.image0;
end if;
end process;
end behavioral;
d_image0 is my input bus, q_image0 is my output bus. D_image0 and
Q_image0 are connected to the same bus in the design above, because
they are functioning as an input/output bus to my image0 sram.
Now, in simulation this works, but after synthesizing, the block runs
into an iteration limit (delta > 5000000) the moment it starts doing
things with the image0 memory. Stepping through the code does not lead
me to any of my own code (only synthesized components in which it
keeps looping).
It sounds like I have an infinite loop somewhere, but I cannot find
out where.
- What am I doing wrong?
- Is this an infinite loop and how can I fix that?
- What other things can cause an iteration limit?
If you need more info on this matter, please say so.