|
|
@ -44,7 +44,7 @@ begin
|
|
|
|
d1.write_reg <= "10001";
|
|
|
|
d1.write_reg <= "10001";
|
|
|
|
d1.dividend <= x"0000000010001000";
|
|
|
|
d1.dividend <= x"0000000010001000";
|
|
|
|
d1.divisor <= x"0000000000001111";
|
|
|
|
d1.divisor <= x"0000000000001111";
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
d1.is_signed <= '0';
|
|
|
|
d1.is_32bit <= '0';
|
|
|
|
d1.is_32bit <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_modulus <= '0';
|
|
|
|
d1.is_modulus <= '0';
|
|
|
@ -55,7 +55,7 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
|
|
|
|
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -79,7 +79,7 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
|
|
|
|
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -105,27 +105,15 @@ begin
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
|
|
|
|
|
|
|
|
if ra(63) = '1' then
|
|
|
|
|
|
|
|
d1.dividend <= std_ulogic_vector(- signed(ra));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
if rb(63) = '1' then
|
|
|
|
|
|
|
|
d1.divisor <= std_ulogic_vector(- signed(rb));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
end if;
|
|
|
|
d1.is_signed <= '1';
|
|
|
|
if ra(63) = rb(63) then
|
|
|
|
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.neg_result <= '1';
|
|
|
|
|
|
|
|
end if;
|
|
|
|
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
|
|
|
|
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -154,13 +142,13 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
d1.is_signed <= '0';
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
|
|
|
|
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -187,28 +175,16 @@ begin
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
|
|
|
|
|
|
|
|
if ra(63) = '1' then
|
|
|
|
|
|
|
|
d1.dividend <= std_ulogic_vector(- signed(ra));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
if rb(63) = '1' then
|
|
|
|
|
|
|
|
d1.divisor <= std_ulogic_vector(- signed(rb));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
end if;
|
|
|
|
d1.is_signed <= '1';
|
|
|
|
if ra(63) = rb(63) then
|
|
|
|
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.neg_result <= '1';
|
|
|
|
|
|
|
|
end if;
|
|
|
|
|
|
|
|
d1.is_extended <= '1';
|
|
|
|
d1.is_extended <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
|
|
|
|
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -216,15 +192,18 @@ begin
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
assert d2.valid = '1';
|
|
|
|
assert d2.valid = '1';
|
|
|
|
|
|
|
|
|
|
|
|
if unsigned(d1.divisor) > unsigned(d1.dividend) then
|
|
|
|
if rb /= x"0000000000000000" then
|
|
|
|
d128 := ra & x"0000000000000000";
|
|
|
|
d128 := ra & x"0000000000000000";
|
|
|
|
q128 := std_ulogic_vector(signed(d128) / signed(rb));
|
|
|
|
q128 := std_ulogic_vector(signed(d128) / signed(rb));
|
|
|
|
|
|
|
|
if q128(127 downto 63) = x"0000000000000000" & '0' or
|
|
|
|
|
|
|
|
q128(127 downto 63) = x"ffffffffffffffff" & '1' then
|
|
|
|
behave_rt := q128(63 downto 0);
|
|
|
|
behave_rt := q128(63 downto 0);
|
|
|
|
assert to_hstring(behave_rt) = to_hstring(d2.write_reg_data)
|
|
|
|
assert to_hstring(behave_rt) = to_hstring(d2.write_reg_data)
|
|
|
|
report "bad divde expected " & to_hstring(behave_rt) & " got " & to_hstring(d2.write_reg_data) & " for ra = " & to_hstring(ra) & " rb = " & to_hstring(rb);
|
|
|
|
report "bad divde expected " & to_hstring(behave_rt) & " got " & to_hstring(d2.write_reg_data) & " for ra = " & to_hstring(ra) & " rb = " & to_hstring(rb);
|
|
|
|
assert ppc_cmpi('1', behave_rt, x"0000") & x"0000000" = d2.write_cr_data
|
|
|
|
assert ppc_cmpi('1', behave_rt, x"0000") & x"0000000" = d2.write_cr_data
|
|
|
|
report "bad CR setting for divde";
|
|
|
|
report "bad CR setting for divde";
|
|
|
|
end if;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
end if;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
@ -239,14 +218,14 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
d1.is_signed <= '0';
|
|
|
|
d1.is_extended <= '1';
|
|
|
|
d1.is_extended <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
|
|
|
|
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -254,7 +233,7 @@ begin
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
assert d2.valid = '1';
|
|
|
|
assert d2.valid = '1';
|
|
|
|
|
|
|
|
|
|
|
|
if unsigned(d1.divisor) > unsigned(d1.dividend) then
|
|
|
|
if unsigned(rb) > unsigned(ra) then
|
|
|
|
d128 := ra & x"0000000000000000";
|
|
|
|
d128 := ra & x"0000000000000000";
|
|
|
|
q128 := std_ulogic_vector(unsigned(d128) / unsigned(rb));
|
|
|
|
q128 := std_ulogic_vector(unsigned(d128) / unsigned(rb));
|
|
|
|
behave_rt := q128(63 downto 0);
|
|
|
|
behave_rt := q128(63 downto 0);
|
|
|
@ -275,21 +254,9 @@ begin
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
|
|
|
|
|
|
|
|
if ra(63) = '1' then
|
|
|
|
|
|
|
|
d1.dividend <= std_ulogic_vector(- signed(ra));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
if rb(63) = '1' then
|
|
|
|
|
|
|
|
d1.divisor <= std_ulogic_vector(- signed(rb));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
end if;
|
|
|
|
d1.is_signed <= '1';
|
|
|
|
if ra(63) = rb(63) then
|
|
|
|
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.neg_result <= '1';
|
|
|
|
|
|
|
|
end if;
|
|
|
|
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
@ -297,7 +264,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -326,7 +293,7 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
d1.is_signed <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
@ -334,7 +301,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -361,21 +328,9 @@ begin
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 32)) & x"00000000";
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 32)) & x"00000000";
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
|
|
|
|
|
|
|
|
if ra(63) = '1' then
|
|
|
|
|
|
|
|
d1.dividend <= std_ulogic_vector(- signed(ra));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
if rb(63) = '1' then
|
|
|
|
|
|
|
|
d1.divisor <= std_ulogic_vector(- signed(rb));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
end if;
|
|
|
|
d1.is_signed <= '1';
|
|
|
|
if ra(63) = rb(63) then
|
|
|
|
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.neg_result <= '1';
|
|
|
|
|
|
|
|
end if;
|
|
|
|
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
@ -383,7 +338,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -391,13 +346,16 @@ begin
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
assert d2.valid = '1';
|
|
|
|
assert d2.valid = '1';
|
|
|
|
|
|
|
|
|
|
|
|
if unsigned(d1.divisor(31 downto 0)) > unsigned(d1.dividend(63 downto 32)) then
|
|
|
|
if rb /= x"0000000000000000" then
|
|
|
|
behave_rt := std_ulogic_vector(signed(ra) / signed(rb));
|
|
|
|
behave_rt := std_ulogic_vector(signed(ra) / signed(rb));
|
|
|
|
|
|
|
|
if behave_rt(63 downto 31) = x"00000000" & '0' or
|
|
|
|
|
|
|
|
behave_rt(63 downto 31) = x"ffffffff" & '1' then
|
|
|
|
assert behave_rt(31 downto 0) = d2.write_reg_data(31 downto 0)
|
|
|
|
assert behave_rt(31 downto 0) = d2.write_reg_data(31 downto 0)
|
|
|
|
report "bad divwe expected " & to_hstring(behave_rt) & " got " & to_hstring(d2.write_reg_data) & " for ra = " & to_hstring(ra) & " rb = " & to_hstring(rb);
|
|
|
|
report "bad divwe expected " & to_hstring(behave_rt) & " got " & to_hstring(d2.write_reg_data) & " for ra = " & to_hstring(ra) & " rb = " & to_hstring(rb);
|
|
|
|
assert ppc_cmpi('0', behave_rt, x"0000") & x"0000000" = d2.write_cr_data
|
|
|
|
assert ppc_cmpi('0', behave_rt, x"0000") & x"0000000" = d2.write_cr_data
|
|
|
|
report "bad CR setting for divwe";
|
|
|
|
report "bad CR setting for divwe";
|
|
|
|
end if;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
end if;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
@ -412,7 +370,7 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
d1.is_signed <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
|
d1.valid <= '1';
|
|
|
@ -420,7 +378,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -428,7 +386,7 @@ begin
|
|
|
|
end loop;
|
|
|
|
end loop;
|
|
|
|
assert d2.valid = '1';
|
|
|
|
assert d2.valid = '1';
|
|
|
|
|
|
|
|
|
|
|
|
if unsigned(d1.divisor(31 downto 0)) > unsigned(d1.dividend(63 downto 32)) then
|
|
|
|
if unsigned(rb(31 downto 0)) > unsigned(ra(63 downto 32)) then
|
|
|
|
behave_rt := std_ulogic_vector(unsigned(ra) / unsigned(rb));
|
|
|
|
behave_rt := std_ulogic_vector(unsigned(ra) / unsigned(rb));
|
|
|
|
assert behave_rt(31 downto 0) = d2.write_reg_data(31 downto 0)
|
|
|
|
assert behave_rt(31 downto 0) = d2.write_reg_data(31 downto 0)
|
|
|
|
report "bad divweu expected " & to_hstring(behave_rt) & " got " & to_hstring(d2.write_reg_data) & " for ra = " & to_hstring(ra) & " rb = " & to_hstring(rb);
|
|
|
|
report "bad divweu expected " & to_hstring(behave_rt) & " got " & to_hstring(d2.write_reg_data) & " for ra = " & to_hstring(ra) & " rb = " & to_hstring(rb);
|
|
|
@ -447,17 +405,9 @@ begin
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
|
|
|
|
|
|
|
|
if ra(63) = '1' then
|
|
|
|
|
|
|
|
d1.dividend <= std_ulogic_vector(- signed(ra));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
if rb(63) = '1' then
|
|
|
|
|
|
|
|
d1.divisor <= std_ulogic_vector(- signed(rb));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
end if;
|
|
|
|
d1.is_signed <= '1';
|
|
|
|
d1.neg_result <= ra(63);
|
|
|
|
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '0';
|
|
|
|
d1.is_32bit <= '0';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
@ -466,7 +416,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -495,7 +445,7 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
d1.is_signed <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '0';
|
|
|
|
d1.is_32bit <= '0';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
@ -504,7 +454,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -531,17 +481,9 @@ begin
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
ra := std_ulogic_vector(resize(signed(pseudorand(dlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
rb := std_ulogic_vector(resize(signed(pseudorand(vlength * 8)), 64));
|
|
|
|
|
|
|
|
|
|
|
|
if ra(63) = '1' then
|
|
|
|
|
|
|
|
d1.dividend <= std_ulogic_vector(- signed(ra));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
end if;
|
|
|
|
|
|
|
|
if rb(63) = '1' then
|
|
|
|
|
|
|
|
d1.divisor <= std_ulogic_vector(- signed(rb));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
end if;
|
|
|
|
d1.is_signed <= '1';
|
|
|
|
d1.neg_result <= ra(63);
|
|
|
|
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
@ -550,7 +492,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
@ -579,7 +521,7 @@ begin
|
|
|
|
|
|
|
|
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.dividend <= ra;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.divisor <= rb;
|
|
|
|
d1.neg_result <= '0';
|
|
|
|
d1.is_signed <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_extended <= '0';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_32bit <= '1';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
|
d1.is_modulus <= '1';
|
|
|
@ -588,7 +530,7 @@ begin
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
|
|
|
|
|
|
|
|
d1.valid <= '0';
|
|
|
|
d1.valid <= '0';
|
|
|
|
for j in 0 to 64 loop
|
|
|
|
for j in 0 to 65 loop
|
|
|
|
wait for clk_period;
|
|
|
|
wait for clk_period;
|
|
|
|
if d2.valid = '1' then
|
|
|
|
if d2.valid = '1' then
|
|
|
|
exit;
|
|
|
|
exit;
|
|
|
|