有符号5位整数乘法器设计与制作
拥有阳光-办公用房清理自查报告
哈尔滨工业大学(威海)
信息科学与工程学院
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 -