移位相加8位硬件乘法器电路计
- 格式:doc
- 大小:1.70 MB
- 文档页数:20
EDA数字系统设计实验——8位二进制乘法电路学院:电子工程学院学号:0210****姓名:***8位二进制乘法电路1.选题目的:通过八位二进制乘法器设计实验,进一步熟悉VHDL语言的电路设计,及数字电路的基本知识,为以后进一步在数字电路学习上奠定基础。
2.设计要求8位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:1 1 0 1 0 1 0 1× 1 0 0 1 0 0 1 11 1 0 1 0 1 0 1 N0与被乘数相乘的部分积,部分积右移一位1 1 0 1 0 1 0 1 N1与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 0 0 1 1 1 1 1 1 11 0 0 1 1 1 1 1 1 1 两个部分积之和,部分积之和右移一位+ 0 0 0 0 0 0 0 0 N2与被乘数相乘的部分积0 1 0 0 1 1 1 1 1 1 10 1 0 0 1 1 1 1 1 1 1 与前面部分积之和相加,部分积之和右移一+ 0 0 0 0 0 0 0 0 N4与被乘数相乘的部分积· · ·· · · N7与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 1 1 1 0 1 0 0 1 0 0 1 1 1 1 与前面部分积之和相加0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 右移一位得到最后的积为了实现硬件乘法器,根据上面的乘法的计算过程可以得出3点:一是只对两个二进制数进行相加操作,并用寄存器不断累加部分积;而是将累加的部分积左移(复制的被乘数不移动);三是乘数的对应位若为0时,对累加的部分积不产生影响(不操作)。
应用移位相加原理设计8位乘法器1.顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity multi8x8 isport(clkk,start:in std_logic;a,b:in std_logic_vector(7 downto 0);dout:out std_logic_vector(15 downto 0));end entity;architecture struc of multi8x8 iscomponent arictlport(clk,start:in std_logic;clkout,rstall:out std_logic);end component;component andarithport(abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0));end component;component adder8bport(cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end component;component sreg8bport(clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end component;component reg16bport(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end component;signal gndint,intclk,rstall,newstart,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);begindout<=dtbout;gndint<='0';process(clkk,start)beginif(start='1')thennewstart<='1';else if(clkk='0')thennewstart<='0';end if;end if;end process;u1:arictl port map(clk=>clkk,start=>newstart,clkout=>intclk,rstall=>rstall);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 architecture;2.各部件1)arictl—控制元件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl isport(clk,start:in std_logic;clkout,rstall:out std_logic);end entity;architecture bhv of arictl issignal cnt4b:std_logic_vector(3 downto 0);beginprocess(clk,start)beginrstall<=start;if(start='1')thencnt4b<="0000";else if(clk'event and clk='1')thenif(cnt4b<8)thencnt4b<=cnt4b+1;end if;end if;end if;end process;process(clk,cnt4b,start)beginif(start='0')thenif(cnt4b<8)thenclkout<=clk;elseclkout<='0';end if;elseclkout<=clk;end if;end process;end architecture;2)sreg8b—8位移位寄存器元件library ieee;use ieee.std_logic_1164.all;entity sreg8b isport(clk,load:in std_logic;din: in std_logic_vector(7 downto 0);qb:out std_logic );end sreg8b;architecture behav of sreg8b issignal reg8 : std_logic_vector(7 downto 0); beginprocess(clk,load)beginif clk'event and clk = '1' thenif load ='1' then reg8<=din;else reg8(6 downto 0)<=reg8(7 downto 1);end if;end if;end process;qb<=reg8(0);end behav;3)andarith—一位乘法元件library ieee;use ieee.std_logic_1164.all;entity andarith isport( abin: in std_logic;din: in std_logic_vector(7 downto 0);dout : out std_logic_vector(7 downto 0) );end andarith;architecture behav of andarith isbeginprocess(abin,din)beginfor i in 0 to 7 loopdout(i)<=din(i) and abin;end loop;end process;end behav;4)adder8b—8位加法元件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b isport (cin : in std_logic;a,b : in std_logic_vector(7 downto 0);s : out std_logic_vector(7 downto 0);cout : out std_logic );end adder8b;architecture behav of adder8b issignal sint,aa,bb : std_logic_vector(8 downto 0); beginaa<='0'& a;bb<='0'& b;sint<=aa+bb+cin;s<=sint(7 downto 0);cout<=sint(8);end behav;5)reg16b—16位移位寄存器元件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is --16 bit shift register port(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end entity;architecture bhv of reg16b issignal r16s:std_logic_vector(15 downto 0);beginprocess(clk,clr)beginif(clr='1') thenr16s<="0000000000000000" ;else if(clk'event and clk='1')thenr16s(6 downto 0)<=r16s(7 downto 1);r16s(15 downto 7)<=d;end if;end if;end process;q<=r16s;end architecture;。
8位二进制乘法电路选题目的:学会使用quarter 软件设计电路及仿真,实现8位二进制乘法电路。
设计目的:学习应用移位相加原理设计8位乘法器实现方案:由于其原理是利用8位二进制乘法采用移位相加的方法。
即用乘数的 各位数码,从低位开始依次与被乘数相乘,毎相乘一次得到的积称为部分积,将 第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的 部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结 果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0 )和乘数(N7N6N5N4N3N2N1N0)分别为 11010101 和 10010011,其计算过程如下:N0与被乘数相乘的部分积,部分积右移一位 N1与被乘数相乘的部分积两个部分积Z 和,部分积Z 和右移一位 N2与被乘数相乘的部分积与前面部分积之和相加,部分积之和右移一 N4与被乘数相乘的部分积N7与被乘数相乘的部分积 与前面部分积Z 和相加 右移一位得到最后的积设计过程:从逻辑图及其乘法操作时序图图(示例中的相乘数为9FH 和FDH )上可以清楚地看出此乘法器的工作原理。
逻辑波形图中, START 信号的上跳沿及其高电平有两个功能,即16位寄存器清零和 被乘数A[7..O]向移位寄存器SREG8B 加载;它的低电平则作为乘法 使能信号。
CLK 为乘法时钟信号。
当被乘数被加载于8位右移寄存 器SREG8B 后,110 10 10 1 X 1 0 0 1 0 0 1 1110 10 10 1 110 10 10 1 + 110 10 10 1 10 0 1111111 10 0 1111111 + 000000000 10 0 1111111 0 10 0 1111111 + 000000000 10 10 10 01 10 10 0 10 0随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
基于FPGA的8位移位相加型硬件乘法器的设计作者:张建妮来源:《智能计算机与应用》2014年第04期摘要:乘法器是数字信号处理中非常重要的模块。
本文首先介绍了硬件乘法器的原理,在此基础上提出了硬件乘法器的设计方法,最后再利用EDA技术,在FPGA开发平台上,通过VHDL编程和图形输入对其进行了实现,具有实用性强、性价比高、可操作性强等优点。
关键词:硬件乘法器;加法器; VHDL中图分类号:TP2 文献标识码:A文章编号:2095-2163(2014)04-0087-04Abstract:Multiplier is very important in digital signal processing module. In this paper, the principle of the hardware multiplier is introduced at first. Based on it, a design method is put forward.Finally , using EDA technology,the hardware -multiplier is implemented through VHDL programming combining with the input mode of schematic diagram on the FPGA development platform. The design has strong practicability ,high cost-effective, strong operability, etc.Key words:Hardware-Multiplier; Adder; VHDL0引言在数字信号处理中,经常会遇到卷积、数字滤波、FFT等运算,而在这些运算中则存在大量类似ΣA(k)B(n-k)的算法过程。
因此,乘法器是数字信号处理中必不可少的一个模块。
8位二进制乘法电路该乘法器是有由8位加法器构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。
用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为和,其计算过程如下:下面分解8位乘法器的层次结构,分为以下4个模块:①右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
②加法器模块:这是一个8位加法器,进行操作数的加法运算。
③1位乘法器模块:完成8位与1位的乘法运算。
④锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
按照上述算法,可以得到下图所示之框图和简单流程图。
图中8位移位寄存器reg_8存放乘数a,从a的最低位开始,每次从reg_8中移出一位,送至1×8位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。
这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。
(1)8位移位寄存器reg_8的设计(A )电路框图(B- 3 -8位移位寄存器是在时钟(r8_clk'event and r8_clk='1')信号作用下,当r8_load='1'时,将8位乘数加载进入;而当r8_load='0'时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0)传送给r8_out 输出。
EDA大作业基于VHDL的8位乘法器设计1.乘法器原理8位乘法器可用移位和加法来实现,两个8位数相乘,总共需要执行8次加法运算和8次移位运算,由乘数的末位值确定被乘数是否与原部分积相加,从乘数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,乘数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,乘数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。
实现原码一位乘法的硬件逻辑结构图如下图所示。
用寄存器R0存放部分积;R0存放乘数Y,并且最低位Yn作判断为;R0和R1都具有右移功能并且是连通的;寄存器R2存放被乘数X,加法器完成部分积与位积求和,计数器记录相加移位的操作次数。
8位乘法器的顶层设计主要分成四大功能模块,并可根据分解的层次进行设计,各个功能模块作用介绍如下:1)右移寄存器模块:是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移,本设计采用的一个8位寄存器,能存放8位二进制代码,需用8个触发器来构成,它可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
2)加法器:本设计用到一个8位加法器,主要进行操作数的加法运算。
3)乘1模块:主要实现8位与1位的乘法运算。
4)锁存器:它所实现的功能是把当前的状态锁存起来,使CPU送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定。
本次设计采用16位锁存器,同时也是一个右移寄存器,在时钟信号作用下,进行输入值的移位与锁存。
2.乘法器设计流程本设计采用移位和加法来实现两个8位二进制数相乘。
由乘数的末尾值来确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积;同时,乘数也右移一位,由次低位作新的末位,空出最高位放部分积的最高位。
例如被乘数为00000101,乘数为01101111,初始条件下,部分积为0,乘数最低位为1,加被乘数,和为00000101,使其右移一位,形成新的部分积为00000010,乘数同时右移一位,原和最低位1被放到乘数的最高位,此时,乘数最低位为1,加00000101,和为00000111,使其右移一位,形成新的部分积为0000011,依次类推,循环8次,总共需要进行8次相加和8次移位操作,最终得出乘积结果。
1.选题目的:8 位二进制乘法电路02116024赵品楠通过八位二进制乘法器设计实验,进一步熟悉 VHDL 语言的电路设计,及数字电路的基本知识,为以后进一步在数字电路学习上奠定基础。
2.设计要求8 位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为 11010101 和 10010011,其计算过程如下:1 1 0 1 0 1 0 1× 1 0 0 1 0 0 1 11 1 0 1 0 1 0 1 N0 与被乘数相乘的部分积,部分积右移一位1 1 0 1 0 1 0 1 N1 与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 0 0 1 1 1 1 1 1 11 0 0 1 1 1 1 1 1 1 两个部分积之和,部分积之和右移一位+ 0 0 0 0 0 0 0 0 N2 与被乘数相乘的部分积0 1 0 0 1 1 1 1 1 1 10 1 0 0 1 1 1 1 1 1 1 与前面部分积之和相加,部分积之和右移一+ 0 0 0 0 0 0 0 0 N4 与被乘数相乘的部分积的,也可 · · · · · ·N7 与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 1 1 1 0 1 0 0 1 0 0 1 1 1 1 与前面部分积之和相加 0 1 1 1 1 0 1 0 0 1 0 0 1 1 1右移一位得到最后的积按照这种算法,可以得到下图所示之框图和简单流程图。
8位二进制乘法电路该乘法器是有由8位加法器构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。
用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:下面分解8位乘法器的层次结构,分为以下4个模块:①右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
②加法器模块:这是一个8位加法器,进行操作数的加法运算。
③1位乘法器模块:完成8位与1位的乘法运算。
④锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
按照上述算法,可以得到下图所示之框图和简单流程图。
图中8位移位寄存器reg_8存放乘数a,从a的最低位开始,每次从reg_8中移出一位,送至1×8位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。
这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。
(1)8位移位寄存器reg_8的设计(A )电路框图(B8位移位寄存器是在时钟(r8_clk'event and r8_clk='1')信号作用下,当r8_load='1'时,将8位乘数加载进入;而当r8_load='0'时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0)传送给r8_out 输出。
电子技术课程设计----移位相加8位硬件乘法器电路计学院: 华科学院专业: 通信工程班级:通信052201H姓名: 张茹学号:200522080122指导教师:柴婷婷2007年12月30日一,设计任务与要求--------------------(3)1,内容2,要求二,总体框图---------------------------(3)1,电路的总体框图2,框图的说明3,设计思路4,方案设计三,选择器件与功能模块-----------------(5)1,选择器件各功能模块及功能说明四,功能模块----------------------------(8)1,ADDER8B的模块2,ANDARITH的模块3,ARICTL的模块4,REG16B的模块5,SREG8B的模块五,总体设计电路图----------------------(14)1,总体原理图2,仿真波形图3,管脚分配图4,硬件验证情况六,心得体会--------------------------------------(18)移位相加8位硬件乘法器一.设计任务与要求1.内容: 由8位加法器构成的以时序逻辑方式设计的8位乘法器乘法通过逐向移位加原理来实现,从被乘数的最低位开始,若为1,则乘数左移与上一次和相加;若为0,左移后以全零相加,直至被乘数的最高位。
2.要求: (1) 重点掌握VHDL设计电路模块(2)在掌握8位加法器设计的基础上,进一步掌握8×8位乘法器的设计;(3)进一步学习开发系统,掌握MAX+PLUS II的设计流程。
二.总体框图(电路的总体框图)1,说明:此电路由五部分组成2,它们分别是控制器,锁存器,寄存器,乘法器,加法器。
1控制器是一个乘法器的控制模块,用来接受实验系统上的连续脉冲。
2锁存器起锁存的作用,它可以锁存8位乘数。
3移位寄存器起移位的作用,便于被乘数可以逐位移出。
4乘法器功能类似一个特殊的与非门。
5加法器用于8位乘数和高8位相加。
2,设计思路:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。
这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
3,方案设计:此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八加法器,所以关键是设计好八位加法器方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器它的原理简单,资源利用率和进位速度方面都比较好。
综合各方面的考虑,决定采用方案二。
2 三,选择器件与功能模块1,选择器件SREG8B(移位寄存器);REG16B(16位琐存器);ARICTL(运算控制器);ANDARITH(1位乘法器);ADDER8B(8位加法器);数码管(显示结果)。
(1)SREG8B的模块图SREG8B是一个移位寄存器,SREG8B有三个输入端,分别是clk,load,din[7..0]。
其中clk为时钟信号。
一个输出端,它是qb。
(2)REG16B的模块图REG16B是一个16位锁存器,REG16B有三个输入端,它们分别是clk,clr,d[8..0].其中clk为时钟信号。
有一个输出端,它是q[15..0].(3)ARICTL的模块图ARICTL是乘法器的控制模块,ARICTL有两个输入端,它们分别是clk,start。
有三个输入端,它们分别是clkout,rstall,ariend。
(4)ANDARITH的模块图ANDARITH是一个一位乘法器,ANDARITH有两个输入端。
它们分别是abin,din[7..0]。
有一个输出端,它是dout[7..0]。
(5)ADDER8B的模块图ADDER8B是一个8位加法器,ADDER8B有三个输入端,它们分别是cin,a[7..0],b[7..0]。
其中a[7..0]为被乘数;b[7..0]为乘数。
有两个输出端,它们分别是s[7..0],cout。
四,功能模块(1)ADDER8B模块设计ADDER8B的模块图ADDER8B(8位加法器)的模块ADDER8B的波形图ADDER8B模块的功能:ADDER8B是一个8位加法器。
有三个输入端(CIN,A[7..0],B[7..0]),其中A[7..0]是被乘数.B[7..0]是乘数。
ADDER8B起到使两个数相加的作用;即在加法的基础上才能相乘。
所以8位加法器是一个必不可少的模块。
(2) ANDARITH模块设计ANDARITH的模块图ANDARITH(乘法器)的模块ANDARITH的波形图ANDARITH模块的功能:ANDARITH是一个1位乘法器。
有两个输入端(ABIN,DIN[7.0]).有一个输出端.DOUT[7..0]。
ANDARITH起乘法的作用。
它类似于一个特殊的与门。
即当ABIN为‘1’时,DOUT直接输出DIN,而当ABIN为‘0’时,DOUT输出“00000000”。
(3)ARICTL模块设计ARICTL的模块图ARICTL(控制器)的模块ARICTL的波形图ARICTL模块的功能:ARICTL是一个乘法器的控制模块。
为了接受实验系统上的连续脉冲。
有两个输入端(CLK,START);其中START信号的上跳沿及其高电平有两个功能,即16位寄存器清零和被乘数A[7..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。
CLK为乘法时钟信号。
有三个输出(CLKOUT,RSTALL,ARIEND)。
(4)REG16B模块设计REG16B的模块REG16B(锁存器)的模块REG16B的波形图REG16B模块的功能:REG16B是一个16位锁存器。
有三个输入端(CLK,CLR,D[8..0]);其中CLK为时钟信号。
有一个输出端(Q[15..0])。
16位锁存器主要为了锁存一些数,便于以后程序应用。
(5)SREG8B模块设计SREG8B的模块图SREG8B(移位寄存器)的模块图SREG8B的波形图SREG8B模块的功能:SREG8B是一个移位寄存器。
有三个输入端(CLK,LOAD,DIN[7..0]);当被乘数被加载于8位右移寄存器后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
有一个输出端(QB)。
五.总体设计电路图说明原理图:本乘法器由五个模块组成,其中ARICTL是乘法运算控制电路,它的START信号上的上跳沿与高电平有2个功能,即16位寄存器清零和被乘数A[7...0]]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号,乘法时钟信号从ARICTL的CLK输入。
当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,一位乘法器ANDARITH打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,一位乘法器全零输出。
如此往复,直至8个时钟脉冲后,由ARICTL的控制,乘法运算过程自动中止,ARIEND输出高电平,乘法结束。
此时REG16B的输出即为最后的乘积。
2.时序仿真结果(以下是8位乘法器顶层设计的仿真波形图)从上面的波形图看出,当9FH和FDH相乘时,第一个时钟上升沿后,其移位相加的结果(在REG16B端口)是4F80H,第8个上升沿后,最终相乘结果是9D23H。
3.管脚分配图4,实验下载验证情况由于我们实验室采用GW48系列EDA系统平台,根据GW48系统和乘法器原理,定义管脚是:ARIEND接PIO39(D8),乘法运算时钟CLK接Clock0,清零及启动运算信号START由键8(PIO38)控制,乘数B[7..0]接PIO58-PIO66(由键2,键1输入8位二进制数),被乘数A[7..0]接PIO47-PIO54(由键4,键3输入8位二进制数),乘积输出DOUT[15..0] 接PIO31-PIO16。
编译,综合后向目标苡片下载适配后的逻辑设计文件。
下载适配后,键8输入高电平时,乘积锁存器清零,乘数和被乘数值加载;低电平时开始乘法操作,8个脉冲后乘法结束,乘积显示在数码管8~5位,高位在左。
例如:我们在乘数和被乘数都输入08H,键8输入低电平,8个脉冲后在高四个数码管显示0040H,实验证明成功。
心得体会通过三周的电子设计的数字部分EDA设计,我们掌握了系统的数字电子设计的方法,也知道了实验调试适配的具体操作方法。
在设计过程中,我们遇到了各种问题,在老师的指导下和我们自己的努力,克服了各种问题,最后得到了成功。
但是我也发现了一些问题,我们无法解决。
如:在ARICTL控制器模块中有一个警告,还有在适配后得到频率高的执行速度还要慢一些等等。
总之,这次设计使我掌握了很多有用的经验也学到了很多在书本上学不到知识,为以后的学习和工作打下坚实的基础通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
器件的选择也很重要,只有选择合适的器件,才能正确的编译,从而能更好的做好本次试验!通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!乘法器是数字系统中的基本逻辑器件,在很多应用中都会出现如各种滤波器的设计、矩阵的运算等。
本实验设计一个通用的8位乘法器。
乘法器的设计方法很多,和加法器一样它可以认为是一个组合电路,但是若用纯组合逻辑来构成乘法器虽然工作速度比较快,但会过于占用硬件资源,难以实现宽位乘法器,所以一般不采用纯组合电路来设计。