在VHDL中使用组件和forloop的问题

时间:2017-06-09 17:59:32

标签: vhdl

我正在尝试在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;

请有人帮我这个吗? 感谢

1 个答案:

答案 0 :(得分:0)

功能问题与变量i有关。它在前100ns后陷入4。它应该在BEGINEND PROCESS之间设置为1。