Я хочу сделать простую программу, которая вычитала бы одно 32-битное число из другого и подсчитывала бы количество вычитаний с помощью while l oop (так что в основном делит между двумя числами). Я использую этот код:
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity divider_32bit is
Port ( O1: in STD_LOGIC_VECTOR (31 downto 0);
O2 : in STD_LOGIC_VECTOR (31 downto 0);
clk : in STD_LOGIC;
Result : out STD_LOGIC_VECTOR (31 downto 0);
Remain : out STD_LOGIC_VECTOR (31 downto 0));
end divider_32bit;
architecture Behavioral of divider_32bit is
signal res : std_logic_vector(31 downto 0) := X"00000000";
signal temp : unsigned(31 downto 0);
signal temp2 : unsigned(31 downto 0);
begin
temp <= unsigned(O1);
temp2 <= unsigned(O2);
Result <= res;
division: process(clk)
begin
if(rising_edge(clk)) then
while temp >= temp2 loop
temp<=temp-temp2;
res<=res+1;
end loop;
end if;
end process division;
end Behavioral;
Моя проблема с этим кодом заключается в том, что я не могу сделать res incerement, он остается в том виде, в каком был инициализирован (0). Я испытал это, и я обнаружил, что если я удалю while l oop, он начнет вести себя нормально. Так что мне пришлось что-то испортить, но, поскольку я новичок, я не могу сказать, что с этим не так. Я только хочу сделать для него симуляцию.