Verilog HDL简单计算器设计
- 格式:doc
- 大小:407.00 KB
- 文档页数:13
目录
第一章设计目的及任务要求 (1)
1.1 设计目的 (1)
1.2 设计任务 (1)
1.3 课设要求 (1)
第二章设计思路 (2)
2.1 设计总体框图 (2)
2.2 设计原理 (2)
2.2.1 计算其原理 (2)
2.2.2 数码显示原理 (2)
3
4
4
4
4
5
5
5
6
6
6
7
10
10
10
10
11
12
第一章设计目的及任务要求
1.1 设计目的
(1)进一步加强熟练EDA基础知识。
(2)熟练掌握Quartus 6.0软件的使用以及用该软件编程和仿真的全过程。
(3)培养独立思考问题,解决问题的能力以及查阅相关资料和资料的正确使用能力,为明年的毕业设计
打下良好的设计基础。
第二章设计思路
2.1 设计总体框图
有分析可知,本次课程设计可以分成五个木块来实现相应的功能,分别是输入模块,计算模块,扫描
模块,输出模块以及显示模块。
码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。
设计7段译码器,输出信号LED7S的7位分别接如图一数码管的7个段,高位在左,低位在右。
例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。
注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h。
共阴极七段数码管的原理图如下
图二所示。
图二共阴极七段数码管
8
第三章设计源程序及分析
3.1 计算器模块
3.1.1 计算器源程序
mdule jsq(a,b,c,out);
该模块是本次设计的核心部分,用于实现四则运算,两位八位二进制数a、b作为待计算的输入,并输入两位二进制数c作为计算功能选择,00代表加法运算、01代表减法运算、10代表乘法运算、11代表除法运算。
输出16位二进制数out位运算结果。
并在总体设计中把输入、输出端接到数码管上。
3.2 数码管显示部分
3.2.1 数码管显示源程序
module DECL7S (A, LED7S);
input [3:0] A;
output [6:0] LED7S;
reg [6:0] LED7S;
3.2.2 数码管显示程序分析
该模块是整个设计中的显示部分,是一个编码器组合逻辑设计,每个数码管可显示十六进制0至F,对应4位二进制数,因此输入端a、b分别用两个数码管显示,输出out用四个数码管显示,该设计中需要八个同样的数码管显示器,即。
此模块将在总程序中被调用八次。
3.3 循环扫描模块
3.3.1 循环扫描程序
modulexhsm(clk,rst,count,Dout);
inputclk,rst;
output[6:0]Dout;
output[2:0]count;
endcase
end
endmodule
3.3.2 循环程序分析
该模块是一个循环计数器,在时钟和复位信号的控制下,从000—111循环计数分别控制八个数码管循环点亮,由于时钟的频率比较快,大于人眼的分辨率,所以显示出八个数码管同时点亮,即同时显示计
算器的输入、输出。
3.4 总程序及其分析
module jsq9(a,b,c,Dout,count,clk,rst);
input[7:0]a,b;
input clk,rst;
input[1:0]c;
output[6:0]Dout;
output [2:0]count;
reg[6:0]Dout;
out={out1,out2};
end
default:;
endcase
always@(posedge clk or negedge rst)
begin
if(!rst)
count<=3'b000;
else if(count==3'b111)
count<=3'b000;
else
count<=count+3'b001;
end
always@(posedge clk)
begin
case(count)
3'b000: Dout<=LED7S1;
4'b0101: LED7S <= 7'b1101101; 4'b0110: LED7S <= 7'b1111101 ; 4'b0111: LED7S <= 7'b0000111 ; 4'b1000: LED7S <= 7'b1111111 ; 4'b1001: LED7S <= 7'b1101111 ; 4'b1010: LED7S <= 7'b1110111 ; 4'b1011: LED7S <= 7'b1111100 ; 4'b1100: LED7S <= 7'b0111001 ; 4'b1101: LED7S <= 7'b1011110 ;
4'b1110: LED7S <= 7'b1111001 ;
4'b1111: LED7S <= 7'b1110001 ;
endcase
end
endmodule
该程序是本次设计的最终程序,主要是将以上三个模块联系起来。
其中反复调用数码管显示模块,将其与计算器模块相连。
其输入A在u1中与计算器输入a的高四位相连,输出LED7S与LED7S1相连,在硬件上实现用一个数码管显示输入a的高四位,以此类推u2模块实现用数码管显示a的低四位,u3对应b的高四位,u4对应b的第四位,u5对应out的高四位,u6对应out
位二
第四章时序仿真和结果验证
4.1 计算器时序仿真及其分析
为
即
余数为0
图五数码管时序仿真图
如图五所示为数码管显示器的时序仿真波形,当输入为0011时七段数码管中abcdefg的高低电平分别为1111001即abcdg点亮显示数字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,正确。
经验证,其他数码管显示与相应的输入也是一一对应,因此时序仿真成功。
,
图七结果验证图
页眉内容
第五章心得体会
为期五天的EDA课程设计很快就结束了,原则上是必须独立完成这次课程设计的,但是由于平时学习的理论知识不够扎实,所以在课程设计环节遇到了很多困难。
遇到困难不可怕,关键是要专心的去学习,研究,最终在老师和同学的大力帮助之下我还是顺利里的完成了课程设计的所有内容。
现在回过头来想想
这次的课设给我本人还是带来了很多的收获。