F
Fred Bartoli
Guest
Hello,
I've almost finished my first design. To make it enter in the small
resources of my CPLD I had to adapt my design to use structures that
minimize the product terms and routing usage, i.e. use wherever possible the
clock enable capabilities of the MCs and "tweak" the usual "case... end
case" description of fsm to use it.
Now I've something that simulate well and gives me the expected results
To obtain this I had to hard look into the fitter report netlist to
understand the reasons why it didn't fit.
.... and I noticed something rather bizarre : a DFF that has it's async reset
permanently set.
Here's the vhdl contruct :
----------------------------------------
if (Gating_State = Hold_St) or (Gating_State = Count_St) or (Gating_State
= WaitTrig_St) then
HoldAll := '1';
elsif rising_edge(CpldExecPulse) then
if (Opcode = op_PresetReady) or (Opcode = op_MeasRead) or (Opcode =
op_LoadPresetChannel) or (Opcode = op_IncPresetChannel) then
if (Opcode = op_PresetReady) then
HoldAll := '0';
else
HoldAll := '1';
end if;
end if;
end if;
----------------------------------------
which is, I believe, a valid clock enable definition.
And here's the fitter netlist excerpt :
----------------------------------------
!HoldAll.D = (Opcode_5.Q & Opcode_7.Q & Opcode_4.Q & !Opcode_6.Q);
XXL_476 = ((Opcode_7.Q & !Opcode_4.Q & !Opcode_6.Q) # (!Opcode_7.Q &
!Opcode_5.Q & Opcode_4.Q & !Opcode_6.Q));
!XXL_499 = (!Gating_State_1.Q & !Gating_State_0.Q);
HoldAll.C = CpldExecPulse.Q;
HoldAll.AR = 1; <=============??????????????
HoldAll.AP = XXL_499;
HoldAll.CE = ((!Opcode_6.Q & Opcode_5.Q & Opcode_7.Q) # XXL_476);
----------------------------------------
I can't understand how this could have a chance to work.
Could it be a fitter bug ?
Is my vhdl code OK ? I don't see anything wrong.
Any advice is welcomed.
Thanks,
Fred.
I've almost finished my first design. To make it enter in the small
resources of my CPLD I had to adapt my design to use structures that
minimize the product terms and routing usage, i.e. use wherever possible the
clock enable capabilities of the MCs and "tweak" the usual "case... end
case" description of fsm to use it.
Now I've something that simulate well and gives me the expected results
To obtain this I had to hard look into the fitter report netlist to
understand the reasons why it didn't fit.
.... and I noticed something rather bizarre : a DFF that has it's async reset
permanently set.
Here's the vhdl contruct :
----------------------------------------
if (Gating_State = Hold_St) or (Gating_State = Count_St) or (Gating_State
= WaitTrig_St) then
HoldAll := '1';
elsif rising_edge(CpldExecPulse) then
if (Opcode = op_PresetReady) or (Opcode = op_MeasRead) or (Opcode =
op_LoadPresetChannel) or (Opcode = op_IncPresetChannel) then
if (Opcode = op_PresetReady) then
HoldAll := '0';
else
HoldAll := '1';
end if;
end if;
end if;
----------------------------------------
which is, I believe, a valid clock enable definition.
And here's the fitter netlist excerpt :
----------------------------------------
!HoldAll.D = (Opcode_5.Q & Opcode_7.Q & Opcode_4.Q & !Opcode_6.Q);
XXL_476 = ((Opcode_7.Q & !Opcode_4.Q & !Opcode_6.Q) # (!Opcode_7.Q &
!Opcode_5.Q & Opcode_4.Q & !Opcode_6.Q));
!XXL_499 = (!Gating_State_1.Q & !Gating_State_0.Q);
HoldAll.C = CpldExecPulse.Q;
HoldAll.AR = 1; <=============??????????????
HoldAll.AP = XXL_499;
HoldAll.CE = ((!Opcode_6.Q & Opcode_5.Q & Opcode_7.Q) # XXL_476);
----------------------------------------
I can't understand how this could have a chance to work.
Could it be a fitter bug ?
Is my vhdl code OK ? I don't see anything wrong.
Any advice is welcomed.
Thanks,
Fred.