VerilogHDL简单计算器设计-文档_第1页
VerilogHDL简单计算器设计-文档_第2页
VerilogHDL简单计算器设计-文档_第3页
VerilogHDL简单计算器设计-文档_第4页
VerilogHDL简单计算器设计-文档_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录第一章设计目的及任务要求 11.1设计目的 11.2设计任务 11.3课设要求 1第二章设计思路 12.1设计总体框图 12.2设计原理 12.2.1 计算其原理 12.2.2数码显示原理 22.2.3八位数码管扫描的原理 2第三章设计源程序及分析 23.1计算器模块 23.1.1 计算器源程序 23.1.2计算器程序分析 23.2数码管显示部分 33.2.1数码管显示源程序 33.2.2数码管显示程序分析 43.3循环扫描模块 43.3.1循环扫描程序 43.3.2 循环程序分析 53.4总程序及其分析 5第四章时序仿真和结果验证 84.1计算器时序仿真及其分析 84.2数码管时序仿真及

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

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

4、模块和除法器模块,当程序变得正确的话则各个程序会按照 一定的步骤一步步的往下执行的。222数码显示原理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;接有高电平的段发亮,于是数

5、码管显示“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分别被单独选通,并在此同时

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

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

8、S);input 3:0 A;output 6:0 LED7S;reg 6:0 LED7S;always (A)begincase(A)4b0000 :LED7S=7b0111111;4b0001: LED7S = 7b0000110 ;4b0010: LED7S = 7b1011011;4b0011: LED7S = 7b1001111;4b0100: LED7S = 7b1100110 ;otput15:0out;4b0101: LED7S = 7b1101101;4b0110: LED7S = 7b1111101 ;4b0111: LED7S = 7b0000111 ;4b1000: L

9、ED7S = 7b1111111 ;4b1001: LED7S = 7b1101111 ;4b1010: LED7S = 7b1110111 ;4b1011: LED7S = 7b1111100 ;4b1100: LED7S = 7b0111001 ;4b1101: LED7S = 7b1011110 ;4b1110: LED7S = 7b1111001 ;4b1111: LED7S = 7b1110001 ;endcaseendendmodule3.2.2数码管显示程序分析该模块是整个设计中的显示部分,是一个编码器组合逻辑设计,每个数码管可显示十六进制0至F,对应4位二进制数,因此输入端a、

10、b分别用两个数码管显示,输出out用四个数码管显示,该设计中需要八个同样的数码管显示器,即。此模块将在总程序中被调用八次。3.3循环扫描模块3.3.1循环扫描程序modulexhsm(clk,rst,co un t,Dout);in putclk,rst; output6:0Dout;output2:0co unt; reg6:0Dout;reg2:0co unt;always(posedge clk or n egedge rst)begin if(!rst) cou nt=3b000;else if(cou nt=3b111)cou nt=3b000;elseend always(pose

11、dge elk)beginease(eo unt)3b000: Dout=LED7S1;3b001:Dout=LED7S2;3b010:Dout=LED7S3; 3b011:Dout=LED7S4;3b100: Dout=LED7S5;3b101:Dout=LED7S6;3b110:Dout=LED7S7;3b111:Dout=LED7S8;endcaseenden dmodule3.3.2循环程序分析该模块是一个循环计数器,在时钟和复位信号的控制下,从000111循环计数分别控制八个数码管循环点亮,由于时钟的频率比较快,大于人眼的分辨率,所以显示出八个数码管同时点亮,即同时显示计 算器的输入

12、、输出。3.4总程序及其分析module jsq9(a,b,c,Dout,co un t,clk, rst);in put7:0a,b;in put clk,rst;in put1:0c;output6:0Dout;output 2:0co unt; reg6:0Dout;reg2:0co unt;reg15:0out;reg6:0 LED7S1,LED7S2,LED7S3,LED7S4, LED7S5,LED7S6,LED7S7,LED7S8;DECL7Su1(.A(a7:4),. LED7S(LED7S1);DECL7Su2(.A(a3:0),. LED7S(LED7S2);DECL7Su

13、3(.A(b7:4),.L ED7S(LED7S3);DECL7Su4(.A(b3:0),.L ED7S(LED7S4);DECL7S u5(.A(out15:12) , .LED7S(LED7S5);DECL7Su6(.A(out11:8) , . LED7S(LED7S6);DECL7S u7(.A(out7:4),丄 ED7S(LED7S7);DECL7S u8(.A(out3:0) , . LED7S(LED7S8); reg7:0out1,out2;always(a,b,c,Dout,co un t,clk,rst) case(c)2b00:out=a+b;2b01:out=a-b;

14、2b10:out=a*b;2b11:beginout1=a/b;out2=a%b;out=out1,out2;enddefault:;endcasealways(posedge clk or n egedge rst) beginif(!rst)cou nt=3b000;else if(cou nt=3b111)cou nt=3b000;elsecou nt=cou nt+3b001;endalways(posedge clk)begincase(co unt)3b000: Dout=LED7S1;3b001:Dout=LED7S2;3b010:Dout=LED7S3;3b011:Dout=L

15、ED7S4;3b100: Dout=LED7S5;3b101:Dout=LED7S6;3b110:Dout=LED7S7;3b111:Dout=LED7S8;endcaseenden dmodulemodule DECL7S (A, LED7S);in put 3:0 A;output 6:0 LED7S;reg 6:0 LED7S;always (A)begincase(A)4b0000 :LED7S=7b0111111;4b0001: LED7S = 7b0000110 ;4b0010: LED7S = 7b1011011;4b0011: LED7S = 7b1001111;4b0100:

16、 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: LED7S = 7b1111001 ;4b1111: LED

17、7S = 7b1110001 ;endcaseenden dmodule该程序是本次设计的最终程序,主要是将以上三个模块联系起来。其中反复调用数码管显示模块,将其与计算器模块相连。其输入A在u1中与计算器输入a的高四位相连,输出LED7S与 LED7S1相连,在硬件上实现用一个数码管显示输入a的高四位,以此类推 u2模块实现用数码管显示 a的低四位,u3对应b的高四位,u4对应b的第四位,u5对应out的高四位,u6对应out 次高四位,u7对应out的次低四位,u8对应out的低四位。循环计数器模块,与八个数码管显示模块相连,当输出 count为某一确定时,将不同数码管的输出赋 给程序的总输

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

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

20、点亮显示数字3,当输入为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=01111111,显示数字0, 正确。经验证,其他数码管显示与相应的输入也是一一对应,因此时序仿真成功。图六总体时序仿真图4.4结果验证如下图所示在试验箱中输入a=00000010, b=00001100, c=00即显示如下结果:02+0C=000E,即2+12=14,验证结果正确图七结果验证图第五章心得体会为期五天的EDA课程设计很快就结束了,原则上是必须独立完成这次课程设计的,但是由于平时学习 的理论知识不够扎实,所以在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论