⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multi8x8.vhd

📁 8位相 加乘法器
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;
ENTITY MULTI8X8 IS                            -- 8位乘法器顶层设计
    PORT ( P1  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
           P3  : OUT STD_LOGIC_VECTOR(7 DOWNTO 2);

           CLKk,hkey : IN STD_LOGIC;
          START : IN STD_LOGIC;
               A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
               B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
               mmax : out STD_LOGIC_VECTOR(3 DOWNTO 0);
         ARIEND : OUT STD_LOGIC;
           DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );
END MULTI8X8;
ARCHITECTURE struc OF MULTI8X8 IS
COMPONENT ARICTL
    PORT (  CLK : IN STD_LOGIC;   START : IN STD_LOGIC;
         CLKOUT : OUT STD_LOGIC;  RSTALL : OUT STD_LOGIC;
        ARIEND : OUT STD_LOGIC  );
END COMPONENT;
COMPONENT ANDARITH
    PORT (  ABIN : IN STD_LOGIC;
              DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
             DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)  );
END COMPONENT;
COMPONENT ADDER8B
    PORT (CIN : IN STD_LOGIC;
             A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
             B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
             S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
          COUT : OUT STD_LOGIC );
END COMPONENT;
COMPONENT SREG8B
    PORT (  CLK : IN STD_LOGIC;   LOAD : IN STD_LOGIC;
             DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
              QB : OUT STD_LOGIC  );
END COMPONENT;
COMPONENT REG16B
    PORT (   CLK : IN STD_LOGIC;  CLR : IN STD_LOGIC;
        D : IN STD_LOGIC_VECTOR(8 DOWNTO 0);
        Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)  );
END COMPONENT;
    SIGNAL GNDINT : STD_LOGIC;
    SIGNAL INTCLK : STD_LOGIC;
    SIGNAL RSTALL : STD_LOGIC;
    SIGNAL NEWSTART : STD_LOGIC;	--FOR BETTER
    SIGNAL QB,clk : STD_LOGIC;
    SIGNAL ANDSD : STD_LOGIC_VECTOR(7 DOWNTO 0);
    SIGNAL count,maxx : STD_LOGIC_VECTOR(3 DOWNTO 0);
    SIGNAL DTBIN : STD_LOGIC_VECTOR(8 DOWNTO 0);
    SIGNAL DTBOUT : STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
    DOUT <= DTBOUT;
    GNDINT <= '0';
--  ***** FOR BETTER *****
PROCESS(CLK,START)
BEGIN
	IF START='1' THEN
		NEWSTART<='1';
	ELSIF CLK='0'THEN
		NEWSTART<='0';
	END IF;
END PROCESS;
--*** END FOR BETTER ***
process(hkey)
	begin
		if(hkey'event and hkey='1')then
			maxx<=maxx+'1';
		end if;
end process;
mmax<=maxx;
process(clkk)
begin
	if clkk'event and clkk='1'then
		if(count<maxx)then
			count<=count+'1';
		else
			count<="0000";
			clk<=not clk;
		end if;
	end if;
end process;
--- THE OLD U1 : ARICTL  PORT MAP(CLK => CLK,  START => START,  
U1 : ARICTL  PORT MAP(CLK => CLK,  START => NEWSTART,  --FOR THE BETTER
CLKOUT => INTCLK, RSTALL => RSTALL, ARIEND => ARIEND );
    U2 : SREG8B  PORT MAP( CLK => INTCLK, LOAD => RSTALL,
                               DIN => B, QB => QB  );
    U3 : ANDARITH PORT MAP(ABIN => QB, DIN => A,DOUT => ANDSD);
U4 : ADDER8B  PORT MAP(CIN => GNDINT, 
                A => DTBOUT(15 DOWNTO 8),  B => ANDSD,    
                S => DTBIN(7 DOWNTO 0), COUT => DTBIN(8) );
    U5 : REG16B   PORT MAP(CLK => INTCLK, CLR => RSTALL,
                                 D => DTBIN,  Q => DTBOUT  );
    P1<= "11100111" ;
    P3<= "111111";

END struc;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -