LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY MULT8B IS GENERIC (S: INTEGER :=8); PORT ( RESULT :OUTSTD_LOGIC_VECTOR(2*S DOWNTO1); A,B : INSTD_LOGIC_VECTOR(S DOWNTO1) ); ENDENTITY; ARCHITECTURE BEHAV OF MULT8B IS SIGNAL A0 : STD_LOGIC_VECTOR(2*S DOWNTO1); BEGIN A0 <= CONV_STD_LOGIC_VECTOR(0,S) & A; PROCESS(A,B) VARIABLE RESULT1: STD_LOGIC_VECTOR(2*S DOWNTO1); BEGIN RESULT1 :=(OTHERS =>'0'); FOR I IN1TO S LOOP IF(B(I) = '1') THEN RESULT1 := RESULT1 +TO_STDLOGICVECTOR(TO_BITVECTOR(A0) SLL(I-1)); ENDIF ; ENDLOOP; RESULT<= RESULT1; ENDPROCESS; ENDARCHITECTURE;
LIBRARY ieee; USE ieee.std_logic_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY MULT8B_vhd_tst IS END MULT8B_vhd_tst; ARCHITECTURE MULT8B_arch OF MULT8B_vhd_tst IS SIGNAL A : STD_LOGIC_VECTOR(8DOWNTO1) :=CONV_STD_LOGIC_VECTOR(6,8); SIGNAL B : STD_LOGIC_VECTOR(8DOWNTO1) :=CONV_STD_LOGIC_VECTOR(15,8); SIGNAL RESULT : STD_LOGIC_VECTOR(16DOWNTO1); COMPONENT MULT8B PORT ( A : INSTD_LOGIC_VECTOR(8DOWNTO1); B : INSTD_LOGIC_VECTOR(8DOWNTO1); RESULT : OUTSTD_LOGIC_VECTOR(16DOWNTO1) ); ENDCOMPONENT; BEGIN u1 : MULT8B PORTMAP ( A => A, B => B, RESULT => RESULT );
A <= CONV_STD_LOGIC_VECTOR(6,8), CONV_STD_LOGIC_VECTOR(50,8) AFTER100 NS, CONV_STD_LOGIC_VECTOR(128,8) AFTER200 NS; B <= CONV_STD_LOGIC_VECTOR(15,8), CONV_STD_LOGIC_VECTOR(50,8) AFTER150 NS, CONV_STD_LOGIC_VECTOR(64,8) AFTER200 NS;
LIBRARY ieee; USE ieee.std_logic_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DIV16B IS PORT(A,B:INSTD_LOGIC_VECTOR(15DOWNTO0); QU,RE: OUTSTD_LOGIC_VECTOR(15DOWNTO0) --QU是商,RE是余数 ); END DIV16B; ARCHITECTURE BEHAV OF DIV16B IS BEGIN PROCESS(A,B) VARIABLE AT,BT,P,Q:STD_LOGIC_VECTOR(15DOWNTO0); BEGIN P:=CONV_STD_LOGIC_VECTOR(0,16); Q:=CONV_STD_LOGIC_VECTOR(0,16); AT:=A; BT:=B; FOR I IN QU'RANGELOOP P :=P(14DOWNTO0) & AT(15); AT :=AT(14DOWNTO0) & '0'; P :=P-BT; IF P(15)='1'THEN Q(I):='0'; P:=P+BT; ELSE Q(I) :='1'; ENDIF; ENDLOOP; QU<=Q; RE<=P; ENDPROCESS; END BEHAV;
LIBRARY ieee; USE ieee.std_logic_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DIV16B_vhd_tst IS END DIV16B_vhd_tst; ARCHITECTURE DIV16B_arch OF DIV16B_vhd_tst IS -- constants -- signals SIGNAL A : STD_LOGIC_VECTOR(15DOWNTO0); SIGNAL B : STD_LOGIC_VECTOR(15DOWNTO0); SIGNAL QU : STD_LOGIC_VECTOR(15DOWNTO0); SIGNAL RE : STD_LOGIC_VECTOR(15DOWNTO0); COMPONENT DIV16B PORT ( A : INSTD_LOGIC_VECTOR(15DOWNTO0); B : INSTD_LOGIC_VECTOR(15DOWNTO0); QU : OUTSTD_LOGIC_VECTOR(15DOWNTO0); RE : OUTSTD_LOGIC_VECTOR(15DOWNTO0) ); ENDCOMPONENT; BEGIN i1 : DIV16B PORTMAP (
A => A, B => B, QU => QU, RE => RE ); A<= CONV_STD_LOGIC_VECTOR(44,16), CONV_STD_LOGIC_VECTOR(55,16) AFTER150 NS, CONV_STD_LOGIC_VECTOR(10086,16) AFTER300 NS; B<= CONV_STD_LOGIC_VECTOR(4,16), CONV_STD_LOGIC_VECTOR(11,16) AFTER100 NS, CONV_STD_LOGIC_VECTOR(4,16) AFTER200 NS; END DIV16B_arch;