M
Marwan
Guest
Peace,
Consider: -
The following represents the kind of code I am dealing with.
Task A:
(Clocked) Iterative structure (value of iteration)
begin
c <= a*b;
d <= b*f;
g <= c/a;
k <= g+d;
end
(Ignore the sizes of the following variables and any fixed point
arithmetic considerations, they are straight forward to deal with and
besides the point for my question.)
Typically later calculations depend on previous ones and series of
calculations like these take place in iterative loops or nested
iterative loops (using counters, not for loops). I have numerous such
calculation sequences.
I only want to use 1 multiplier, 1 adder and 1 divider, so I cannot
have 2 or more multiplications, additions or divisions at the same
time. So 2 options I see are: -
1- If I use blocking assignments, I will fulfil the hardware usage
constraint, however, clock speed will suffer, as all the sequence of
calculations in Task A will need to take place in one clock cycle.
And where there are nested cycles of numerous calculations, the
clocking frequency would be greatly affected.
2- If I use nonblocking assignments then each calculation will take
place on a clock cycle, but all the calculations in the sequence of
Task A take place simultaneously, which can imply the use of several
multipliers, adders and dividers.
My question: -
Is it possible to use nonblocking assignments for Task A, yet still: -
* Use only 1 multiplier, 1 adder and 1 divider
* Have one calculation per clock cycle
If not, how would you suggest this situation is dealt with in a
minimum hardware situation? And what are the timing implications of
this?
Thank you for your time and consideration.
Consider: -
The following represents the kind of code I am dealing with.
Task A:
(Clocked) Iterative structure (value of iteration)
begin
c <= a*b;
d <= b*f;
g <= c/a;
k <= g+d;
end
(Ignore the sizes of the following variables and any fixed point
arithmetic considerations, they are straight forward to deal with and
besides the point for my question.)
Typically later calculations depend on previous ones and series of
calculations like these take place in iterative loops or nested
iterative loops (using counters, not for loops). I have numerous such
calculation sequences.
I only want to use 1 multiplier, 1 adder and 1 divider, so I cannot
have 2 or more multiplications, additions or divisions at the same
time. So 2 options I see are: -
1- If I use blocking assignments, I will fulfil the hardware usage
constraint, however, clock speed will suffer, as all the sequence of
calculations in Task A will need to take place in one clock cycle.
And where there are nested cycles of numerous calculations, the
clocking frequency would be greatly affected.
2- If I use nonblocking assignments then each calculation will take
place on a clock cycle, but all the calculations in the sequence of
Task A take place simultaneously, which can imply the use of several
multipliers, adders and dividers.
My question: -
Is it possible to use nonblocking assignments for Task A, yet still: -
* Use only 1 multiplier, 1 adder and 1 divider
* Have one calculation per clock cycle
If not, how would you suggest this situation is dealt with in a
minimum hardware situation? And what are the timing implications of
this?
Thank you for your time and consideration.