我正在尝试在VHDL中创建一个用于除法的组件,下面是我的代码。我不知道我哪里错了。我的逻辑是: 步步, •右移除数,并将其与当前股息进行比较 •如果除数较大,则将0移至商的下一位 •如果除数较小,则减去得到新的股息并转移1 作为商的下一位。
我用过' - '在这里签名,但实际上我必须使用门,所以要么我必须使用我的减法组件或只是在这里创建一个减法器。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY divprog IS
PORT(
a: IN std_logic_vector(3 downto 0);
b: IN std_logic_vector(3 downto 0);
err: OUT std_logic;
reslow: OUT std_logic_vector(3 downto 0);
reshigh: OUT std_logic_vector(3 downto 0));
END divprog;
architecture behaviour of divprog is
signal ax,bx,bsub,res :std_logic_vector(7 downto 0) := (others => '0');
signal quo: std_logic_vector(3 downto 0) := (others => '0');
signal intcarry: std_logic_vector(8 downto 0):= (others => '0');
BEGIN
--sub1: subtractor PORT MAP(aa,bb,x,ss);
Process is
variable i : POSITIVE := 1;
BEGIN
ax <= "0000" & a;
bx <= b & "0000";
if(b > "0000") then
while (i <=3) loop
bx <= '0'&bx(7 downto 1);
IF (ax < bx) then
quo <= quo(2 downto 0)& '0';
--bx <= '0'&bx(7 downto 1);
res <=ax;
elsif(ax >= bx) then
res <= ax - bx;
quo <=quo(2 downto 0)& '1';
end if;
i := i + 1;
ax <= res;
end loop;
reshigh <= quo;
reslow <= res(3 downto 0);
end IF;
wait for 100 ns;
END PROCESS;
end behaviour;
请有人帮我这个吗? 感谢
答案 0 :(得分:0)
功能问题与变量i
有关。它在前100ns后陷入4。它应该在BEGIN
和END PROCESS
之间设置为1。