有符号5位整数乘法器设计与制作

玛丽莲梦兔
928次浏览
2020年08月03日 18:44
最佳经验
本文由作者推荐

拥有阳光-办公用房清理自查报告




哈尔滨工业大学(威海)
信息科学与工程学院




EDA课程设计报告

有符号5位整数乘法器设计与制作








指导老师:胡屏
学生班级:0802102
学生姓名:傅愉
学生学号:080210210




2009年11月10日



- 1 -


目录



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 -


于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动
是创新的源泉,也 是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步
的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题
的能力,培养学生的创新精神。
2.题目要求
设计一个两个5位数相乘的乘法器。用发光二极管显示输入数值,
用7段显示器显示十进制结果。乘数和被乘数分两次输入。在输入乘
数和被乘数时,要求显示十进制输 入数据。输入显示和计算结果显示,
采用分时显示方式进行,可参见计算器的显示功能。
3.总体设计

3.1算法设计































图:乘法器对应的方框图
两个带符号的五位数相乘,首先 将符号位与数值位分离,最终结
果的符号位由两个数的符号位经过异或操作后得到,乘法运算采用移位相加的原理来实现。

- 3 -


移位相加原理:从乘数的 最低位开始,若为1,则将被乘数右端与
乘数右端对齐写在下面;若为0,则将与被乘数同样位数的0写 在下面。
然后进行乘数的次低位,若为1,则被乘数左移一位后与上一次的结
果相加;若为0, 则左移一位后以全0相加。以此类推,每次若乘数相
应位为1,则被乘数左移一位与前次和相加;若乘数 相应位为0,则左
移一位以全0与前次和相加。相乘结果用十进制数表示。
3.2整体框图及原理



图:整体设计框图

乘法计算:
使用者通过按键输入二进制5位有符号的乘数与被乘数,并将乘数
与被乘 数分别用十进制显示,经过乘法器运算,显示十进制结果,完

- 4 -


成与计算器近似的简单乘法运算;
下面是部分模块的功能介绍:
分 时输入:在控制端EA,EB和CLK的控制下,依次输入乘数与被乘
数,且在输入被乘数后,按下定义 的乘号键,可保持所显示的被乘数
不变,改变数值,输入乘数,显示数值为乘数。
分时显示控 制:在控制端EA,EB和CLK的控制下,实现对被乘数,
乘数以及运算结果的分时显示。
4.电路设计
4.1 乘法器总体电路原理图:

MAX+PLUS II中的电路原理图
4.2分时输入模块电路图:


- 5 -


分时输入电路图

VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY INPUT1 IS
PORT(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 IS
BEGIN
PROCESS(EA,EB,I,CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF EA='1' THEN
A<=I;
ELSE NULL;
END IF;
IF EB='1' THEN
B<=I;
ELSE NULL;
END IF;
END IF;
END PROCESS;
END behave;
功能仿真,结束时间为200ns;

MAX+PLUS II 中的功能仿真图

- 6 -


4.3乘法运算电路图:

MAX+PLUS II 中的电路图

VHDL 程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;

ENTITY MUL5X5 IS
PORT(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 BEHAVE OF MUL5X5 IS
COMPONENT FHFL IS
PORT(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 IS
PORT(X,Y:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT ZH IS
PORT(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);
BEGIN
U1: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);

- 7 -


END ARCHITECTURE BEHAVE;

本 模块为该程序的中心模块,进行乘法运算,采用元件例化的方式,
将三个模块组合在一起,这三个模块包 括“符号与数字分离模块”,
“乘法运算模块”及运算结果“符号与数组重组模块”。
下面分别介绍以上三个模块:
4.3.1符号与数字分离电路图

MAX+PLUS II 中的电路图
VHDL语言程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY FHFL IS
PORT(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 IS
BEGIN
PROCESS
BEGIN
C<=A(3 DOWNTO 0);
D<=B(3 DOWNTO 0);
FH<=A(4) XOR B(4);
END PROCESS;
END behave;
功能仿真图如下:

- 8 -



MAX+PLUS II 中时序仿真图
4.3.2 乘法运算电路图

MAX+PLUS II 中的电路图
VHDL语言程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY MUL IS
PORT(A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END MUL;

ARCHITECTURE behave OF MUL IS
SIGNAL 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);
BEGIN
PROCESS
BEGIN
BB0<=B(0)&B(0)&B(0)&B(0);
BB1<=B(1)&B(1)&B(1)&B(1);

- 9 -


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)&
Q3<=(A AND BB2)&
Q4<=(A AND BB3)&
Q<=Q1+Q2+Q3+Q4;
END PROCESS;
END behave;
功能仿真图如下

MAX+PLUS II 中时序仿真图
4.3.3符号与数据重组电路图

MAX+PLUS II 中的电路图
VHDL语言程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY ZH IS
PORT(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 IS
BEGIN
FQ<=F & Q;

- 10 -


END behave;
功能仿真图如下

MAX+PLUS II 中时序仿真图
4.4分时显示控制电路图:

MAX+PLUS II 中的电路图
VHDL 程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;

ENTITY FSXS IS
PORT(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 BEHAVE OF FSXS IS
BEGIN
PROCESS(EA,EB,CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(EA='1')THEN

- 11 -


QQOUT<=AIN(4)&
ELSIF(EB='1'AND EA='0')THEN
QQOUT<=BIN(4)&
ELSE
QQOUT<=QIN;
END IF;
END IF;
END PROCESS;
END BEHAVE;
功能仿真图如下:

MAX+PLUS II 中时序仿真图
4.5输出显示电路图:

MAX+PLUS II 中的电路图

MAX+PLUS II 中的结构图
本模块为输出显示,将二进制转换为十进制,用数码管显示,由四部

- 12 -


分组成,分别为“输出的数符分离”,“进制转换”,“消‘0’处理”
和“数 码管显示”,下面进行分别介绍:
4.5.1 输出数符分离

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;

ENTITY OUTFL IS
PORT(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 BEHAVE OF OUTFL IS
SIGNAL B:STD_LOGIC;
BEGIN
B<=AIN(8);
PROCESS(B)
BEGIN
CASE B IS
WHEN'0'=>FOUT<=
WHEN'1'=>FOUT<=
WHEN OTHERS=>FOUT<=NULL;
END CASE;
END PROCESS;
QOUT<=AIN(7 DOWNTO 0);
END BEHAVE;

功能仿真结果如下:


- 13 -


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)
begin
case(num)
0:
begin
aa[7:0]<=a;
num<=1;
A1<=0;
A2<=0;
A3<=0;
end
1:
begin
if(aa>=100)
begin
A3<=A3+1;
aa<=aa-100;
end
else if((aa>=10)&&(aa<100))
begin
A2<=A2+1;
aa<=aa-10;
end

- 14 -


else if((aa>=1)&&(aa<10))
begin
A1<=aa;
aa<=0;
end
else
begin
num<=2;
end
end
2:
begin
gout<=A1;
sout<=A2;
bout<=A3;
num<=0;
end
default:num<=0;
endcase
end
endmodule
功能仿真结果如下:

MAX+PLUS II 中时序仿真图
4.5.3
消“0”处理

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;

- 15 -


USE _LOGIC_;

ENTITY PD IS
PORT(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 BEHAVE OF PD IS
BEGIN
PROCESS(B,S,G)
BEGIN
IF(B=
IF(S=
IF(G=
BOUT<=
SOUT<=
GOUT<=
ELSE
BOUT<=
SOUT<=
GOUT<=G;
END IF;
ELSE
BOUT<=
SOUT<=S;
GOUT<=G;
END IF;
ELSE
BOUT<=B;
SOUT<=S;
GOUT<=G;
END IF;
END PROCESS;
END BEHAVE;
功能仿真结果如下:

- 16 -



MAX+PLUS II 中时序仿真图
4.5.4 数码管显示
4.5.4.1 符号位数码管显示

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;

ENTITY bcd_seg IS
PORT(BCD_F:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDSEGF:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END bcd_seg;

ARCHITECTURE BEHAVE OF bcd_seg IS
BEGIN
PROCESS(BCD_F)
BEGIN
CASE BCD_F IS
WHEN
WHEN
WHEN OTHERS=>LEDSEGF<=
END CASE;
END PROCESS;
END BEHAVE;
功能仿真结果如下:

- 17 -



MAX+PLUS II 中时序仿真图
4.5.4.1 符号位数码管显示

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;

ENTITY bcd_7seg IS
PORT(BCD_LED:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDSEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END bcd_7seg;

ARCHITECTURE BEHAVE OF bcd_7seg IS
BEGIN
PROCESS(BCD_LED)
BEGIN
CASE BCD_LED IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>LEDSEG<=
END CASE;
END PROCESS;
END BEHAVE;
功能仿真结果如下:

- 18 -



MAX+PLUS II 中时序仿真图
4.6灭“点”电路:

MAX+PLUS II 中的电路图
本模块功能:使数码管的“点”在整数运算中不显示。
4.7 乘法器整体仿真

MAX+PLUS II 中时序仿真图

5.调试过程中出现的问题以及解决办法
1、出现的问题:

- 19 -


首次实际操作计算时,对于15х15,15х(-15)和(-15)х(-15 )
的运算输出结果不正确,但是仿真结果准确。
原因:乘法运算程序需要的时间过长,移位过慢,以致结果输出过慢,
输出错误。
解决办法:
修改乘法运算程序,加快了移位运算速度,解决延时输出显示结
果的问题。
2、出现的问题:
EPM7128SLC84-15的逻辑资源出现不足的情况。
解决办法:
优化电路设计,省略了部分附加功能。
6.心得体会
虽然是 短暂的课程设计,不过在这三个周的时间里,学习了简单
的VHDL语言和Verileg HDL语言 的编写,设计过程中曾经有过很多想
法,但是在实践的同时发现并不可行,可见,实践是检验设计的唯一
标准,对于自己现在的程序虽然有令人满意的地方,不过还待加强。
对我个人而言,这次的设 计不仅锻炼了动手能力,也看到了自身
与他人的差距,我会在今后的学习中更加努力,开阔自己的视野, 接
触新鲜的方法,努力完善自我,争取有更大的进步,为以后的工作生
活奠定基础。

- 20 -


7.建议:
在日常的课程中应当设计EDA实验工具 使用以及描述语言的讲解。
在这次课程设计中,语言基本上属于自学,不仅浪费时间,而且学艺
不精,不能更好的领会和运用语言,如能在课程中进行简单的讲解,
可以让我们有更多的时间去思考如何 改进设计。
对于这个题目,我觉得最难之处在于二进制转换成十进制,这是
本题的亮点,应保 留,继续沿用;



2009年11月10日








- 21 -




哈尔滨工业大学(威海)
信息科学与工程学院




EDA课程设计报告

有符号5位整数乘法器设计与制作








指导老师:胡屏
学生班级:0802102
学生姓名:傅愉
学生学号:080210210




2009年11月10日



- 1 -


目录



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 -


于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动
是创新的源泉,也 是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步
的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题
的能力,培养学生的创新精神。
2.题目要求
设计一个两个5位数相乘的乘法器。用发光二极管显示输入数值,
用7段显示器显示十进制结果。乘数和被乘数分两次输入。在输入乘
数和被乘数时,要求显示十进制输 入数据。输入显示和计算结果显示,
采用分时显示方式进行,可参见计算器的显示功能。
3.总体设计

3.1算法设计































图:乘法器对应的方框图
两个带符号的五位数相乘,首先 将符号位与数值位分离,最终结
果的符号位由两个数的符号位经过异或操作后得到,乘法运算采用移位相加的原理来实现。

- 3 -


移位相加原理:从乘数的 最低位开始,若为1,则将被乘数右端与
乘数右端对齐写在下面;若为0,则将与被乘数同样位数的0写 在下面。
然后进行乘数的次低位,若为1,则被乘数左移一位后与上一次的结
果相加;若为0, 则左移一位后以全0相加。以此类推,每次若乘数相
应位为1,则被乘数左移一位与前次和相加;若乘数 相应位为0,则左
移一位以全0与前次和相加。相乘结果用十进制数表示。
3.2整体框图及原理



图:整体设计框图

乘法计算:
使用者通过按键输入二进制5位有符号的乘数与被乘数,并将乘数
与被乘 数分别用十进制显示,经过乘法器运算,显示十进制结果,完

- 4 -


成与计算器近似的简单乘法运算;
下面是部分模块的功能介绍:
分 时输入:在控制端EA,EB和CLK的控制下,依次输入乘数与被乘
数,且在输入被乘数后,按下定义 的乘号键,可保持所显示的被乘数
不变,改变数值,输入乘数,显示数值为乘数。
分时显示控 制:在控制端EA,EB和CLK的控制下,实现对被乘数,
乘数以及运算结果的分时显示。
4.电路设计
4.1 乘法器总体电路原理图:

MAX+PLUS II中的电路原理图
4.2分时输入模块电路图:


- 5 -


分时输入电路图

VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY INPUT1 IS
PORT(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 IS
BEGIN
PROCESS(EA,EB,I,CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF EA='1' THEN
A<=I;
ELSE NULL;
END IF;
IF EB='1' THEN
B<=I;
ELSE NULL;
END IF;
END IF;
END PROCESS;
END behave;
功能仿真,结束时间为200ns;

MAX+PLUS II 中的功能仿真图

- 6 -


4.3乘法运算电路图:

MAX+PLUS II 中的电路图

VHDL 程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;

ENTITY MUL5X5 IS
PORT(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 BEHAVE OF MUL5X5 IS
COMPONENT FHFL IS
PORT(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 IS
PORT(X,Y:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT ZH IS
PORT(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);
BEGIN
U1: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);

- 7 -


END ARCHITECTURE BEHAVE;

本 模块为该程序的中心模块,进行乘法运算,采用元件例化的方式,
将三个模块组合在一起,这三个模块包 括“符号与数字分离模块”,
“乘法运算模块”及运算结果“符号与数组重组模块”。
下面分别介绍以上三个模块:
4.3.1符号与数字分离电路图

MAX+PLUS II 中的电路图
VHDL语言程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY FHFL IS
PORT(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 IS
BEGIN
PROCESS
BEGIN
C<=A(3 DOWNTO 0);
D<=B(3 DOWNTO 0);
FH<=A(4) XOR B(4);
END PROCESS;
END behave;
功能仿真图如下:

- 8 -



MAX+PLUS II 中时序仿真图
4.3.2 乘法运算电路图

MAX+PLUS II 中的电路图
VHDL语言程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY MUL IS
PORT(A,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END MUL;

ARCHITECTURE behave OF MUL IS
SIGNAL 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);
BEGIN
PROCESS
BEGIN
BB0<=B(0)&B(0)&B(0)&B(0);
BB1<=B(1)&B(1)&B(1)&B(1);

- 9 -


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)&
Q3<=(A AND BB2)&
Q4<=(A AND BB3)&
Q<=Q1+Q2+Q3+Q4;
END PROCESS;
END behave;
功能仿真图如下

MAX+PLUS II 中时序仿真图
4.3.3符号与数据重组电路图

MAX+PLUS II 中的电路图
VHDL语言程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;
USE _LOGIC_;

ENTITY ZH IS
PORT(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 IS
BEGIN
FQ<=F & Q;

- 10 -


END behave;
功能仿真图如下

MAX+PLUS II 中时序仿真图
4.4分时显示控制电路图:

MAX+PLUS II 中的电路图
VHDL 程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;

ENTITY FSXS IS
PORT(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 BEHAVE OF FSXS IS
BEGIN
PROCESS(EA,EB,CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(EA='1')THEN

- 11 -


QQOUT<=AIN(4)&
ELSIF(EB='1'AND EA='0')THEN
QQOUT<=BIN(4)&
ELSE
QQOUT<=QIN;
END IF;
END IF;
END PROCESS;
END BEHAVE;
功能仿真图如下:

MAX+PLUS II 中时序仿真图
4.5输出显示电路图:

MAX+PLUS II 中的电路图

MAX+PLUS II 中的结构图
本模块为输出显示,将二进制转换为十进制,用数码管显示,由四部

- 12 -


分组成,分别为“输出的数符分离”,“进制转换”,“消‘0’处理”
和“数 码管显示”,下面进行分别介绍:
4.5.1 输出数符分离

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;

ENTITY OUTFL IS
PORT(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 BEHAVE OF OUTFL IS
SIGNAL B:STD_LOGIC;
BEGIN
B<=AIN(8);
PROCESS(B)
BEGIN
CASE B IS
WHEN'0'=>FOUT<=
WHEN'1'=>FOUT<=
WHEN OTHERS=>FOUT<=NULL;
END CASE;
END PROCESS;
QOUT<=AIN(7 DOWNTO 0);
END BEHAVE;

功能仿真结果如下:


- 13 -


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)
begin
case(num)
0:
begin
aa[7:0]<=a;
num<=1;
A1<=0;
A2<=0;
A3<=0;
end
1:
begin
if(aa>=100)
begin
A3<=A3+1;
aa<=aa-100;
end
else if((aa>=10)&&(aa<100))
begin
A2<=A2+1;
aa<=aa-10;
end

- 14 -


else if((aa>=1)&&(aa<10))
begin
A1<=aa;
aa<=0;
end
else
begin
num<=2;
end
end
2:
begin
gout<=A1;
sout<=A2;
bout<=A3;
num<=0;
end
default:num<=0;
endcase
end
endmodule
功能仿真结果如下:

MAX+PLUS II 中时序仿真图
4.5.3
消“0”处理

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;

- 15 -


USE _LOGIC_;

ENTITY PD IS
PORT(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 BEHAVE OF PD IS
BEGIN
PROCESS(B,S,G)
BEGIN
IF(B=
IF(S=
IF(G=
BOUT<=
SOUT<=
GOUT<=
ELSE
BOUT<=
SOUT<=
GOUT<=G;
END IF;
ELSE
BOUT<=
SOUT<=S;
GOUT<=G;
END IF;
ELSE
BOUT<=B;
SOUT<=S;
GOUT<=G;
END IF;
END PROCESS;
END BEHAVE;
功能仿真结果如下:

- 16 -



MAX+PLUS II 中时序仿真图
4.5.4 数码管显示
4.5.4.1 符号位数码管显示

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;

ENTITY bcd_seg IS
PORT(BCD_F:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDSEGF:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END bcd_seg;

ARCHITECTURE BEHAVE OF bcd_seg IS
BEGIN
PROCESS(BCD_F)
BEGIN
CASE BCD_F IS
WHEN
WHEN
WHEN OTHERS=>LEDSEGF<=
END CASE;
END PROCESS;
END BEHAVE;
功能仿真结果如下:

- 17 -



MAX+PLUS II 中时序仿真图
4.5.4.1 符号位数码管显示

MAX+PLUS II 中的电路图
VHDL程序代码如下:
LIBRARY IEEE;
USE _LOGIC_;
USE _LOGIC_;

ENTITY bcd_7seg IS
PORT(BCD_LED:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDSEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END bcd_7seg;

ARCHITECTURE BEHAVE OF bcd_7seg IS
BEGIN
PROCESS(BCD_LED)
BEGIN
CASE BCD_LED IS
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN
WHEN OTHERS=>LEDSEG<=
END CASE;
END PROCESS;
END BEHAVE;
功能仿真结果如下:

- 18 -



MAX+PLUS II 中时序仿真图
4.6灭“点”电路:

MAX+PLUS II 中的电路图
本模块功能:使数码管的“点”在整数运算中不显示。
4.7 乘法器整体仿真

MAX+PLUS II 中时序仿真图

5.调试过程中出现的问题以及解决办法
1、出现的问题:

- 19 -


首次实际操作计算时,对于15х15,15х(-15)和(-15)х(-15 )
的运算输出结果不正确,但是仿真结果准确。
原因:乘法运算程序需要的时间过长,移位过慢,以致结果输出过慢,
输出错误。
解决办法:
修改乘法运算程序,加快了移位运算速度,解决延时输出显示结
果的问题。
2、出现的问题:
EPM7128SLC84-15的逻辑资源出现不足的情况。
解决办法:
优化电路设计,省略了部分附加功能。
6.心得体会
虽然是 短暂的课程设计,不过在这三个周的时间里,学习了简单
的VHDL语言和Verileg HDL语言 的编写,设计过程中曾经有过很多想
法,但是在实践的同时发现并不可行,可见,实践是检验设计的唯一
标准,对于自己现在的程序虽然有令人满意的地方,不过还待加强。
对我个人而言,这次的设 计不仅锻炼了动手能力,也看到了自身
与他人的差距,我会在今后的学习中更加努力,开阔自己的视野, 接
触新鲜的方法,努力完善自我,争取有更大的进步,为以后的工作生
活奠定基础。

- 20 -


7.建议:
在日常的课程中应当设计EDA实验工具 使用以及描述语言的讲解。
在这次课程设计中,语言基本上属于自学,不仅浪费时间,而且学艺
不精,不能更好的领会和运用语言,如能在课程中进行简单的讲解,
可以让我们有更多的时间去思考如何 改进设计。
对于这个题目,我觉得最难之处在于二进制转换成十进制,这是
本题的亮点,应保 留,继续沿用;



2009年11月10日








- 21 -

北外研究生-思考者


关于寒假生活的作文-培训班总结


三亚学院是几本-暴强回复


奥运会徽-新年贺词


爱情蜜语-经济学专业就业前景


婚前协议书-研究生毕业登记表自我鉴定


开学典礼作文-言语理解与表达技巧


年底双薪-证券市场基础知识重点