
题目 4位加法器设计
学号 ************
姓名 韩 帅
班级 自 动 082
指导老师 韩晓燕
2011 年 3 月 7 日—2011 年 3 月 11 日
摘要
《EDA课程设计》(注:EDA即电子设计自动化,Electronics Design Automation)是继《模拟电子技术基础》、《数字电子技术基础》、《电子技术基础实验》课程后,电气类、自控类和机械工程类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握EDA的基本方法,熟悉一种EDA软件(MAXPLUS2),并能利用EDA软件设计一个电子技术综合问题,并在实验板上成功下载,为以后进行工程实际问题的研究打下设计基础。
一 、概述
《EDA课程设计》中应用了《模拟电子技术基础》、《数字电子技术基础》中的基础知识和基本理论,并且利用了《电子技术基础实验》中的基本实验方法,在时间上的安排上应该在这些课程之后。
《EDA课程设计》的后续课程是《微机原理》等其它专业课程,《EDA课程设计》中对学生综合设计能力的培养将为这些后续课程的学习打下良好基础。
1.1目的与要求
目的:
本实验课程的目的,旨在通过上机实验,使学生加深理解EDA技术的基本方法,帮助和培养学生建立利用原理图和硬件描述语言进行电路设计的基本方法和利用EDA工具软件(Quartus7.2)设计简单数字电子系统的能力,为以后从事有关数字电子系统方面的设计和研究开发工作打下基础。
要求:
1、通过课程设计使学生能熟练掌握一种EDA软件(Quartus7.2)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。
2、通过课程设计使学生能利用EDA软件(Quartus7.2)进行至少一个电子技术综合问题的设计(内容可由老师指定或自由选择),设计输入可采用图形输入法或VHDL硬件描述语言输入法。
3、通过课程设计使学生初步具有分析、寻找和排除电子电路中常见故障的能力。
4、通过课程设计使学生能写出严谨的、有理论根据的、实事求是的、文理通顺的字迹端正的课程设计报告。
1.2、主要设备及器材配置
1、PC机
2、Quartus II 7.2 软件
二、实习内容
1、以Altera公司的Quartus II 7.2 为工具软件,采用原理图输入法设计半加器h_adder,生成元件符号,并仿真验证设计结果。
2、以Altera公司的Quartus II 7.2 为工具软件,采用层次化原理图输入法设计1位全加器f_adder,生成元件符号,并仿真验证设计结果。在此基础上设计4位加法器。
三、实验原理和步骤
半加器设计
1、元件选择
在Quartus II 7.2工具软件的元件库中已经有与门、或门、与非门和异或门等元件,在设计中可直接调用这些元件,实现电路设计。
图1 半加器原理图
在元件选择对话框的符号库“Symbol Libraries”栏目中,用鼠标双击基本元件库文件夹“d:\\maxplus2\\max2lib\\prim”后,在符号文件“Symbol Files”栏目中列出了该库的基本元件的元件名,例如and2(二输入端的与门)、xor(异或门)、VCC(电源)、input(输入)和output(输出)等。在元件选择对话框的符号名“Symbol Name”栏目内直接输入xor,或者在“Symbol Files”栏目中,用鼠标双击“xor”元件名,即可得到异或门的元件符号。用上述同样的方法也可以得到其他元件符号。
2、编辑半加器的原理图
半加器逻辑电路图如图1所示,它由1个异或门和1个与门构成,a、b是输入端,SO是和输出端,CO是向高位的进位输出端。
在元件选择对话框的符号名“Symbol Name”栏目内直接输入xor,或者在“Symbol Files”栏目中,用鼠标双击“xor”元件名,即可得到异或门的元件符号。用上述同样的方法也可以得到与门及输入端和输出端的元件符号。用鼠标双击输入或输出元件中原来的名称,使其变黑后就可以进行名称修改,用这种方法把两个输入端的名称分别更改为“a”和“b”,把两个输出端的名称分别更改为“SO”和“CO”,然后按照图1所示的半加器逻辑电路的连接方式,用鼠标将相应的输入端和输出端及电路内部连线连接好,并以“h_adder.gdf”(注意后缀是.gdf)为文件名,存在自己建立的工程目录d:\\myeda\\mygdf内。进行存盘操作时,系统在弹出的存盘操作对话框中,自动保留了上一次存盘时的文件名和文件目录,不要随意单击“OK”按钮结束存盘,一定要填入正确的文件名并选择正确的工程目录后,才能单击“OK”按钮存盘,这是上机实验时最容易忽略和出错的地方。
3、编译设计图形文件
设计好的图形文件一定要通过Quartus II 7.2I的编译。在Quartus II 7.2I集成环境下,执行“MAX+plus”菜单下的“Compiler”命令,在弹出的编译对话框中单击“Start”按钮,即可对h_adder.gdf文件进行编译。
在编译中,Quartus II 7.2自动完成编译网表提取(Compiler Netlist Extractor)、数据库建立(Database Builder)、逻辑综合(Logic Synthesizer)、逻辑分割(Partitioner)、适配(Fitter)、延时网表提取(Timing SNF Extractor)和编程文件汇编(Assembler)等操作,并检查设计文件是否正确。存在错误的设计文件是不能将编译过程进行到底的,此时计算机会中断编译,并在编译(Compiler)对话框中指出错误类型和个数。
4、生成元件符号
在Quartus II 7.2集成环境下,执行“File”菜单下的“Create Default Symbol”命令,将通过编译的GDF文件生成一个元件符号,并保存在工程目录中。这个元件符号可以被其他图形设计文件调用,实现多层次的系统电路设计。
5、功能仿真设计文件
仿真,也称为模拟(Simulation);是对电路设计的一种间接的检测方法。对电路设计的逻辑行为和功能进行模拟检测,可以获得许多设计错误及改进方面的信息。对于大型系统的设计,能进行可靠、快速、全面的仿真尤为重要。
① 建立波形文件
进行仿真时需要先建立仿真文件。在Quartus II 7.2环境执行“File”的“New”命令,再选择弹出的对话框中的Waveform Editor fi1e项,波形编辑窗口即被打开。
② 输入信号节点
在波形编辑方式下,执行“Node”的“Nodes from SNF”命令,弹出输入节点“Enter Nodes from SNF”对话框,在对话框中首先单击“List”按钮,这时在对话框左边的“Available Nodes&Groups” (可利用的节点与组)框中将列出该设计项目的全部信号节点。若在仿真中只需要观察部分信号的波形,则首先用鼠标将选中的信号名点黑,然后单击对话框中间的“=>”按钮,选中的信号即进入到对话框右边的“Selected Nodes&Groups”(被选择的节点与组)框中。如果需要删除“被选择的节点与组”框中的节点信号,也可以用鼠标将其名称点黑,然后单击对话框中间的“<="按钮。节点信号选择完毕后,单击“OK”按钮即可。
③ 设置波形参量
在波形编辑对话框中调入了半加器的所有节点信号后,还需要为半加器输入信号a和b设定必要的测试电平等相关的仿真参数。如果希望能够任意设置输入电平位置或设置输入时钟信号的周期,可以在Options选项中,取消网格对齐Snap to Grid的选择(取消钩)。
④ 设定仿真时间宽度
在仿真对话框,默认的仿真时间域是1μS。如果希望有足够长的时间观察仿真结果,可以选择“File”命令菜单中的“End Time”选项,在弹出的“End Time”对证框中,填入适当的仿真时间域(如5μS)即可。
⑤ 加入输入信号
为输入信号a和b设定测试电平的方法及相关操作如教材图2.1.3所示,利用必要的功能键为a和b加上适当的电平,以便仿真后能测试so和co输出信号。
⑥ 波形文件存盘
以“h_adder.scf”(注意后缀是.scf)为文件名,存在自己建立的工程目录d:\\myeda\\mygdf内。在波形文件存盘时,系统将本设计电路的波形文件名自动设置为“h_adder.scf”,因此可以直接单击确定按钮。
⑦ 进行仿真
波形文件存盘后,执行“Quartus II 7.2”选项中的仿真器“Simulator”命令,单击弹出的“仿真开始”对话框中的“Start”按钮,即可完成对半加器设计电路的仿真,可通过观察仿真波形进行设计电路的功能验证。
仿真波形图如下:
全加器设计
1、编辑1位全加器的原理图
1位全加器可以用两个半加器及一个或门连接而成。其原理图如图1所示。
在Quartus7.2图形编辑方式下,在用户目录中找到自己设计的半加器元件h_adder,并把它调入原理图编辑框中(调入两个),另外从d:\\maxplus2\\max2lib\\prim元件库中调出一个两输入端的或门,并加入相应的输入和输出元件,按照图1所示电路连线,得到1位全加器电路的设计结果。电路中的a和b是两个1位二进制加数输入,cin是低位来的进位输入,sum是和输出,cout是向高位进位输出。
2、设计文件存盘与编译
完成1位全加器电路原理图的编辑后,以f_adder.gdf为文件名将1位全加器电路原理图设计文件保存在工程目录中,“.gdf”表示图形文件。进行存盘操作时,系统在弹出的存盘操作对话框中,自动保留了上一次存盘时的文件名和文件目录,操作者不要随意单击“OK”按钮结束存盘,一定要填入正确的文件名并选择正确的工程目录后,才能单击“OK”按钮存盘,这是初学者上机实验时最容易忽略和出错的地方。
图1 1位全加器原理图
全加器的原理图文件包括两个层次的设计。半加器h_adder.gdf是底层设计文件,全加器f_adder.gdf是顶层设计文件。在编译顶层文件之前要设置此文件为顶层文件,操作方法是先打开f_adder.gdf,执行“file”菜单下“project”的“set project to current file”命令即可。
完成图形文件编辑并存盘后,执行MAX+plus II的“Compiler”命令对设计文件进行编译,检查设计文件中的错误。如果设计文件不存在错误,则可以开始进一步对设计文件进行网表文件提取、设计文件排错、逻辑综合、逻辑分配、适配(结构综合)、时序仿真文件提取和编程下载文件装配等操作。
在Quartus7.2集成环境下,执行“File”菜单中的“Create Default Symbol”命令,可为通过编译的图形设计文件产生一个元件符号,并被保存在工程目录中,该元件符号可以被其他电路系统设计调用,成为该系统的一个基本元件。其输入/输出端口名由系统自动改为大写字母。
3、仿真设计文件
在Quartus7.2波形编辑方式下,编辑f_adder.gdf的波形文件,并完成输入信号a、b和cin输入电平的设置。波形文件编辑结束后也要将波形文件保存在工程目录中,在存盘操作时,系统会自动将当前设计的文件名作为波形文件名,并以.scf为文件类型(例如1位全加器的波形文件是f_adder.scf),所以操作者可以直接单击“OK”按钮结束波形文件的存盘操作。
波形文件存盘后,执行启动仿真器“Simulator”命令开始仿真,可通过观察仿真波形进行设计电路的功能验证。
仿真波形图如下:
4、4位加法器设计(设计深入)
4位加法器的设计中,全加器成为底层文件ain[3..0]和bin[3..0]是两个4位二进制输入端,cin是低位来得进位输入端,sum[3..0]是4位和输出端,cout是向高位进位的输出端。原理图如图2所示。
图2 4位加法器原理图
ain[3..0]的右边连接了一条粗的信号线,表示该信号与有ain[3]~ain[0]文字标注的4个全加器的ain输入端连接。同理bin[3..0]和sum[3..0]。粗线表示多条信号线组成的总线,细线表示单信号线。用鼠标左键单击信号线,使之变成红色,然后在红线上单击右键,选择“line style”命令,然后选择相应的粗或细信号线即可。单击编辑窗口左边“A”按钮可以在信号线上添加文字标注。
仿真波形图如下:
四、实验总结
这次EDA课程设计历时一个星期,在整整一个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示:在设定输入的时钟信号后,数字秒表开始计数,但是始终看不到秒和小时的循环计数。后来,在数十次的调试之后,才发现是因为输入的时钟信号对于器件的延迟时间来说太短了。经过屡次调试,终于找到了比较合适的输入数值:时钟周期设置在15秒左右比较合适。另外,Endtime的值需要设置的长一点:500us左右,这样就可以观察到完整的仿真结果。
其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
