shaiko
Advanced Member level 5
- Joined
- Aug 20, 2011
- Messages
- 2,644
- Helped
- 303
- Reputation
- 608
- Reaction score
- 297
- Trophy points
- 1,363
- Activity points
- 18,302
I use the following VHDL function for division:
The problem is that when the "numerator" and "denumerator" are of different length, the division fails.
I want the denumerator to adjust its length "automatically" to the length of the numerator. for example:
If the numerator is "10000010" and the denumerator is "110" - I want the denumerator to be "padded" with zeroes to fit itself to the bit width of the numerator and become: "00000110"
Please help...
Code:
function restoring_divide ( numerator : unsigned ; denominator : unsigned ) return unsigned is
variable temp_numerator : unsigned ( numerator ' range ) := numerator ;
variable temp_denominator : unsigned ( denominator ' range ) := denominator ;
variable temp_remainder : unsigned ( denominator ' length downto 0 ) := ( others => '0' ) ;
begin
for index in 0 to denominator ' length - 1
loop
temp_remainder ( denominator ' length - 1 downto 1 ) := temp_remainder ( denominator ' length - 2 downto 0 ) ;
temp_remainder ( 0 ) := temp_numerator ( numerator ' length - 1 ) ;
temp_numerator ( numerator ' length - 1 downto 1 ) := temp_numerator ( numerator ' length - 2 downto 0 ) ;
temp_remainder := temp_remainder - temp_denominator ;
if ( temp_remainder ( denominator ' length ) = '1' ) then
temp_numerator ( 0 ) := '0' ;
temp_remainder := temp_remainder + temp_denominator ;
else
temp_numerator ( 0 ) := '1' ;
end if ;
end loop ;
return temp_numerator ;
end function restoring_divide ;
The problem is that when the "numerator" and "denumerator" are of different length, the division fails.
I want the denumerator to adjust its length "automatically" to the length of the numerator. for example:
If the numerator is "10000010" and the denumerator is "110" - I want the denumerator to be "padded" with zeroes to fit itself to the bit width of the numerator and become: "00000110"
Please help...