用verilog语言设计简单计算器.docx

上传人:b****2 文档编号:2170482 上传时间:2022-10-27 格式:DOCX 页数:13 大小:373.70KB
下载 相关 举报
用verilog语言设计简单计算器.docx_第1页
第1页 / 共13页
用verilog语言设计简单计算器.docx_第2页
第2页 / 共13页
用verilog语言设计简单计算器.docx_第3页
第3页 / 共13页
用verilog语言设计简单计算器.docx_第4页
第4页 / 共13页
用verilog语言设计简单计算器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

用verilog语言设计简单计算器.docx

《用verilog语言设计简单计算器.docx》由会员分享,可在线阅读,更多相关《用verilog语言设计简单计算器.docx(13页珍藏版)》请在冰豆网上搜索。

用verilog语言设计简单计算器.docx

用verilog语言设计简单计算器

 

用verilog语言设计简单计算器(总13页)

第一章设计任务及要求

课程设计依据

在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,利用硬件描述语言VerilogHDL、EDA软件QuartusII和硬件平台Cyclone/CycloneIIFPGA进行电路系统的设计。

课程设计内容

设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、*、/四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。

课程设计要求

1、要求独立完成设计任务。

2、课程设计说明书封面格式要求见《天津城市建设学院课程设计教学规范》附表1。

3、课程设计的说明书要求简洁、通顺,计算正确,图纸表达内容完整、清楚、规范。

4、测试要求:

根据题目的特点,采用相应的时序仿真或者在实验系统上观察结果。

5、课程设计说明书要求:

1)说明题目的设计原理和思路、采用方法及设计流程。

2)系统框图、Verilog语言设计程序或原理图。

3)对各子模块的功能以及各子模块之间的关系做较详细的描述。

4)详细说明调试方法和调试过程。

5)说明测试结果:

仿真时序图和结果显示图,并对其进行说明和分析。

第二章设计思路

设计原理

计算器原理

Verilog语言中可直接用运算符+、-、*、/、%来实现四则运算,系统会根据程序自动综合出相应的计算器。

数码管显示原理

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”。

注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h。

图一共阴数码管及其电路

8位扫描原理

图二所示的是8位数码扫描显示电路,其中每个数码管的7个段:

g、f、e、d、c、b、a都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。

被选通的数码管显示数据,其余关闭。

如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。

根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。

图二8位数码驱动显示电路

扫描电路通过可调时钟输出片选地址SEL[2..0]。

由SEL[2..0]通过3-8译码器决定了8位中的哪一位显示,SEL[2..0]变化的快慢决定了扫描频率f扫描的快慢。

扫描频率大于人眼的分辨率时,呈现出八个数码管同时点亮。

设计总体框图

 

图三设计总体框图

第三章设计源序及分析

计算器模块

计算器源程序

mdulejsq(a,b,c,out);

input[7:

0]a,b;

input[1:

0]c;

otput[15:

0]out;

reg[15:

0]out

reg[7:

0]out1,out2;

always@(a,b,c,out)

case(c)

2'b00:

out=a+b;

2'b01:

out=a-b;

2'b10:

out=a*b;

2'b11:

begin

out1=a/b;

out2=a%b;

out={out1,out2};

end

default:

;

endcase

endmodule

模块分析

该模块是本次设计的核心部分,用于实现四则运算,两位八位二进制数a、b作为待计算的输入,并输入两位二进制数c作为计算功能选择,00代表加法运算、01代表减法运算、10代表乘法运算、11代表除法运算。

输出16位二进制数out位运算结果。

并在总体设计中把输入、输出端接到数码管上。

数码管显示模块

数码管源程序

moduleDECL7S(A,LED7S);

input[3:

0]A;

output[6:

0]LED7S;

reg[6:

0]LED7S;

always@(A)

begin

case(A)

4'b0000:

LED7S<=7'b0111111;

4'b0001:

LED7S<=7'b0000110;

4'b0010:

LED7S<=7'b1011011;

4'b0011:

LED7S<=7'b1001111;

4'b0100:

LED7S<=7'b1100110;

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

模块分析

该模块是整个设计中的显示部分,是一个编码器组合逻辑设计,每个数码管可显示十六进制0至F,对应4位二进制数,因此输入端a、b分别用两个数码管显示,输出out用四个数码管显示,该设计中需要八个同样的数码管显示器,即。

此模块将在总程序中被调用八次。

循环扫描模块

循环扫描程序

modulexhsm(clk,rst,count,Dout);

inputclk,rst;

output[6:

0]Dout;

output[2:

0]count;

reg[6:

0]Dout;

reg[2:

0]count;

always@(posedgeclkornegedgerst)

begin

if(!

rst)

count<=3'b000;

elseif(count==3'b111)

count<=3'b000;

else

count<=count+3'b001;

end

always@(posedgeclk)

begin

case(count)

3'b000:

Dout<=LED7S1;

3'b001:

Dout<=LED7S2;

3'b010:

Dout<=LED7S3;

3'b011:

Dout<=LED7S4;

3'b100:

Dout<=LED7S5;

3'b101:

Dout<=LED7S6;

3'b110:

Dout<=LED7S7;

3'b111:

Dout<=LED7S8;

endcase

end

endmodule

模块分析

该模块是一个循环计数器,在时钟和复位信号的控制下,从000—111循环计数分别控制八个数码管循环点亮,由于时钟的频率比较快,大于人眼的分辨率,所以显示出八个数码管同时点亮,即同时显示计算器的输入、输出。

总程序

总体源程序

modulejsq9(a,b,c,Dout,count,clk,rst);

input[7:

0]a,b;

inputclk,rst;

input[1:

0]c;

output[6:

0]Dout;

output[2:

0]count;

reg[6:

0]Dout;

reg[2:

0]count;

reg[15:

0]out;

reg[6:

0]LED7S1,LED7S2,LED7S3,LED7S4,LED7S5,LED7S6,LED7S7,LED7S8;

DECL7Su1(.A(a[7:

4]),.LED7S(LED7S1));

DECL7Su2(.A(a[3:

0]),.LED7S(LED7S2));

DECL7Su3(.A(b[7:

4]),.LED7S(LED7S3));

DECL7Su4(.A(b[3:

0]),.LED7S(LED7S4));

DECL7Su5(.A(out[15:

12]),.LED7S(LED7S5));

DECL7Su6(.A(out[11:

8]),.LED7S(LED7S6));

DECL7Su7(.A(out[7:

4]),.LED7S(LED7S7));

DECL7Su8(.A(out[3:

0]),.LED7S(LED7S8));

reg[7:

0]out1,out2;

always@(a,b,c,Dout,count,clk,rst)

case(c)

2'b00:

out=a+b;

2'b01:

out=a-b;

2'b10:

out=a*b;

2'b11:

begin

out1=a/b;

out2=a%b;

out={out1,out2};

end

default:

;

endcase

always@(posedgeclkornegedgerst)

begin

if(!

rst)

count<=3'b000;

elseif(count==3'b111)

count<=3'b000;

else

count<=count+3'b001;

end

always@(posedgeclk)

begin

case(count)

3'b000:

Dout<=LED7S1;

3'b001:

Dout<=LED7S2;

3'b010:

Dout<=LED7S3;

3'b011:

Dout<=LED7S4;

3'b100:

Dout<=LED7S5;

3'b101:

Dout<=LED7S6;

3'b110:

Dout<=LED7S7;

3'b111:

Dout<=LED7S8;

endcase

end

endmodule

moduleDECL7S(A,LED7S);

input[3:

0]A;

output[6:

0]LED7S;

reg[6:

0]LED7S;

always@(A)

begin

case(A)

4'b0000:

LED7S<=7'b0111111;

4'b0001:

LED7S<=7'b0000110;

4'b0010:

LED7S<=7'b1011011;

4'b0011:

LED7S<=7'b1001111;

4'b0100:

LED7S<=7'b1100110;

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:

LE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

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

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