基于DE2开发板的计算器设计.docx
- 文档编号:3028784
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:27
- 大小:412.28KB
基于DE2开发板的计算器设计.docx
《基于DE2开发板的计算器设计.docx》由会员分享,可在线阅读,更多相关《基于DE2开发板的计算器设计.docx(27页珍藏版)》请在冰豆网上搜索。
基于DE2开发板的计算器设计
基于DE2开发板的计算器设计
一、实验原理分析
本设计是使用verilog编写一个运算系统,其功能是实现4位整数的加、减、乘、除运算。
运算时通过矩阵键盘输入运算类型和运算所需要的数据,然后通过内部电路处理,并将计算的结果送于LCD1602显示。
电路的设计包括按键扫描模块A、输入数据处理模块B、BCD转二进制模块C、运算模块D、二进制转BCD模块E、LCD控制模块F。
其结构框图如下:
设计思路是由模块A扫描按键并获得键值,非等号的话送与LCD控制器,在LCD上显示。
同时模块B根据收到的键值判断并输出运算数(a,b)和运算类型(+-*/)。
模块C将模块B传来的4位BCD转换成二进制输入模块D,模块D根据运算数和算类型算出结果,送到模块E,模块E将计算结果转换成BCD码送到模块F从而在LCD上显示运算结果。
二、实验硬件实现
1.设计输入采用4*4薄膜键盘
DE2开发板上有4个IO口已经被拉高到3.3V,刚好可以作为矩阵键盘列扫描的输入,如图
2.设计输出采用DE2开发板上自带的LCD1602
3.模块介绍:
按键扫描模块:
其中CLOCK_50为时钟、reset为复位、row为列输入、col为行控制、key_value为输出键值,采用BCD编码,LCD_EN为LCD写使能信号,key_down为按键按下信号。
输入数据处理模块:
其中EN为使能,clk为时钟,key_in是输入的键值,a是第一个操作数,b是第二个操作数,a,b都是4位的BCD码,例如a=16‘b1000100010001000表示输入的数据是8888。
Math表示运算类型,0为加,1为减,2为乘,3为除。
BCD转二进制模块:
其中data_in为输入的BCD码,data_out为转换后的二进制码。
运算模块:
其中a,b为输入的操作数,该模块可以根据math_in的值选择相应的算术运算,支持加减乘除四种运算。
Result为输出的运算结果。
二进制转BCD模块:
其中bin为输入的二进制码,BCD输出相应的BCD码。
LCD控制模块:
其中W_EN为写使能,iCLK为时钟,iRST_N为复位信号,key_in是键盘的键值,result为运算后的结果,LCD_DATA为写到LCD的数据,LCD_RW读/写控制信号,LCD_EN为LCD使能,LCD_RS为LCD输入指令/数据选择信号。
4.运算系统顶层电路设计
三、实验结果与展望:
本次实验实现了4位整数的加、减、乘、除运算,并且送与LCD1602显示。
但是其输入数最大支持四位数9999,计算结果不大于
,且除法运算是取整运算,不能真正的算得上是一个计算器。
查看quartusii的MegaWizardPlug-inManager工具,发现Arithmetic里有很多关于浮点数运算的IP核。
如果深入设计的话可以采用浮点数输入,浮点数输出,从而设计出一个带小数的计算器。
还可以让计算器增加根号、exp和log等功能。
附录一:
顶层程序calculator
modulecalculator(
inputRST,
inputCLOCK_50,
input[3:
0]ROW,
output[3:
0]Column,
inout[7:
0]LCD_DATA,
outputLCD_BLON,
outputLCD_EN,
outputLCD_ON,
outputLCD_RS,
outputLCD_RW
);
wire[7:
0]LCD_D_1;
wireLCD_RW_1;
wireLCD_EN_1;
wireLCD_RS_1;
wireDLY_RST;
//=============================================================================
//Structuralcoding
//=============================================================================
//initial//
//
assignLCD_DATA=LCD_D_1;
assignLCD_RW=LCD_RW_1;
assignLCD_EN=LCD_EN_1;
assignLCD_RS=LCD_RS_1;
assignLCD_ON=1'b1;
assignLCD_BLON=1'b0;//notsupported;
wire[3:
0]key_BCD;
wirekey_pressed,LCDen;
wire[15:
0]data_a;
wire[15:
0]data_b;
wire[15:
0]data_a_bin;
wire[15:
0]data_b_bin;
wire[1:
0]math_choice;
wire[15:
0]data_result;
wire[15:
0]data_BCD;
key_sacnkey(.CLOCK_50(CLOCK_50),
.reset(RST),
.row(ROW),
.col(Column),
.key_value(key_BCD),
.key_down(key_pressed),
.LCD_EN(LCDen)
);
LCD_Controlleru5(//HostSide
.iCLK(CLOCK_50),
.iRST_N(DLY_RST),
.W_en(LCDen),
.key_in(key_BCD),
.result(data_BCD),
//LCDSide
.LCD_DATA(LCD_D_1),
.LCD_RW(LCD_RW_1),
.LCD_EN(LCD_EN_1),
.LCD_RS(LCD_RS_1));
//ResetDelayTimer
Reset_Delayr0(.iCLK(CLOCK_50),.oRESET(DLY_RST));
key_controllU1(.clk(CLOCK_50),
.key_in(key_BCD),
.EN(key_pressed),
.a(data_a),
.b(data_b),
.math(math_choice)
);
BCD_to_BinU2(.data_in(data_a),
.data_out(data_a_bin)
);
BCD_to_BinU3(.data_in(data_b),
.data_out(data_b_bin)
);
mathU4(.a(data_a_bin),
.b(data_b_bin),
.math_in(math_choice),
.result(data_result)
);
Bin_to_BCDU5(.bin(data_result),
.BCD(data_BCD)
);
endmodule
附录二:
key_sacn
modulekey_sacn
(
inputCLOCK_50,
inputreset,
input[3:
0]row,
outputreg[3:
0]col,
outputreg[3:
0]key_value,
outputLCD_EN,
outputkey_down
);
reg[14:
0]count;
reg[2:
0]state;//?
?
?
?
regkey_flag;//?
?
?
?
?
regkey_flag_dly;//?
?
?
?
?
regkey_flag_dly1;//?
?
?
?
?
regkey_flag_dly2;//?
?
?
?
?
regkey_flag_dly3;//?
?
?
?
?
regkey_flag_dly4;//?
?
?
?
?
regkey_flag_dly5;//?
?
?
?
?
regkey_flag_dly6;//?
?
?
?
?
regCLOCK_1khz;//周期为1ms
reg[3:
0]col_reg;//?
?
?
?
?
?
reg[3:
0]row_reg;//?
?
?
?
?
?
always@(posedgeCLOCK_50ornegedgereset)
if(!
reset)
begin
CLOCK_1khz<=0;
count<=0;
end
else
begin
if(count>=25000)
begin
CLOCK_1khz<=~CLOCK_1khz;
count<=0;
end
elsecount<=count+1;
end
always@(posedgeCLOCK_1khzornegedgereset)
if(!
reset)begincol<=4'b0000;state<=0;end
else
begin
case(state)
0:
begin
col[3:
0]<=4'b0000;
key_flag<=1'b0;
if(row[3:
0]!
=4'b1111)
begin
state<=1;col[3:
0]<=4'b1110;
end//判断是否有按键被按下
elsestate<=0;
end
1:
begin
if(row[3:
0]!
=4'b1111)
begin
state<=5;
end//?
?
?
?
?
?
?
?
elsebeginstate<=2;col[3:
0]<=4'b1101;end//?
?
?
?
?
end
2:
begin
if(row[3:
0]!
=4'b1111)
begin
state<=5;
end//?
?
?
?
?
?
?
?
else
begin
state<=3;
col[3:
0]<=4'b1011;
end//?
?
?
?
?
end
3:
begin
if(row[3:
0]!
=4'b1111)
begin
state<=5;
end//?
?
?
?
?
?
?
?
?
elsebeginstate<=4;col[3:
0]<=4'b0111;end//?
?
?
?
?
end
4:
begin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DE2 开发 计算器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)