ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:338.31KB ,
资源ID:28045185      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28045185.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VerilogHDL简单计算器设计说明.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VerilogHDL简单计算器设计说明.docx

1、VerilogHDL简单计算器设计说明3.3 循环扫描模块6第一章 设计目的与任务要求1.1 设计目的(1)进一步加强熟练EDA基础知识。(2)熟练掌握Quartus 6.0软件的使用以与用该软件编程和仿真的全过程。(3)培养独立思考问题,解决问题的能力以与查阅相关资料和资料的正确使用能力,为明年的毕业设计打下良好的设计基础。1.2 设计任务设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。1.3 课设要求(1) 说明题目的设计原理和思

2、路、采用方法与设计流程。(2) 系统框图、Verilog语言设计程序或原理图。(3) 对各子模块的功能以与各子模块之间的关系做较详细的描述。(4) 详细说明调试方法和调试过程。(5) 说明测试结果:仿真时序图和结果显示图,并对其进行说明和分析。第二章 设计思路2.1 设计总体框图有分析可知,本次课程设计可以分成五个木块来实现相应的功能,分别是输入模块,计算模块,扫描模块,输出模块以与显示模块。图一 设计总体框图2.2 设计原理2.2.1 计算其原理Verilog语言中可直接用运算符+、-、*、/、%来实现四则运算,系统会根据程序自动综合出相应的计算器。分别是加法器模块,减法器模块,乘法器模块和

3、除法器模块,当程序变得正确的话则各个程序会按照一定的步骤一步步的往下执行的。2.2.2 数码显示原理7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。设计7段译码器,输出信号LED7S的7位分别接如图一数码管的7个段,高位在左,低位在右。例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“

4、5”。注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h。共阴极七段数码管的原理图如下图二所示。图二 共阴极七段数码管2.2.3 八位数码管扫描的原理图三所示的是8位数码扫描显示电路,其中每个数码管的7个段: g、f、e、d、c、b、a都分别连在一起,8个数码管分别由8个选通信号k1、k2、k8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、k8分别被单独选通,并在此同时,在段

5、信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。图三 8位数码管显示驱动电路扫描电路通过可调时钟输出片选地址SEL2.0。由SEL2.0 通过3-8译码器决定了8位中的哪一位显示,SEL2.0变化的快慢决定了扫描频率f扫描的快慢。扫描频率大于人眼的分辨率时,呈现出八个数码管同时点亮。第三章 设计源程序与分析3.1 计算器模块3.1.1 计算器源程序mdule jsq(a,b,c,out);input7:0a,b;input1:0c;otput15:0out;reg 15:0outreg7:0out1,out2;always(a,b,c,out)ca

6、se(c)2b00:out=a+b;2b01:out=a-b;2b10:out=a*b;2b11:beginout1=a/b;out2=a%b;out=out1,out2;enddefault:;endcaseendmodule3.1.2 计算器程序分析该模块是本次设计的核心部分,用于实现四则运算,两位八位二进制数a、b作为待计算的输入,并输入两位二进制数c作为计算功能选择,00代表加法运算、01代表减法运算、10代表乘法运算、11代表除法运算。输出16位二进制数out位运算结果。并在总体设计中把输入、输出端接到数码管上。3.2 数码管显示部分3.2.1 数码管显示源程序module DECL

7、7S (A, LED7S);input 3:0 A;output 6:0 LED7S;reg 6:0 LED7S;always (A) begin case(A) 4b0000 : LED7S=7b0111111; 4b0001: LED7S = 7b0000110 ; 4b0010: LED7S = 7b1011011; 4b0011: LED7S = 7b1001111; 4b0100: LED7S = 7b1100110 ; 4b0101: LED7S = 7b1101101; 4b0110: LED7S = 7b1111101 ; 4b0111: LED7S = 7b0000111 ;

8、 4b1000: LED7S = 7b1111111 ; 4b1001: LED7S = 7b1101111 ; 4b1010: LED7S = 7b1110111 ; 4b1011: LED7S = 7b1111100 ; 4b1100: LED7S = 7b0111001 ; 4b1101: LED7S = 7b1011110 ; 4b1110: LED7S = 7b1111001 ; 4b1111: LED7S = 7b1110001 ; endcase endendmodule3.2.2 数码管显示程序分析该模块是整个设计中的显示部分,是一个编码器组合逻辑设计,每个数码管可显示十六进制

9、0至F,对应4位二进制数,因此输入端a、b分别用两个数码管显示,输出out用四个数码管显示,该设计中需要八个同样的数码管显示器,即。此模块将在总程序中被调用八次。3.3 循环扫描模块3.3.1 循环扫描程序modulexhsm(clk,rst,count,Dout);inputclk,rst;output6:0Dout;output2:0count;reg6:0Dout;reg2:0count;always(posedge clk or negedge rst)beginif(!rst)count=3b000;else if(count=3b111)count=3b000;elsecount=

10、count+3b001;endalways(posedge clk)begincase(count)3b000: Dout=LED7S1;3b001:Dout=LED7S2;3b010:Dout=LED7S3;3b011:Dout=LED7S4;3b100: Dout=LED7S5;3b101:Dout=LED7S6;3b110:Dout=LED7S7;3b111:Dout=LED7S8;endcaseendendmodule3.3.2 循环程序分析该模块是一个循环计数器,在时钟和复位信号的控制下,从000111循环计数分别控制八个数码管循环点亮,由于时钟的频率比较快,大于人眼的分辨率,所以显

11、示出八个数码管同时点亮,即同时显示计算器的输入、输出。3.4 总程序与其分析module jsq9(a,b,c,Dout,count,clk,rst);input7:0a,b;input clk,rst;input1:0c;output6:0Dout;output 2:0count;reg6:0Dout;reg2:0count;reg15:0out;reg6:0 LED7S1,LED7S2,LED7S3,LED7S4, LED7S5,LED7S6,LED7S7,LED7S8;DECL7S u1(.A(a7:4) , .LED7S(LED7S1);DECL7S u2(.A(a3:0) , .LE

12、D7S(LED7S2);DECL7S u3(.A(b7:4) , .LED7S(LED7S3);DECL7S u4(.A(b3:0) , .LED7S(LED7S4);DECL7S u5(.A(out15:12) , .LED7S(LED7S5);DECL7S u6(.A(out11:8) , .LED7S(LED7S6);DECL7S u7(.A(out7:4) , .LED7S(LED7S7);DECL7S u8(.A(out3:0) , .LED7S(LED7S8);reg7:0out1,out2;always(a,b,c,Dout,count,clk,rst)case(c)2b00:o

13、ut=a+b;2b01:out=a-b;2b10:out=a*b;2b11:beginout1=a/b;out2=a%b;out=out1,out2;enddefault:;endcasealways(posedge clk or negedge rst)beginif(!rst)count=3b000;else if(count=3b111)count=3b000;elsecount=count+3b001;endalways(posedge clk)begincase(count)3b000: Dout=LED7S1;3b001:Dout=LED7S2;3b010:Dout=LED7S3;

14、3b011:Dout=LED7S4;3b100: Dout=LED7S5;3b101:Dout=LED7S6;3b110:Dout=LED7S7;3b111:Dout=LED7S8;endcaseendendmodulemodule DECL7S (A, LED7S);input 3:0 A;output 6:0 LED7S;reg 6:0 LED7S;always (A) begin case(A) 4b0000 : LED7S=7b0111111; 4b0001: LED7S = 7b0000110 ; 4b0010: LED7S = 7b1011011; 4b0011: LED7S =

15、7b1001111; 4b0100: LED7S = 7b1100110 ; 4b0101: LED7S = 7b1101101; 4b0110: LED7S = 7b1111101 ; 4b0111: LED7S = 7b0000111 ; 4b1000: LED7S = 7b1111111 ; 4b1001: LED7S = 7b1101111 ; 4b1010: LED7S = 7b1110111 ; 4b1011: LED7S = 7b1111100 ; 4b1100: LED7S = 7b0111001 ; 4b1101: LED7S = 7b1011110 ; 4b1110: LE

16、D7S = 7b1111001 ; 4b1111: LED7S = 7b1110001 ; endcase endendmodule该程序是本次设计的最终程序,主要是将以上三个模块联系起来。其中反复调用数码管显示模块,将其与计算器模块相连。其输入A在u1中与计算器输入a的高四位相连,输出LED7S与LED7S1相连,在硬件上实现用一个数码管显示输入a的高四位,以此类推u2模块实现用数码管显示a的低四位,u3对应b的高四位,u4对应b的第四位,u5对应out的高四位,u6对应out次高四位,u7对应out的次低四位,u8对应out的低四位。循环计数器模块,与八个数码管显示模块相连,当输出coun

17、t为某一确定时,将不同数码管的输出赋给程序的总输出Dout点亮相应的数码管,例如当count=3b000时,LED7S1赋给Dout,此时试验箱是对应输入a的高四位的数码管被点亮。通过以上连接该程序实现了输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示的设计要求。第四章 时序仿真和结果验证4.1 计算器时序仿真与其分析图四 计算器时序仿真图如图四所示为计算器的实序仿真图,当输入a为00000001、b为00000001、c为01时输出out为00000即1

18、-1=0;当输入a=00000010,b=00000010,c=10时输出out=00100.即2*2=4,当输入a=00000011,b=00000011,c=11时输出out1=00000001,out2=00000000,即3/3=1余数为0当输入a=00000100,b=00000100,c=00时输出out=00001000即4+4=8.经此验证分析证明此计算器计算准确无误。模块设计成功。4.2 数码管时序仿真与分析图五 数码管时序仿真图如图五所示为数码管显示器的时序仿真波形,当输入为0011时七段数码管中abcdefg的高低电平分别为1111001即abcdg点亮显示数字3,当输入

19、为0000时七段数码管对应显示1111110即abcdef被点亮显示数字0.经验证其他数字显示均正确,七段数码管显示器模块设计仿真成功。4.3 总体时序仿真图图六所示为整个设计的仿真波形图,对其分析如下,首先分析最下边三行的循环计数器部分,当复位信号为0时count计为000当复位为1每当时钟上升沿来临时count加1,计满后恢复000继续循环,此部分验证成功。接下来看控制显示部分,输入a=00000000,b=00000000,c=00,当count=000时显示a的高四位0000,Dout=01111111,显示数字0;正确。当count=001时显示a的低四位0000,Dout=0111

20、1111,显示数字0,正确。经验证,其他数码管显示与相应的输入也是一一对应,因此时序仿真成功。图六 总体时序仿真图4.4 结果验证如下图所示在试验箱中输入a=00000010,b=00001100,c=00即显示如下结果:02+0C=000E,即2+12=14,验证结果正确图七 结果验证图第五章 心得体会为期五天的EDA课程设计很快就结束了,原则上是必须独立完成这次课程设计的,但是由于平时学习的理论知识不够扎实,所以在课程设计环节遇到了很多困难。遇到困难不可怕,关键是要专心的去学习,研究,最终在老师和同学的大力帮助之下我还是顺利里的完成了课程设计的所有容。现在回过头来想想这次的课设给我本人还是

21、带来了很多的收获。首先,通过本次课程设计,我对EDA这门课程有了更深入的体会和了解,也加深了我在理论课堂和实验课程中所学知识的理解,从拿到题目开始,就分析完成这样的设计需要用到哪些模块,这些模块基本上都是课上讲过的,关键是怎样把他们连接起来,构思好之后就要分模块写程序,在软件上编译、仿真以与搭接电路实现他的功能。其次,通过这次课设也然我认识到了自己的不足之处-知识的运用能力太差经了。课程设计是在强硬的理论基础上进行的,在上理论课的时候觉得自己的理论知识学习的还可以,刚开始觉得有了过硬的理论知识再来做课设那是很简单的事情,然而当自己真正的动手做起来的时候缺老感觉力不从心,感觉理论课上学习的知识一无是处,处处碰壁。后来分析才知道是自己的能力了太差,不能联系理论与实际。所以在以后的学习和生活过程一定要注意这方面的锻炼。最后,这次的课设让我认识到了坚持精神的可贵之处。由于本人没有把EDA课程的里路知识学习的很扎实,所以在整个过程中遇到了许多的难处,一次次的打击让我对本次课设失去了信心,正在这时候,我的以为要好的朋友安慰我说,没事的,自己尽量的做,做到多少是多少,不行的话他还可以是不是的帮助我一下。就是这样,我在老师和朋友的帮助和耐心的辅导下顺利的完成了课程设计的整个过程。这次是大学四年里最后一次课程设计了,这次课程设计的经验我将永远记住,也算是明年毕业设计前的一次热身吧。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1