视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
EDA 8位乘法器 实验报告
2025-09-29 17:07:23 责编:小OO
文档
南华大学

船山学院

实验报告 

( 2009 ~2010 学年度     第二学期 )

课程名称EDA
实验名称8位乘法器

           姓名          学号     

专业计算机科学与技术班级01
地点8-212教师
一、实验目的:

      学习和了解八位乘法的原理和过程

二、设计思路:

    纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

三、实验逻辑图:

四、实验代码:

1) 选通与门模块的源程序ANDARITH.VHD

LIBRARY IEEE;USE IEEE.STD_LOGIC_11.ALL;

ENTITY ANDARITH  IS    

PORT (ABIN:IN STD_LOGIC;    

     DIN:IN STD_LOGIC_VECTOR (7 DOWNTO 0)      

     DOUT:OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); 

END ANDARITH;ARCHITECTURE ART OF ANDARITH IS 

BEGIN    

PROCESS (ABIN,DIN)    

BEGIN      

FOR I IN 0 TO 7 LOOP    

DOUT (I)<=DIN (I)AND ABIN;

END LOOP;

        

END PROCESS;

END ART;

2)  16位锁存器的源程序REG16B.VHDLIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;ENTITY REG16B IS                

 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 REG16B;

ARCHITECTURE ART OF REG16B IS   

SIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGIN

PROCESS (CLK,CLR)    

BEGIN               

  IF CLR = '1' THEN R16S<= "0000000000000000";    

               ELSIF CLK'EVENT AND CLK = '1' 

THEN                        

R16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);

      R16S(15 DOWNTO 7)<=D;                

   END IF;      

     END PROCESS;      

Q<=R16S;

END ART;

3)  8位右移寄存器的源程序SREG8B.VHD

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;         

ENTITY SREG8B IS   

  PORT (CLK:IN STD_LOGIC; LOAD  :IN STD _LOGIC;        

BIN:IN STD_LOGIC_VECTOR(7DOWNTO 0);

QB:OUT STD_LOGIC  );END SREG8B;

ARCHITECTURE ART OF SREG8B IS     

SIGNAL REG8B:STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN     

  PROCESS (CLK,LOAD)

 BEGIN       

IF CLK'EVENT AND CLK= '1' THEN         

IF LOAD = '1' THEN REG8<=DIN;            

ELSE REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1);

END IF;       

 END IF;      

END PROCESS;    

 QB<= REG8 (0);                    

END ART;

4) 乘法运算控制器的源程序ARICTL.VHD LIBRARY 

IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL 

IS    

   PORT ( CLK:IN STD_LOGIC;     START:IN  

STD_LOGIC;

     CLKOUT:OUT STD_LOGIC; RSTALL:OUT     

STD_LOGIC;         

    ARIEND:OUT STD_LOGIC   );

END ARICTL;ARCHITECTURE ART OF ARICTL IS SIGNAL 

CNT4B:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

RSTALL<=START;

PROCESS (CLK,START)  

BEGIN    

IF START = '1' THEN CNT4B<= "0000";

   ELSIF CLK'EVENT AND CLK = '1' THEN           

IF CNT4B<8 THEN

        CNT4B=CNT4B+1;          

END IF;      

END IF;

END PROCESS;

PROCESS (CLK,CNT4B,START)

BEGIN

IF START = '0' THEN         

   IF CNT4B<8 THEN                

CLKOUT <=CLK; ARIEND<= '0';

ELSE CLKOUT <= '0';   ARIEND<= '1';    

      END IF;      

ELSE CLKOUT <=CLK; ARIEND<= '0';

END IF;   

END PROCESS;

END ART;

5) 8位乘法器的源程序MULTI8X8.VHDLIBRARY 

IEEE;USE IEEE.STD_LOGIC_11.ALL;   

ENTITY MULTI8X8 IS  

 PORT(CLK:IN STD_LOGIC;    

   START:IN STD_LOGIC;

   A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);   

  B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);  

   ARIEND:OUT STD_LOGIC;  

    DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

END MULTI8X8;

ARCHITECTURE ART 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 

   ...

COMPONENT SREG8B        

   ...

COMPONENT REG16B        

   ...

SIGNAL GNDINT:STD_LOGIC;

SIGNAL 

INTCLK:STD_LOGIC;

SIGNAL RSTALL:STD_LOGIC;

SIGNAL QB:STD_LOGIC;

SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0);

SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0);

BEGIN

DOUT<=DTBOUT;GNDINT<= '0';

U1:ARICTL PORT MAP(CLK=>CLK,   START=>START,

       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);

END ART;

五、实验结果:

六、实验心得:

     通过本实验基本上了解了八位乘法的工作原理:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。下载本文

显示全文
专题