有符号5位整数乘法器设计与制作1.课程设计的性质、目的和任务 (1)2.题目要求 (1)3.设计步骤 (2)3.1整体原理框图: (2)3.2乘法器整体电路原理图: (2)3.3输入模块: (2)3.4运算模块: (3)3.5显示控制模块: (6)3.6显示模块: (7)4.整体仿真 (12)5.调试中遇到的问题及解决的方法 ........................................ 错误!未定义书签。
6.心得体会................................................................................... 错误!未定义书签。
7.建议:....................................................................................... 错误!未定义书签。
1.课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。
这是由于创新基于实践、源于实践,实践出真知,实践检验真理。
实践活动是创新的源泉,也是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。
2.题目要求设计一个两个5位数相乘的乘法器。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次输入。
在输入乘数和被乘数时,要求显示十进制输入数据。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能3.设计步骤3.1整体原理框图:3.2乘法器整体电路原理图:3.3输入模块:模块说明:由 CH,DH控制数据的输入,由SHUJU端输入数据,当CH,DH为0,0时输入被乘数,由输出端A输出,当按下“乘号键CH”即CH,DH为1,0时输入乘数,由输出端B输出,当RESET为0时输出端清零。
VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.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 CLK'EVENT AND CLK='1' THENIF RESET='1' THENA<="00000";B<="00000";ELSEIF CH='0' AND DH='0' THENA<=shuju;ELSIF CH='1' AND DH='0' THENB<=shuju;ELSE NULL;END IF;END IF;END IF;END PROCESS;END behave;3.4运算模块:模块说明:分别由AO和BO端接收被乘数和乘数,由CJ端输出带符号位的二进制乘积结果。
此模块由三个子模块组成:“数字与符号分离子模块”,“乘法运算子模块”及“数字与符号重组子模块”。
VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY yunsuan ISPORT(A0:IN STD_LOGIC_VECTOR(4 DOWNTO 0);B0:IN STD_LOGIC_VECTOR(4 DOWNTO 0);CJ:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END yunsuan;ARCHITECTURE BEHAVE OF yunsuan ISCOMPONENT sfflPORT(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 MULPORT(E,F:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;COMPONENT sfczPORT(Q:IN STD_LOGIC_VECTOR(7 DOWNTO 0);FHO:IN STD_LOGIC;CJO: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:sffl PORT MAP(A=>A0,B=>B0,C=>C1,D=>D1,FH=>FHW); U2:MUL PORT MAP(E=>C1,F=>D1,Q=>OUT1);U3:sfcz PORT MAP(Q=>OUT1,FHO=>FHW,CJO=>CJ);END BEHAVE;数字与符号分离子模块:程序代码如下: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 STD_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;乘法运算子模块:程序代码如下: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 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 FF0:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FF1:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FF2:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FF3:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINFF0<=F(0)&F(0)&F(0)&F(0);FF1<=F(1)&F(1)&F(1)&F(1);FF2<=F(2)&F(2)&F(2)&F(2);FF3<=F(3)&F(3)&F(3)&F(3);Q1<=E AND FF0;Q2<=(E AND FF1)&"0";Q3<=(E AND FF2)&"00";Q4<=(E AND FF3)&"000";Q<=Q1+Q2+Q3+Q4;END behave;数字与符号重组子模块:程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sfcz ISPORT(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;3.5显示控制模块:模块说明:当CH,DH为0,0时显示被乘数,当按下“乘号键CH”即CH,DH为1,0时显示乘数,当按下“等号键DH”即CH,DH为1,1时显示乘积。
VHDL程序代码如下: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(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(CLK'EVENT AND CLK='1')THENIF(CH='0' AND DH='0')THENshuchu<=AIN(4)&"0000"&AIN(3 DOWNTO 0);ELSIF(CH='1' AND DH='0')THENshuchu<=BIN(4)&"0000"&BIN(3 DOWNTO 0);ELSEshuchu<=CJIN;END IF;END IF;END PROCESS;END BEHAVE;3.6显示模块:模块说明:由AIN端接收要显示的二进制内容,输出转换成十进制后各位对应的数码管显示代码。