乘法器设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
END INPUT;
ARCHITECTURE ONE OF INPUT IS
SIGNAL FIRDATA : INTEGER RANGE 0 TO 99;--被乘数
SIGNAL SECDATA : INTEGER RANGE 0 TO 99;--乘数
SIGNAL PRODATA : INTEGER RANGE 0 TO 9999;--积
图3-13实验箱调试现象
4
4.1 设计改进
由于这个设计的模块比较多,也比较繁琐,并且数值计算范围小,于是有了如下方案二:
设计一个由输入模块,运算选择模块,显示模块三部分组成的电路使其可以计算两个小于100数的乘积。
4.1.1 电路图:
图4-1顶层电路图
4.1.2 INPUT模块
图4-2 INPUT模块
波形分析:
在CLK=1时,当CH=DH=0时,输出A,图中A=12,所以shuchu=12;当CH=1,DH=0,输出B,图中B=6,所以shuchu=6;当CH=DH=1时,输出CJIN,图中CJIN=136,所以shuchu=136。
(6)输出数字与符号分离模块
图3-7输出数字与符号分离模块波形仿真
图2-12 seltime模块
2.2.10 led模块
这个模块的输入端s是数码管要显示的字符,输出端seg是其对应的编码。Led模块通过对S[3..0]的判断,对输出端A~H对数码管进行段选,使其显示对应的字符。
图2-13 led模块
2.2.11 灭点模块
图2-14灭点模块
2.3 总电路图设计
(8)消零模块
图3-9消零模块波形仿真
波形分析:
若百位是零且十位也是零则不显示十位和百位;若只有百位是零则只有百位不显示;若都为零则只有个位显示0。当分别输入数据230,046,001时,显示的结果为230,46,1。
(9)seltime模块
图3-10 seltime模块波形仿真
波形分析:
在时钟信号的下,sel输出端变化始终为‘0’~‘2’。这是因为sel的输出端连接实验箱74LS138,对数码管进行位选。在外接32768Hz时钟信号时,由于人眼的“视觉停留”,所以看起来数码管是同时显示的。对A[4..0],B[4..0]的高三位补0,使其凑成八位,并由sel来决定输出哪个片段。
在实际工作中,由于每个工程师对语言规则,电路行为的理解程度不同,编程风格不同,往往同样的系统功能,描述的方式是不一样的,综合出的电路结构更是大相径庭。因此,即使最后综合的电路都能实现相同的逻辑功能,其电路的复杂程度和时延特性也会有很大的差别。
1
1.1 设计任务
设计带符号乘法器并同时要求8个数码管显示,结果要用到的子模块非常多,通过用EDA软件的方式设计硬件,且其到硬件系统的转换是由有关的开发软件自动完成的。设计过程中可用有关软件进行各种仿真,整个系统可集成在一个芯片上,其体积小、功耗低、可靠性高。
E 1100
F× 0100
0000
0000
1100
0000
0110000
所以E×F=+0110000。
(4)数字与符号组合模块
图3-5数字与符号组合模块波形仿真
波形分析:
CJQ<’FHO’&Q,FHO=0,Q=10100010,所以CJQ=010100010。
(5)显示控制模块
图3-6显示控制模块波形仿真
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY INPUT IS
PORT( EN : IN STD_LOGIC;
ADDRESS : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--数据地址
Q3 Q2 Q1 Q0
↑
0
0
0
0
0
0
0
0
0
0
0
0
1
0
↑
0
0
0
0
0
0
0
0
0
0
1
0
0
0
↑
0
0
0
0
0
0
0
0
0
1
1
0
0
0
↑
0
0
0
0
0
0
0
1
0
0
0
0
0
0
↑
0
0
0
0
0
0
1
0
1
0
0
0
0
0
↑
0
0
0
0
0
1
1
0
0
0
0
0
0
0
↑
0
0
0
0
1
1
1
0
0
0
0
0
0
0
↑
0
0
1
0
0
0
0
0
0
0
0
0
0
0
↑
0
1
0
0
1
0
0
0
0
0
0
0
0
0
↑
0
0
0
1.2 设计要求
1.能实现两位带符号小于100的十进制数相乘;
2.通过拨码开关控制数值的输入,并用数码管显示;
3.当按下相乘键后,乘法器进行两个数的相乘运算,数码管将乘积显示出来。
1.3 编码器的真值表
表1-1编码器输出
数据开关电平信号
编码器输出
K1 K2 K3 K4 K5 K6 K7 K8 K9 K10
BEGIN
PROCESS(EN,ADDRESS,NUMIN,PRODATA)
BEGIN
IF EN='1' THEN
CASE ADDRESS IS
WHEN "10"=>FIRDATA <=CONV_INTEGER(NUMIN(7 DOWNTO 4))*10+CONV_INTEGER(NUMIN(3 DOWNTO 0));--被乘数
波形分析:
把数与符号分离,与组合过程相反。
(7)进制转换模块
图3-8进制转换模块波形仿真
波形分析:
图中A是输入数据A[7..0],A为二进制数,为查看方便,将其变为十进制数显示。在CLK=1的条件下,当A=159时,BOUT=1,SOUT=5,GOUT=9;当A=96时,BOUT=0,SOUT=9,GOUT=6,符合二进制到十进制的转换。
图2-15乘法器原理图
3
3.1 设计调试
3.1.1 管脚锁定
图3-1引脚图
3.1.2 各模块仿真波形图
(1)输入模块
图3-2输入模块波形仿真
波形分析:
开始A,B都置零,输入数据,在clk是上升沿的时候,CH=DH=0,输入A=10010;在CH=1,DH=0时,输入数B=01001。
(2)数字与符号分离模块
4.1.3 SEGSEL模块
图4-4 SEGSEL模块
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;--调用函数
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SEGSEL IS
图3-3数字与符号分离模块波形仿真
波形分析:
C为A中不带符号的部分,D为B中不带符号的部分。FH为A的符号异或B的符号。当A=01001,B=10100时,C=1001,D=0100,FH=1。
(3)乘法运算模块
图3-4乘法运算模块波形仿真
波形分析:
将被乘数E[3..0]与乘数F[3..0]输入,通过该模块实现乘法功能。乘数为Fi(i=3,2,1,0),被乘数为Ei(i=3,2,1,0)。用Fi分别与E相乘,不足位补零,最后相加。首先分析笔算乘法方法,设E=1100,F=0100,根据我们传统的计算乘法的方法,乘积符号为两数符号异或而得。其数值部分运算如下:
2.2.2 数字与符号分离模块
这个模块是由输入带符号数A[4..0],B[4..0],经过模块后,C[3..0]为A[3..0],D[3..0]为D[3..0],FH为A的符号与B的符号异或的结果。
图2-3数字与符号分离模块
2.2.3 乘法运算模块
乘法器的实现有两种方法,这里选择移位相加法。框图如下:
NUMIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
MULTD : OUT INTEGER RANGE 0 TO 99;--被乘数
MULT : OUT INTEGER RANGE 0 TO 99;--乘数
PROUT : OUT INTEGER RANGE 0 TO 9999);--积
WHEN "01"=>SECDATA <=CONV_INTEGER(NUMIN(7 DOWNTO 4))*10+CONV_INTEGER(NUMIN(3 DOWNTO 0));--乘数
WHEN "11" => PRODATA <=FIRDATA*SECDATA;
WHEN OTHERS =>NULL;
图2-4乘法器框图
模块图如下:
图2-5乘法运算模块
2.2.4 数字与符号组合模块
这个模块是在结果Q[7..0]前放置符号位,完成组合。
图2-6数字与符号组合模块
2.2.5 显示控制模块
这个模块是由AIN端接收要显示的二进制内容,输出转换成十进制后各位对应的数码管显示代码。此模块由六个子模块组成“输出数字与符号分离模块outsffl”,“进制转换模块zhuanhuan”,“消零模块xiaoling”,“符号位数码管显示模块”,“seltime模块”,“led模块”和“灭点模块”。
PORT( CLK : IN STD_LOGIC;
MULTD : IN INTEGER RANGE 0 TO 99;--强制转换被乘数
引言
二十世纪九十年代以来,电子设计自动化(EDA)技术得到了突飞猛进的发展,掌握电子设计自动化技术是新一代电子设计工程师从事电子技术开发和研究人员的必备技能,也是电子技术类专业学生学习的重要内容。
EDA技术即电子设计自动化技术,它是以可编程逻辑(PLD)为载体,以硬件描述语言(VHDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。
图2-10进制转换模块
2.2.8 消零模块
若百位为零且十位也为零,则不显示十位和百位;若只有百位为零则只有百位不显示;若都为零则只有个位显示零。
图2-11消零模块
2Байду номын сангаас2.9 seltime模块
在时钟周期的作用下,sel输出端变化始终为‘0’~‘2’。这是因为sel输出端连接实验箱74LS138,对数码管进行位选。
(10)led模块
图3-11 led模块波形仿真
波形分析:
输入端s是数码管要显示的字符,输出端seg是其对应的编码。例如,图中字符‘5’的编码是“7D”即二进制“01111101”,进而程序实现了模块的功能。
(11)顶层文件
图3-12顶层波形仿真
3.2 设计结果分析
首先设置时钟信号,当CH=DH=1时,拨动开关KD4到KD8,输入乘数A=01010,如图所示第三四位为0A,1表示负号即A=+10;当CH=1,DH=0时,输入B=01010,如图所示第一二位为0A,0表示正数即B=+10;结果为+100。即实验结果是正确的。
END CASE;
ELSE FIRDATA<=0;SECDATA<=0;PRODATA<=0;
END IF;
MULTD<=FIRDATA;
MULT<=SECDATA;
PROUT<=PRODATA;
END PROCESS;
END ONE;
图4-3 INPUT波形仿真
在EN=1时,当ADDRESS为‘10’时输出被乘数,即MULTD=32;当ADDRESS为‘01’时,输出乘数,即MULT=53;当ADDRESS为‘11’时,输出结果,即PROUT=1696,即证明模块功能实现。
图2-7显示控制模块
此模块的组成:
图2-8显示控制模块的组成电路
2.2.6 输出数字与符号分离模块
这个模块是为了将第九位符号分离出来。
图2-9输出数字与符号分离模块
2.2.7 进制转换模块
这个模块是用来对结果进行二进制到十进制转换的,便于在显示数码管上显示。定义3个变量A1,A2,A3,并赋初值为0,从高到低判断输入的数据A(二进制)的各个位,首先是百位,若大于一百,则A3加1,EJZ减去100;然后是十位,若大于十,则A2加1,EJZ减去10;最后是个位,直接将EJZ剩余值赋给A1。依次将A1,A2,A3赋值给GOUT,SOUT,BOUT输出。
0
2
2.1 系统框图
图2-1系统框图
2.2 各单元电路设计
2.2.1 输入模块
这个模块是由CH,DH控制数据的输入,由SHUJU端输入数据,当CH,DH为0,0时输入被乘数,由输出端A输出;当按下“乘号键CH”即CH,DH为1,0时输入乘数,由输出端B输出;当RESET为0时输出端清零。
图2-2输入模块
其中VHDL作为一种面向设计的,多层次,多领域的标准硬件描述语言已经成为描述、验证和设计数字系统的最重要的标准语言之一,并得到众多EDA公司的支持。
VHDL可以对电子电路和系统的行为进行描述,结合相关的软件工具,可以得到所期望的实际电路与系统。VHDL主要是用于描述数字系统的结构、行为、功能和接口,但其行为描述能力更强。除了含有许多具有硬件的语句外,VHDL的语言形式和描述风格与语法是十分类似于一般的计算机高级语言。
ARCHITECTURE ONE OF INPUT IS
SIGNAL FIRDATA : INTEGER RANGE 0 TO 99;--被乘数
SIGNAL SECDATA : INTEGER RANGE 0 TO 99;--乘数
SIGNAL PRODATA : INTEGER RANGE 0 TO 9999;--积
图3-13实验箱调试现象
4
4.1 设计改进
由于这个设计的模块比较多,也比较繁琐,并且数值计算范围小,于是有了如下方案二:
设计一个由输入模块,运算选择模块,显示模块三部分组成的电路使其可以计算两个小于100数的乘积。
4.1.1 电路图:
图4-1顶层电路图
4.1.2 INPUT模块
图4-2 INPUT模块
波形分析:
在CLK=1时,当CH=DH=0时,输出A,图中A=12,所以shuchu=12;当CH=1,DH=0,输出B,图中B=6,所以shuchu=6;当CH=DH=1时,输出CJIN,图中CJIN=136,所以shuchu=136。
(6)输出数字与符号分离模块
图3-7输出数字与符号分离模块波形仿真
图2-12 seltime模块
2.2.10 led模块
这个模块的输入端s是数码管要显示的字符,输出端seg是其对应的编码。Led模块通过对S[3..0]的判断,对输出端A~H对数码管进行段选,使其显示对应的字符。
图2-13 led模块
2.2.11 灭点模块
图2-14灭点模块
2.3 总电路图设计
(8)消零模块
图3-9消零模块波形仿真
波形分析:
若百位是零且十位也是零则不显示十位和百位;若只有百位是零则只有百位不显示;若都为零则只有个位显示0。当分别输入数据230,046,001时,显示的结果为230,46,1。
(9)seltime模块
图3-10 seltime模块波形仿真
波形分析:
在时钟信号的下,sel输出端变化始终为‘0’~‘2’。这是因为sel的输出端连接实验箱74LS138,对数码管进行位选。在外接32768Hz时钟信号时,由于人眼的“视觉停留”,所以看起来数码管是同时显示的。对A[4..0],B[4..0]的高三位补0,使其凑成八位,并由sel来决定输出哪个片段。
在实际工作中,由于每个工程师对语言规则,电路行为的理解程度不同,编程风格不同,往往同样的系统功能,描述的方式是不一样的,综合出的电路结构更是大相径庭。因此,即使最后综合的电路都能实现相同的逻辑功能,其电路的复杂程度和时延特性也会有很大的差别。
1
1.1 设计任务
设计带符号乘法器并同时要求8个数码管显示,结果要用到的子模块非常多,通过用EDA软件的方式设计硬件,且其到硬件系统的转换是由有关的开发软件自动完成的。设计过程中可用有关软件进行各种仿真,整个系统可集成在一个芯片上,其体积小、功耗低、可靠性高。
E 1100
F× 0100
0000
0000
1100
0000
0110000
所以E×F=+0110000。
(4)数字与符号组合模块
图3-5数字与符号组合模块波形仿真
波形分析:
CJQ<’FHO’&Q,FHO=0,Q=10100010,所以CJQ=010100010。
(5)显示控制模块
图3-6显示控制模块波形仿真
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY INPUT IS
PORT( EN : IN STD_LOGIC;
ADDRESS : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--数据地址
Q3 Q2 Q1 Q0
↑
0
0
0
0
0
0
0
0
0
0
0
0
1
0
↑
0
0
0
0
0
0
0
0
0
0
1
0
0
0
↑
0
0
0
0
0
0
0
0
0
1
1
0
0
0
↑
0
0
0
0
0
0
0
1
0
0
0
0
0
0
↑
0
0
0
0
0
0
1
0
1
0
0
0
0
0
↑
0
0
0
0
0
1
1
0
0
0
0
0
0
0
↑
0
0
0
0
1
1
1
0
0
0
0
0
0
0
↑
0
0
1
0
0
0
0
0
0
0
0
0
0
0
↑
0
1
0
0
1
0
0
0
0
0
0
0
0
0
↑
0
0
0
1.2 设计要求
1.能实现两位带符号小于100的十进制数相乘;
2.通过拨码开关控制数值的输入,并用数码管显示;
3.当按下相乘键后,乘法器进行两个数的相乘运算,数码管将乘积显示出来。
1.3 编码器的真值表
表1-1编码器输出
数据开关电平信号
编码器输出
K1 K2 K3 K4 K5 K6 K7 K8 K9 K10
BEGIN
PROCESS(EN,ADDRESS,NUMIN,PRODATA)
BEGIN
IF EN='1' THEN
CASE ADDRESS IS
WHEN "10"=>FIRDATA <=CONV_INTEGER(NUMIN(7 DOWNTO 4))*10+CONV_INTEGER(NUMIN(3 DOWNTO 0));--被乘数
波形分析:
把数与符号分离,与组合过程相反。
(7)进制转换模块
图3-8进制转换模块波形仿真
波形分析:
图中A是输入数据A[7..0],A为二进制数,为查看方便,将其变为十进制数显示。在CLK=1的条件下,当A=159时,BOUT=1,SOUT=5,GOUT=9;当A=96时,BOUT=0,SOUT=9,GOUT=6,符合二进制到十进制的转换。
图2-15乘法器原理图
3
3.1 设计调试
3.1.1 管脚锁定
图3-1引脚图
3.1.2 各模块仿真波形图
(1)输入模块
图3-2输入模块波形仿真
波形分析:
开始A,B都置零,输入数据,在clk是上升沿的时候,CH=DH=0,输入A=10010;在CH=1,DH=0时,输入数B=01001。
(2)数字与符号分离模块
4.1.3 SEGSEL模块
图4-4 SEGSEL模块
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;--调用函数
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SEGSEL IS
图3-3数字与符号分离模块波形仿真
波形分析:
C为A中不带符号的部分,D为B中不带符号的部分。FH为A的符号异或B的符号。当A=01001,B=10100时,C=1001,D=0100,FH=1。
(3)乘法运算模块
图3-4乘法运算模块波形仿真
波形分析:
将被乘数E[3..0]与乘数F[3..0]输入,通过该模块实现乘法功能。乘数为Fi(i=3,2,1,0),被乘数为Ei(i=3,2,1,0)。用Fi分别与E相乘,不足位补零,最后相加。首先分析笔算乘法方法,设E=1100,F=0100,根据我们传统的计算乘法的方法,乘积符号为两数符号异或而得。其数值部分运算如下:
2.2.2 数字与符号分离模块
这个模块是由输入带符号数A[4..0],B[4..0],经过模块后,C[3..0]为A[3..0],D[3..0]为D[3..0],FH为A的符号与B的符号异或的结果。
图2-3数字与符号分离模块
2.2.3 乘法运算模块
乘法器的实现有两种方法,这里选择移位相加法。框图如下:
NUMIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
MULTD : OUT INTEGER RANGE 0 TO 99;--被乘数
MULT : OUT INTEGER RANGE 0 TO 99;--乘数
PROUT : OUT INTEGER RANGE 0 TO 9999);--积
WHEN "01"=>SECDATA <=CONV_INTEGER(NUMIN(7 DOWNTO 4))*10+CONV_INTEGER(NUMIN(3 DOWNTO 0));--乘数
WHEN "11" => PRODATA <=FIRDATA*SECDATA;
WHEN OTHERS =>NULL;
图2-4乘法器框图
模块图如下:
图2-5乘法运算模块
2.2.4 数字与符号组合模块
这个模块是在结果Q[7..0]前放置符号位,完成组合。
图2-6数字与符号组合模块
2.2.5 显示控制模块
这个模块是由AIN端接收要显示的二进制内容,输出转换成十进制后各位对应的数码管显示代码。此模块由六个子模块组成“输出数字与符号分离模块outsffl”,“进制转换模块zhuanhuan”,“消零模块xiaoling”,“符号位数码管显示模块”,“seltime模块”,“led模块”和“灭点模块”。
PORT( CLK : IN STD_LOGIC;
MULTD : IN INTEGER RANGE 0 TO 99;--强制转换被乘数
引言
二十世纪九十年代以来,电子设计自动化(EDA)技术得到了突飞猛进的发展,掌握电子设计自动化技术是新一代电子设计工程师从事电子技术开发和研究人员的必备技能,也是电子技术类专业学生学习的重要内容。
EDA技术即电子设计自动化技术,它是以可编程逻辑(PLD)为载体,以硬件描述语言(VHDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。
图2-10进制转换模块
2.2.8 消零模块
若百位为零且十位也为零,则不显示十位和百位;若只有百位为零则只有百位不显示;若都为零则只有个位显示零。
图2-11消零模块
2Байду номын сангаас2.9 seltime模块
在时钟周期的作用下,sel输出端变化始终为‘0’~‘2’。这是因为sel输出端连接实验箱74LS138,对数码管进行位选。
(10)led模块
图3-11 led模块波形仿真
波形分析:
输入端s是数码管要显示的字符,输出端seg是其对应的编码。例如,图中字符‘5’的编码是“7D”即二进制“01111101”,进而程序实现了模块的功能。
(11)顶层文件
图3-12顶层波形仿真
3.2 设计结果分析
首先设置时钟信号,当CH=DH=1时,拨动开关KD4到KD8,输入乘数A=01010,如图所示第三四位为0A,1表示负号即A=+10;当CH=1,DH=0时,输入B=01010,如图所示第一二位为0A,0表示正数即B=+10;结果为+100。即实验结果是正确的。
END CASE;
ELSE FIRDATA<=0;SECDATA<=0;PRODATA<=0;
END IF;
MULTD<=FIRDATA;
MULT<=SECDATA;
PROUT<=PRODATA;
END PROCESS;
END ONE;
图4-3 INPUT波形仿真
在EN=1时,当ADDRESS为‘10’时输出被乘数,即MULTD=32;当ADDRESS为‘01’时,输出乘数,即MULT=53;当ADDRESS为‘11’时,输出结果,即PROUT=1696,即证明模块功能实现。
图2-7显示控制模块
此模块的组成:
图2-8显示控制模块的组成电路
2.2.6 输出数字与符号分离模块
这个模块是为了将第九位符号分离出来。
图2-9输出数字与符号分离模块
2.2.7 进制转换模块
这个模块是用来对结果进行二进制到十进制转换的,便于在显示数码管上显示。定义3个变量A1,A2,A3,并赋初值为0,从高到低判断输入的数据A(二进制)的各个位,首先是百位,若大于一百,则A3加1,EJZ减去100;然后是十位,若大于十,则A2加1,EJZ减去10;最后是个位,直接将EJZ剩余值赋给A1。依次将A1,A2,A3赋值给GOUT,SOUT,BOUT输出。
0
2
2.1 系统框图
图2-1系统框图
2.2 各单元电路设计
2.2.1 输入模块
这个模块是由CH,DH控制数据的输入,由SHUJU端输入数据,当CH,DH为0,0时输入被乘数,由输出端A输出;当按下“乘号键CH”即CH,DH为1,0时输入乘数,由输出端B输出;当RESET为0时输出端清零。
图2-2输入模块
其中VHDL作为一种面向设计的,多层次,多领域的标准硬件描述语言已经成为描述、验证和设计数字系统的最重要的标准语言之一,并得到众多EDA公司的支持。
VHDL可以对电子电路和系统的行为进行描述,结合相关的软件工具,可以得到所期望的实际电路与系统。VHDL主要是用于描述数字系统的结构、行为、功能和接口,但其行为描述能力更强。除了含有许多具有硬件的语句外,VHDL的语言形式和描述风格与语法是十分类似于一般的计算机高级语言。