Невозможно увеличить в VHDL цикл while - PullRequest
0 голосов
/ 06 мая 2020

Я хочу сделать простую программу, которая вычитала бы одно 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, он начнет вести себя нормально. Так что мне пришлось что-то испортить, но, поскольку я новичок, я не могу сказать, что с этим не так. Я только хочу сделать для него симуляцию.

...