1、 目 录引言11 设计任务及设计要求11.1 设计任务11.2 设计要求21.3 编码器的真值表22 设计总体思路22.1 系统框图22.2 各单元电路设计32.2.1 输入模块32.2.2 数字与符号分离模块32.2.3 乘法运算模块42.2.4 数字与符号组合模块42.2.5 显示控制模块52.2.6 输出数字与符号分离模块52.2.7 进制转换模块62.2.8 消零模块62.2.9 seltime模块72.2.10 led模块72.2.11 灭点模块72.3 总电路图设计83 设计调试与分析83.1 设计调试83.1.1 管脚锁定83.1.2 各模块仿真波形图93.2 设计结果分析134
2、 设计改进及总结144.1 设计改进144.1.1 电路图:144.1.2 INPUT模块154.1.3 SEGSEL模块164.1.4 DELED模块184.1.5 电路图194.1.6 仿真波形图194.1.7 实验箱调试204.2 设计总结20参考文献21附录:程序部分221 输入模块222 数字与符号分离模块223 乘法运算模块234 数字与符号组合模块245 显示控制模块246 输出数字与符号分离模块257 进制转换模块258 消零模块279 seltime模块2810 led模块29乘法器设计引言二十世纪九十年代以来,电子设计自动化(EDA)技术得到了突飞猛进的发展,掌握电子设计自
3、动化技术是新一代电子设计工程师从事电子技术开发和研究人员的必备技能,也是电子技术类专业学生学习的重要内容。EDA技术即电子设计自动化技术,它是以可编程逻辑(PLD)为载体,以硬件描述语言(VHDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。其中VHDL作为一种面向设计的,多层次,多领域的标准硬件描述语言已经成为描述、验证和设计数字系统的最重要的标准语言之一,并得到众多EDA公司的支持。VHDL可以对电子电路和系统的行为进行描述,结合相关的软件工具,可以得到所期望的实际电路与系统。VHDL主要是用于描述数字系统的结构、行为、功能和接口,但其行为描述能力更强。除了含有许多具有硬
4、件的语句外,VHDL的语言形式和描述风格与语法是十分类似于一般的计算机高级语言。在实际工作中,由于每个工程师对语言规则,电路行为的理解程度不同,编程风格不同,往往同样的系统功能,描述的方式是不一样的,综合出的电路结构更是大相径庭。因此,即使最后综合的电路都能实现相同的逻辑功能,其电路的复杂程度和时延特性也会有很大的差别。1 设计任务及设计要求1.1 设计任务设计带符号乘法器并同时要求8个数码管显示,结果要用到的子模块非常多,通过用EDA软件的方式设计硬件,且其到硬件系统的转换是由有关的开发软件自动完成的。设计过程中可用有关软件进行各种仿真,整个系统可集成在一个芯片上,其体积小、功耗低、可靠性高
5、。1.2 设计要求1.能实现两位带符号小于100的十进制数相乘;2.通过拨码开关控制数值的输入,并用数码管显示;3.当按下相乘键后,乘法器进行两个数的相乘运算,数码管将乘积显示出来。1.3 编码器的真值表表1-1 编码器输出 数据开关电平信号 编码器输出K1 K2 K3 K4 K5 K6 K7 K8 K9 K10Q3 Q2 Q1 Q000000000000010000000000010000000000001100000000001000000000000101000000000011000000000001110000000001000000000000100100000000000002
6、设计总体思路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 输入模块2.2.2 数字与符号分离模块这个模块是由输入带符号数A4.0,B4.0,经过模块后,C3.0为A3.0,D3.0为D3.0,FH为A的符号与B的符号异或的结果。图2-3 数字与符号分离模块2.2.3 乘法运算模块乘法器的实现有两种方法,这里选择移位相加法。框图如下:图2-4 乘法器
7、框图模块图如下:图2-5 乘法运算模块2.2.4 数字与符号组合模块这个模块是在结果Q7.0前放置符号位,完成组合。图2-6 数字与符号组合模块2.2.5 显示控制模块这个模块是由AIN端接收要显示的二进制内容,输出转换成十进制后各位对应的数码管显示代码。此模块由六个子模块组成“输出数字与符号分离模块outsffl”,“进制转换模块zhuanhuan”,“消零模块xiaoling”,“符号位数码管显示模块”,“seltime模块”,“led模块”和“灭点模块”。图2-7 显示控制模块此模块的组成:图2-8 显示控制模块的组成电路2.2.6 输出数字与符号分离模块这个模块是为了将第九位符号分离出
8、来。图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输出。图2-10 进制转换模块2.2.8 消零模块若百位为零且十位也为零,则不显示十位和百位;若只有百位为零则只有百位不显示;若都为零则只有个位显示零。图2-11 消零模块2.2.9
9、 seltime模块在时钟周期的作用下,sel输出端变化始终为02。这是因为sel输出端连接实验箱74LS138,对数码管进行位选。图2-12 seltime模块2.2.10 led模块这个模块的输入端s是数码管要显示的字符,输出端seg是其对应的编码。Led模块通过对S3.0的判断,对输出端AH对数码管进行段选,使其显示对应的字符。图2-13 led模块2.2.11 灭点模块图2-14 灭点模块2.3 总电路图设计图2-15 乘法器原理图3 设计调试与分析3.1 设计调试3.1.1 管脚锁定图3-1 引脚图3.1.2 各模块仿真波形图(1)输入模块图3-2 输入模块波形仿真波形分析:开始A,
10、B都置零,输入数据,在clk是上升沿的时候,CH=DH=0,输入A=10010;在CH=1,DH=0时,输入数B=01001。(2)数字与符号分离模块 图3-3 数字与符号分离模块波形仿真波形分析:C为A中不带符号的部分,D为B中不带符号的部分。FH为A的符号异或B的符号。当A=01001,B=10100时,C=1001,D=0100,FH=1。(3)乘法运算模块图3-4 乘法运算模块波形仿真波形分析:将被乘数E3.0与乘数F3.0输入,通过该模块实现乘法功能。乘数为Fi(i=3,2,1,0),被乘数为Ei(i=3,2,1,0)。用Fi分别与E相乘,不足位补零,最后相加。首先分析笔算乘法方法,
11、设E=1100,F=0100,根据我们传统的计算乘法的方法,乘积符号为两数符号异或而得。其数值部分运算如下:E 1100F 0100 0000 0000 1100 0000 0110000所以EF=+0110000。(4)数字与符号组合模块图3-5 数字与符号组合模块波形仿真波形分析:CJQFIRDATA SECDATA PRODATA NULL;END CASE;ELSE FIRDATA=0;SECDATA=0;PRODATA=0;END IF;MULTD=FIRDATA;MULT=SECDATA;PROUT=PRODATA;END PROCESS;END ONE;图4-3 INPUT波形仿
12、真在EN=1时,当ADDRESS为10时输出被乘数,即MULTD=32;当ADDRESS为01时,输出乘数,即MULT=53;当ADDRESS为11时,输出结果,即PROUT=1696,即证明模块功能实现。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 ISPORT( CLK : IN STD_LOGIC; MULTD : IN INTEG
13、ER RANGE 0 TO 99;-强制转换被乘数 MULT : IN INTEGER RANGE 0 TO 99;- 强制转换乘数 PRIN : IN INTEGER RANGE 0 TO 9999;- 强制转换积 DOUT : OUT INTEGER RANGE 0 TO 9; SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END SEGSEL;ARCHITECTURE ONE OF SEGSEL ISSIGNAL SEC : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(CLK) BEGIN IF(CLKEVENT A
14、ND CLK=1) THEN IF(SEC=111) THEN SEC=000; ELSE SEC DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT NULL; END CASE;END PROCESS;SELDOUTDOUT=MULTD-MULTD/10*10,可知sel=71-71/10*10=1,该模块功能实现。4.1.4 DELED模块图4-6 DELED模块程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DELED ISPORT( DAIN : IN INTEGER RANGE 0 TO 10;
15、DAOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END DELED;ARCHITECTURE ONE OF DELED ISSIGNAL DATA : INTEGER RANGE 0 TO 10;SIGNAL DOUT : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINDATA DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT DOUT=00000000;END CASE;END PROCESS;DAOUTDOUT=”01101101”知DOUT应为01101101,即仿真结果是正确的。4.
16、1.5 电路图图4-8 引脚锁定电路图4.1.6 仿真波形图图4-9 波形仿真4.1.7 实验箱调试图4-10 实验箱调试现象输入两数48和52便可得到结果2496。4.2 设计总结EDA最初对我们来说还是挺陌生的,在上机实验过几次后,慢慢地对Quartus软件部分功能有所了解了,最初是通过输入原理图来进行设计和仿真的,原理图的输入不那么复杂,所以实验也比较快就结束了。后来自从学了VHDL语言后,我们就开始通过输入VHDL语言来进行设计和仿真了。VHDL语言主要包括库文件、实体和结构体三部分。实体描述了电路器件的外部情况及各信号端口的基本性质;结构体负责电路器件的内部逻辑功能或电路结构。由于实
17、验课上有做过关于加法器的实验,觉着乘法器应该是跟它有关联的,可能会比较简单,所以在选题时便选择了乘法器的设计。可以说EDA这门课学得不够踏实吧,所以即使是简单的乘法器的设计也花了很久的时间才完成。参考文献1 黄任.VHDL入门解惑经典实例经验总结.北京:北京航空航天大学出版社,2005.2 黄仁欣.EDA技术实用教程.北京:清华大学出版社,2006.3 潘松,黄继业.EDA技术实用教程.北京:科学出版社,2005.附录:程序部分1 输入模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE
18、.STD_LOGIC_UNSIGNED.ALL;ENTITY shuru ISPORT(CH,DH,RESET,CLK:IN STD_LOGIC;shuju:IN STD_LOGIC_VECTOR(4 DOWNTO 0);A,B:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END shuru;ARCHITECTURE behave OF shuru ISBEGINPROCESS(CH,DH,shuju,RESET,CLK)BEGINIF CLKEVENT AND CLK=1 THENIF RESET=1 THENA=00000;B=00000;ELSEIF CH=0 AN
19、D DH=0 THENA=shuju;ELSIF CH=1 AND DH=0 THENB=shuju;ELSE NULL;END IF;END IF;END IF;END PROCESS;END behave;2 数字与符号分离模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sffl ISPORT(A,B:IN STD_LOGIC_VECTOR(4 DOWNTO 0);FH:OUT STD_LOGIC;C,D:OUT ST
20、D_LOGIC_VECTOR(3 DOWNTO 0);END sffl;ARCHITECTURE behave OF sffl ISBEGINC=A(3 DOWNTO 0);D=B(3 DOWNTO 0);FH=A(4) XOR B(4);END behave;3 乘法运算模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mul ISPORT(E,F:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT
21、 STD_LOGIC_VECTOR(7 DOWNTO 0);END mul;ARCHITECTURE A OF mul ISSIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL Q2:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL Q3:STD_LOGIC_VECTOR(5 DOWNTO 0);SIGNAL Q4:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINPROCESS(E,F,Q1,Q2,Q3,Q4)BEGINIF F(0)=1THEN Q1=E;ELSE Q1=0000;end if;IF F(1)=1
22、THEN Q2=(E & 0);ELSE Q2=00000;end if;IF F(2)=1THEN Q3=(E & 00);ELSE Q3=000000;end if;IF F(3)=1THEN Q4=(E & 000);ELSE Q4=0000000;end if;Q =Q1+Q2+Q3+(0&Q4);END PROCESS;END A;4 数字与符号组合模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sfcz ISP
23、ORT(Q:IN STD_LOGIC_VECTOR(7 DOWNTO 0);FHO:IN STD_LOGIC;CJO:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);END sfcz;ARCHITECTURE behave OF sfcz ISBEGINCJO=FHO & Q;END behave;5 显示控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xskz ISPORT(CH:IN STD_LOGIC;DH:IN STD_LOGIC;CLK:IN STD_LOGIC;AIN:IN STD_LOGIC_VECTOR(
24、4 DOWNTO 0);BIN:IN STD_LOGIC_VECTOR(4 DOWNTO 0);CJIN:IN STD_LOGIC_VECTOR(8 DOWNTO 0);shuchu:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);END xskz;ARCHITECTURE behave OF xskz ISBEGINPROCESS(CH,DH,CLK)BEGINIF(CLKEVENT AND CLK=1)THENIF(CH=0 AND DH=0)THENshuchu=AIN(4)&0000&AIN(3 DOWNTO 0);ELSIF(CH=1 AND DH=0)THENsh
25、uchu=BIN(4)&0000&BIN(3 DOWNTO 0);ELSEshuchu=CJIN;END IF;END IF;END PROCESS;END BEHAVE;6 输出数字与符号分离模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY outsffl ISPORT(AIN:IN STD_LOGIC_VECTOR(8 DOWNTO 0);fhout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);shujuout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END outsffl;ARCHITECT
26、URE behave OF outsffl ISSIGNAL B:STD_LOGIC;BEGINBfhoutfhoutfhout=NULL;END CASE;END PROCESS;shujuout=100 THENaa:=aa-100;A3:=A3+1;ELSIF(aa=10)THENaa:=aa-10;A2:=A2+1;ELSIF(aa10) THEN A1:=aa(3 DOWNTO 0);I:=2;END IF;ELSIF I=2 THENbout=A3;sout=A2;gout=A1;I:=0;END IF;END IF;END PROCESS;END behav;8 消零模块LIBR
27、ARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xiaoling ISPORT(B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S:IN STD_LOGIC_VECTOR(3 DOWNTO 0);G:IN STD_LOGIC_VECTOR(3 DOWNTO 0);BOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);SOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);GOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END xiaoling;ARCHITECTUR
28、E behave OF xiaoling ISBEGINPROCESS(B,S,G)BEGINIF(B=0000)THENIF(S=0000)THENIF(G=0000)THENBOUT=0000;SOUT=0000;GOUT=0000;ELSEBOUT=0000;SOUT=0000;GOUT=G;END IF;ELSEBOUT=0000;SOUT=S;GOUT=G;END IF;ELSEBOUT=B;SOUT=S;GOUT=G;END IF;END PROCESS;END behave;9 seltime模块library ieee;use ieee.std_logic_1164.all;u
29、se ieee.std_logic_unsigned.all;entity seltime isport(clk : in std_logic;A : in std_logic_vector(4 downto 0);B : in std_logic_vector(4 downto 0);FOUT : in std_logic_vector(3 downto 0);BOUT : in std_logic_vector(3 downto 0);SOUT : in std_logic_vector(3 downto 0);GOUT : in std_logic_vector(3 downto 0);
30、Daout : out std_logic_vector(3 downto 0);sel : out std_logic_vector(2 downto 0);end seltime;architecture behav of seltime issignal sec : std_logic_vector(2 downto 0);signal AA : std_logic_vector(7 downto 0);signal BB : std_logic_vector(7 downto 0);beginprocess(clk)beginif(clkevent and clk=1) thenif(sec=111) thensec=000;AA=000&A;BB=000&B;elsesec=sec+1;end if;end if;end process;process(sec,FOUT,BOUT,SOUT,G