8位除法器,编译问题,求楼主解决 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DIVIDER IS GENERIC(WN:INTEGER:=8; WD:INTEGER:=6; PO2WND:INTEGER:=8192; --2**(WN+WD) PO2WN1:INTEGER:=128; --2**(WN-1) PO2WN: INTEGER:=255); --2**WN-1 PORT(CLK:IN STD_LOGIC; N_IN:IN STD_LOGIC_VECTOR(WN-1 DOWNTO 0); --被除数 D_IN:IN STD_LOGIC_VECTOR(WD-1 DOWNTO 0); --除数 R_OUT:OUT STD_LOGIC_VECTOR(WD-1 DOWNTO 0); --余数 Q_OUT:OUT STD_LOGIC_VECTOR(WN-1 DOWNTO 0); --商 END ENTITY DIVIDER; ARCHITECTURE ART OF DIVIDER IS SUBTYPE TWOWORDS IS INTEGER RANGE -1 TO PO2WND-1; SUBTYPE WORD IS INTEGER RANGE 0 T0 PO2WN; TYPE STATE_TYPE IS (S0,S1,S2,S3); SIGNAL STATE:STATE_TYPE; BEGIN STATES:PROCESS IS VARIABLE R,D:TWOWORDS; VARIABLE Q:WORD; VARIABLE COUNT:INTEGER RANGE 0 TO WN; BEGIN WAIT UNTIL CLK='1';
接上 CASE STATE IS WHEN S0=> --初始化 STATE<=S1; COUNT:=0; Q:=0; --复位商寄存器Q D:=PO2WN1*CONV_INTEGER(D_IN); --装载除数D R:CONV_INTEGER(N_IN); --REMAINDER = NOMINATOR WHEN S1=> --减法运算 R:=R-D; --减去除数D STATE<=S2; WHEN S2=> --恢复余数 IF R<0 THEN R:=R+D; --恢复以前的余数 Q:=Q*2; --LSB置0并逻辑左移一位 ELSE Q:=2*Q+1; --LSB置1并逻辑左移一位 END IF COUNT:=COUNT+1; D:=D/2; IF COUNT=WN THEN --DIVISION READY? STATE<=S3; ELSE STATE<=S1; END IF WHEN S3=>
接上 --结果输出 Q_OUT<=CONV_STD_LOGIC_VECTOR(Q,WN); R_OUT<=CONV_STD_LOGIC_VECTOR(R,WD); STATE<=S0; --开始下一步除法 END CASE; END PROCESS STATES; END ARCHITECTURE ATR;