根据上诉,可得A>B、A
Y(A>B)=A1*B1′+(A1⊙B1)A0*B0′*I(A>B);
Y(A
Y(A=B)=A1⊙B1)*(A0⊙B0)*I(A=B)。
其中I(A>B)、I(A
以下是具体的真值表
输入
输出
A1
B1
A0
B0
1
2
3
1
0
任意
1
0
0
0
1
任意
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
1
0
1
0
0
0
0
1
1
0
1
0
1
1
0
0
0
1
0
1
1
0
1
0
0
1
1
1
1
0
1
0
0
1
1
1
1
0
1
0
备注:
输出中的1、2、3分别代表A>B、A=B、A
五、软件编程
系统工作软件流程
1)打开Max+plusII,进入编辑环境,如下图:
2)新建文本文件,选择TextEditorfile:
如下图:
3)点击ok进入文本编辑系统,输入源程序,如下图所示:
4)建立工程,然后看编译是否有错误,直到通过编译为止:
5)仿真建立波形文件:
程序代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityCompis
port(
A1:
instd_logic;
B1:
instd_logic;
A0:
instd_logic;
B0:
instd_logic;
AsmallerB:
outstd_logic;
AbiggerB:
outstd_logic;
AequalB:
outstd_logic
);
endComp;
architectureRTLofCompis
signalS_TMP:
std_logic_vector(3downto0);
begin
S_TMP<=A1&B1&A0&B0;
process(S_TMP)begin
case(S_TMP)is
when"0000"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
when"0001"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0010"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"0011"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
when"0100"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0101"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0110"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0111"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"1000"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1001"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1010"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1011"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1100"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
when"1101"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"1110"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1111"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
whenothers=>AsmallerB<='0';AbiggerB<='0';AequalB<='0';
endcase;
endprocess;
endRTL;
运行仿真:
仿真结果:
六、系统调试
1),软件打不开,解决办法把license.dat的文件拷贝到安装目录下面,
2)逻辑图显示nodemissingsource错误,解决办法是把输入端口的名字改了,
3)仿真结果总是出不来,解决的办法是单击Max+plus下拉菜单下面的Simulator,而不是直接点击
运行。
七、心得体会
虽然刘老师曾经多次讲过如何使用该软件,但是在这个课程设计开始的时候,我们依旧很迷茫,不知道该怎么去做这个课程设计。
最后反复看了课本之后,才开始着手做2位数值比较器这个课题,在课程设计过程中,我们查阅了大量的资料,多次询问了同学许多问题,才把这个课题了解清楚。
开始时,对2位数值比较器的理解比较深入,可是在设计时总是忘记少连或者多连一些线路,所以开始的设计都是以失败而告终,这样的情况浪费了我们很多时间,通过这次做课程设计,我们了解到做课程设计也是对课本知识的巩固和加强,由于课本的知识很多,平时课间的学习并不能很好的理解和运用各个元件的功能,所以在这次课程设计中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识,平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。
同时还可以记住更多的东西,比如一些芯片的功能,通过动手实践让我们对各个元件映像深刻,认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准,所以这次的课程设计对我们的作用是非常大的。
虽然此课程设计对我们组很有压力,可是当我们看到我们的成果时,我们感到了高兴,同时明白了有些事情即使再难,在枯燥,只要我们尽自己最大的努力,最后也能完成的很好。
我们应该克服自己懒惰的心理,只要敢于动手去做,其实所有事情并不是想象中的那么难。
通过这次课程设计,加强了我们动手、思考和解决问题的能力,明白了做事要注意细节,最后对MAX+plus这个软件产生了兴趣。
八、参考文献
[1]数字电子技术基础(第五版),阎石主编,高等教育出版社
[2]数字系统设计及VHDL实战,徐向明主编,机械工业出版社
[3]黄仁欣.EDA技术实用教程.北京:
清华大学出版社,2006
九、附录
程序原理图:
程序
代码以及部分注释:
LIBRARYIEEE;--使IEEE库可见
USEIEEE.STD_LOGIC_1164.ALL;--调用IEEE库中的程序包
USEIEEE.STD_LOGIC_ARITH.ALL;--
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityCompis--实体说明
port(
A1:
instd_logic;--二进制输入端口
B1:
instd_logic;
A0:
instd_logic;
B0:
instd_logic;
AsmallerB:
outstd_logic;--结果输入端口
AbiggerB:
outstd_logic;
AequalB:
outstd_logic
);
endComp;
architectureRTLofCompis--结构体描述
signalS_TMP:
std_logic_vector(3downto0);
begin
S_TMP<=A1&B1&A0&B0;--输入4个二进制数值
process(S_TMP)begin
case(S_TMP)is--case语句
when"0000"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
when"0001"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0010"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"0011"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
when"0100"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0101"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0110"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"0111"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"1000"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1001"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1010"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1011"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1100"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
when"1101"=>AsmallerB<='1';AbiggerB<='0';AequalB<='0';
when"1110"=>AsmallerB<='0';AbiggerB<='1';AequalB<='0';
when"1111"=>AsmallerB<='0';AbiggerB<='0';AequalB<='1';
whenothers=>AsmallerB<='0';AbiggerB<='0';AequalB<='0';
endcase;
endprocess;
endRTL;