哈尔滨工业大学(威海)信息科学与工程学院EDA课程设计报告有符号5位整数乘法器设计与制作指导老师:胡屏学生班级:0802102学生姓名:傅愉学生学号:0802102102009年11月10日目录1.课程设计的性质、目的和任务 (1)2.题目要求 (1)3.总体设计 (1)3.1算法设计 (1)3.2整体框图及原理 (2)4.电路设计 (4)4.1 乘法器总体电路原理图: (4)4.2分时输入模块电路图: ........................................................... - 5 -4.3乘法运算电路图: (6)4.4阀门控制模块电路: ............................................................... - 9 -4.5计数单元电路图: ................................................................. - 12 -4.6数码管显示单元电路: ......................................................... - 14 -4.7报警电路示意: ......................................... 错误!未定义书签。
5.调试过程中出现的问题以及解决办法 .......................................... - 19 -6.心得体会........................................................................................... - 20 -7.建议:............................................................................................... - 21 -1.课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。
这是由乘数被乘数移位寄存 移位寄存相乘逻辑累加器结果寄存时钟于创新基于实践、源于实践,实践出真知,实践检验真理。
实践活动是创新的源泉,也是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。
2.题目要求设计一个两个5位数相乘的乘法器。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次输入。
在输入乘数和被乘数时,要求显示十进制输入数据。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能。
3.总体设计3.1算法设计图:乘法器对应的方框图两个带符号的五位数相乘,首先将符号位与数值位分离,最终结果的符号位由两个数的符号位经过异或操作后得到,乘法运算采用移位相加的原理来实现。
移位相加原理:从乘数的最低位开始,若为1,则将被乘数右端与乘数右端对齐写在下面;若为0,则将与被乘数同样位数的0写在下面。
然后进行乘数的次低位,若为1,则被乘数左移一位后与上一次的结果相加;若为0,则左移一位后以全0相加。
以此类推,每次若乘数相应位为1,则被乘数左移一位与前次和相加;若乘数相应位为0,则左移一位以全0与前次和相加。
相乘结果用十进制数表示。
3.2整体框图及原理图:整体设计框图乘法计算:使用者通过按键输入二进制5位有符号的乘数与被乘数,并将乘数与被乘数分别用十进制显示,经过乘法器运算,显示十进制结果,完成与计算器近似的简单乘法运算;下面是部分模块的功能介绍:分时输入:在控制端EA,EB和CLK的控制下,依次输入乘数与被乘数,且在输入被乘数后,按下定义的乘号键,可保持所显示的被乘数不变,改变数值,输入乘数,显示数值为乘数。
分时显示控制:在控制端EA,EB和CLK的控制下,实现对被乘数,乘数以及运算结果的分时显示。
4.电路设计4.1 乘法器总体电路原理图:MAX+PLUS II中的电路原理图4.2分时输入模块电路图:分时输入电路图VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY INPUT1 ISPORT(EA,EB,CLK:IN STD_LOGIC;I:IN STD_LOGIC_VECTOR(4 DOWNTO 0);A,B:OUT STD_LOGIC_VECTOR(4 DOWNTO 0));END INPUT1;ARCHITECTURE behave OF INPUT1 ISBEGINPROCESS(EA,EB,I,CLK)BEGINIF CLK'EVENT AND CLK='1' THENIF EA='1' THENA<=I;ELSE NULL;END IF;IF EB='1' THENB<=I;ELSE NULL;END IF;END IF;END PROCESS;END behave;功能仿真,结束时间为200ns;MAX+PLUS II 中的功能仿真图4.3乘法运算电路图:MAX+PLUS II 中的电路图VHDL 程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUL5X5 ISPORT(A0:IN STD_LOGIC_VECTOR(4 DOWNTO 0);B0:IN STD_LOGIC_VECTOR(4 DOWNTO 0);QQ:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END ENTITY MUL5X5;ARCHITECTURE BEHA VE OF MUL5X5 ISCOMPONENT FHFL ISPORT(A,B:IN STD_LOGIC_VECTOR(4 DOWNTO 0);FH:OUT STD_LOGIC;C,D:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT;COMPONENT MUL ISPORT(X,Y:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT ZH ISPORT(Q:IN STD_LOGIC_VECTOR(7 DOWNTO 0);F:IN STD_LOGIC;FQ:OUT STD_LOGIC_VECTOR(8 DOWNTO 0)); END COMPONENT;SIGNAL C1,D1:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FHW:STD_LOGIC;SIGNAL OUT1:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINU1:FHFL PORT MAP(A=>A0,B=>B0,C=>C1,D=>D1,FH=>FHW); U2:MUL PORT MAP(X=>C1,Y=>D1,Q=>OUT1);U3:ZH PORT MAP(Q=>OUT1,F=>FHW,FQ=>QQ);END ARCHITECTURE BEHA VE;本模块为该程序的中心模块,进行乘法运算,采用元件例化的方式,将三个模块组合在一起,这三个模块包括“符号与数字分离模块”,“乘法运算模块”及运算结果“符号与数组重组模块”。
下面分别介绍以上三个模块:4.3.1符号与数字分离电路图MAX+PLUS II 中的电路图VHDL语言程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FHFL ISPORT(A,B:IN STD_LOGIC_VECTOR(4 DOWNTO 0);FH:OUT STD_LOGIC;C,D:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END FHFL;ARCHITECTURE behave OF FHFL ISBEGINPROCESSBEGINC<=A(3 DOWNTO 0);D<=B(3 DOWNTO 0);FH<=A(4) XOR B(4);END PROCESS;END behave;功能仿真图如下:MAX+PLUS II 中时序仿真图4.3.2 乘法运算电路图MAX+PLUS II 中的电路图VHDL语言程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MUL ISPORT(A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END MUL;ARCHITECTURE behave 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); SIGNAL BB0:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL BB1:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL BB2:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL BB3:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESSBEGINBB0<=B(0)&B(0)&B(0)&B(0);BB1<=B(1)&B(1)&B(1)&B(1);BB2<=B(2)&B(2)&B(2)&B(2);BB3<=B(3)&B(3)&B(3)&B(3);Q1<=A AND BB0;Q2<=(A AND BB1)&"0";Q3<=(A AND BB2)&"00";Q4<=(A AND BB3)&"000";Q<=Q1+Q2+Q3+Q4;END PROCESS;END behave;功能仿真图如下MAX+PLUS II 中时序仿真图4.3.3符号与数据重组电路图MAX+PLUS II 中的电路图VHDL语言程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ZH ISPORT(Q:IN STD_LOGIC_VECTOR(7 DOWNTO 0);F:IN STD_LOGIC;FQ:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END ZH;ARCHITECTURE behave OF ZH ISBEGINFQ<=F & Q;END behave;功能仿真图如下MAX+PLUS II 中时序仿真图4.4分时显示控制电路图:MAX+PLUS II 中的电路图VHDL 程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FSXS ISPORT(EA:IN STD_LOGIC;EB:IN STD_LOGIC;CLK:IN STD_LOGIC;AIN:IN STD_LOGIC_VECTOR(4 DOWNTO 0);BIN:IN STD_LOGIC_VECTOR(4 DOWNTO 0);QIN:IN STD_LOGIC_VECTOR(8 DOWNTO 0);QQOUT:OUT STD_LOGIC_VECTOR(8 DOWNTO 0)); END FSXS;ARCHITECTURE BEHA VE OF FSXS ISBEGINPROCESS(EA,EB,CLK)BEGINIF(CLK'EVENT AND CLK='1')THENIF(EA='1')THENQQOUT<=AIN(4)&"0000"&AIN(3 DOWNTO 0);ELSIF(EB='1'AND EA='0')THENQQOUT<=BIN(4)&"0000"&BIN(3 DOWNTO 0);ELSEQQOUT<=QIN;END IF;END IF;END PROCESS;END BEHA VE;功能仿真图如下:MAX+PLUS II 中时序仿真图4.5输出显示电路图:MAX+PLUS II 中的电路图MAX+PLUS II 中的结构图本模块为输出显示,将二进制转换为十进制,用数码管显示,由四部分组成,分别为“输出的数符分离”,“进制转换”,“消‘0’处理”和“数码管显示”,下面进行分别介绍:4.5.1输出数符分离MAX+PLUS II 中的电路图VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY OUTFL ISPORT(AIN:IN STD_LOGIC_VECTOR(8 DOWNTO 0);FOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);QOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END OUTFL;ARCHITECTURE BEHA VE OF OUTFL ISSIGNAL B:STD_LOGIC;BEGINB<=AIN(8);PROCESS(B)BEGINCASE B ISWHEN'0'=>FOUT<="0000";WHEN'1'=>FOUT<="0001";WHEN OTHERS=>FOUT<=NULL;END CASE;END PROCESS;QOUT<=AIN(7 DOWNTO 0);END BEHA VE;功能仿真结果如下:MAX+PLUS II 中时序仿真图4.5.2 进制转换MAX+PLUS II 中的电路图VHDL程序代码如下:module ets(clk,a,bout,sout,gout);input clk;input[7:0] a;output[3:0] bout,sout,gout;reg[3:0] A1,A2,A3,bout,sout,gout;reg[7:0] aa;reg[2:0] num;always@(posedge clk)begincase(num)0:beginaa[7:0]<=a;num<=1;A1<=0;A2<=0;A3<=0;end1:beginif(aa>=100)beginA3<=A3+1;aa<=aa-100;endelse if((aa>=10)&&(aa<100))beginA2<=A2+1;aa<=aa-10;endelse if((aa>=1)&&(aa<10))beginA1<=aa;aa<=0;endelsebeginnum<=2;endend2:begingout<=A1;sout<=A2;bout<=A3;num<=0;enddefault:num<=0;endcaseendendmodule功能仿真结果如下:MAX+PLUS II 中时序仿真图4.5.3消“0”处理MAX+PLUS II 中的电路图VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY PD 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 PD;ARCHITECTURE BEHA VE OF PD ISBEGINPROCESS(B,S,G)BEGINIF(B="0000")THENIF(S="0000")THENIF(G="0000")THENBOUT<="1010";SOUT<="1010";GOUT<="1010";ELSEBOUT<="1010";SOUT<="1010";GOUT<=G;END IF;ELSEBOUT<="1010";SOUT<=S;GOUT<=G;END IF;ELSEBOUT<=B;SOUT<=S;GOUT<=G;END IF;END PROCESS;END BEHA VE;功能仿真结果如下:MAX+PLUS II 中时序仿真图4.5.4 数码管显示4.5.4.1符号位数码管显示MAX+PLUS II 中的电路图VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY bcd_seg ISPORT(BCD_F:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LEDSEGF:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END bcd_seg;ARCHITECTURE BEHA VE OF bcd_seg ISBEGINPROCESS(BCD_F)BEGINCASE BCD_F ISWHEN"0000"=>LEDSEGF<="1111111";WHEN"0001"=>LEDSEGF<="0111111";WHEN OTHERS=>LEDSEGF<="0000000";END CASE;END PROCESS;END BEHA VE;功能仿真结果如下:MAX+PLUS II 中时序仿真图4.5.4.1符号位数码管显示MAX+PLUS II 中的电路图VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY bcd_7seg ISPORT(BCD_LED:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LEDSEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END bcd_7seg;ARCHITECTURE BEHA VE OF bcd_7seg ISBEGINPROCESS(BCD_LED)BEGINCASE BCD_LED ISWHEN"0000"=>LEDSEG<="1000000";WHEN"0001"=>LEDSEG<="1111001";WHEN"0010"=>LEDSEG<="0100100";WHEN"0011"=>LEDSEG<="0110000";WHEN"0100"=>LEDSEG<="0011001";WHEN"0101"=>LEDSEG<="0010010";WHEN"0110"=>LEDSEG<="0000010";WHEN"0111"=>LEDSEG<="1011000";WHEN"1000"=>LEDSEG<="0000000";WHEN"1001"=>LEDSEG<="0010000";WHEN OTHERS=>LEDSEG<="1111111";END CASE;END PROCESS;END BEHA VE;功能仿真结果如下:MAX+PLUS II 中时序仿真图4.6灭“点”电路:MAX+PLUS II 中的电路图本模块功能:使数码管的“点”在整数运算中不显示。