实验三 4X4 键盘输入显示控制器.docx
- 文档编号:27031569
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:12
- 大小:572.09KB
实验三 4X4 键盘输入显示控制器.docx
《实验三 4X4 键盘输入显示控制器.docx》由会员分享,可在线阅读,更多相关《实验三 4X4 键盘输入显示控制器.docx(12页珍藏版)》请在冰豆网上搜索。
实验三4X4键盘输入显示控制器
实验三4X4键盘输入显示控制器
1.实验目的
学习quartusii和modelsim的使用方法;
学习原理图和veriloghdl混合输入设计方法;
掌握4X4键盘输入显示控制器的设计及仿真方法。
2.实验原理
根据下面电路图,设计4X4键盘输入显示控制器,在kx3c10F+开发板上实现该电路,并作仿真。
简述4X4键盘检测键号的原理。
其中FPGA内部电路如下图所示:
设计其中的K4X4模块和DECL7S模块的verilogHDL代码,并作出整个系统仿真。
2.14X4键盘检测键号的原理
在应用中,当按下按键后,为了能够辨别和读取键信息,一种比较常用的方法是,向A口扫描输入一组分别只含一个0的4位数据,如1110,1101,1011等。
若有按键按下,则B口一定会输出对应的数据,这时,只要结合啊A,B口的数据,就能判断出键的位置。
如当键S0按下,对于输入的A=1110,那么输出的B=0111。
于是{B,A}=0111_1110就成了S0的代码。
2.24X4阵列按键程序代码
modulekey4(inputCLK,input[3:
0]A,outputreg[3:
0]B,R);//定义模块名和输入输出端口
reg[1:
0]C;//定义一个2位寄存器变量
initialbegin
C=0;//初始化变量c
end
always@(posedgeCLK)//每一个上升沿使C加1
begin
C<=C+1;
case(C)//case选择语句
0:
B<=4'B0111;1:
B<=4'B1011;2:
B<=4'B1101;3:
B<=4'B1110;
endcase
case({B,A})//B,A组成一个8位二进制数进行选择
8'B0111_1110:
R<=4'H0;
8'B0111_1101:
R<=4'H1;
8'B0111_1011:
R<=4'H2;
8'B0111_0111:
R<=4'H3;
8'B1011_1110:
R<=4'H4;
8'B1011_1101:
R<=4'H5;
8'B1011_1011:
R<=4'H6;
8'B1011_0111:
R<=4'H7;
8'B1101_1110:
R<=4'H8;
8'B1101_1101:
R<=4'H9;
8'B1101_1011:
R<=4'H0A;
8'B1101_0111:
R<=4'H0B;
8'B1110_1110:
R<=4'H0C;
8'B1110_1101:
R<=4'H0D;
8'B1110_1011:
R<=4'H0E;
8'B1110_0111:
R<=4'H0F;
endcaseend
endmodule//模块结束
效果图:
2.3七段数码管代码
modulesegled(out1,a);//定义模块名和输入输出端口
input[3:
0]a;//输入一个3位矢量
output[6:
0]out1;//输出一个6位矢量
reg[6:
0]out1;//reg型变量用于always语句
always@(a)//敏感信号a
begin
case(a)//case语句用于选择输出
4'b0000:
out1<=7'b0111111;
4'b0001:
out1<=7'b0000110;
4'b0010:
out1<=7'b1011011;
4'b0011:
out1<=7'b1001111;
4'b0100:
out1<=7'b1100110;
4'b0101:
out1<=7'b1101101;
4'b0110:
out1<=7'b1111101;
4'b0111:
out1<=7'b0000111;
4'b1000:
out1<=7'b1111111;
4'b1001:
out1<=7'b1101111;
4'b1010:
out1<=7'b1110111;
4'b1011:
out1<=7'b1111100;
4'b1100:
out1<=7'b0111001;
4'b1101:
out1<=7'b1011110;
4'b1110:
out1<=7'b1111001;
4'b1111:
out1<=7'b1110001;
endcase
end
endmodule//模块结束
效果图:
2.4综合模块代码(无PLL锁相环)
//Copyright(C)1991-2013AlteraCorporation
//YouruseofAlteraCorporation'sdesigntools,logicfunctions
//andothersoftwareandtools,anditsAMPPpartnerlogic
//functions,andanyoutputfilesfromanyoftheforegoing
//(includingdeviceprogrammingorsimulationfiles),andany
//associateddocumentationorinformationareexpresslysubject
//tothetermsandconditionsoftheAlteraProgramLicense
//SubscriptionAgreement,AlteraMegaCoreFunctionLicense
//Agreement,orotherapplicablelicenseagreement,including,
//withoutlimitation,thatyouruseisforthesolepurposeof
//programminglogicdevicesmanufacturedbyAlteraandsoldby
//Alteraoritsauthorizeddistributors.Pleaserefertothe
//applicableagreementforfurtherdetails.
//PROGRAM"QuartusII64-Bit"
//VERSION"Version13.1.0Build16210/23/2013SJWebEdition"
//CREATED"MonApr1015:
12:
372017"
moduleboard(
CLK,
A,
B,
OUT1
);
inputwireCLK;
inputwire[3:
0]A;
outputwire[3:
0]B;
outputwire[6:
0]OUT1;
wire[3:
0]SYNTHESIZED_WIRE_0;
segledb2v_inst(
.a(SYNTHESIZED_WIRE_0),
.out1(OUT1));
key4b2v_inst1(
.CLK(CLK),
.A(A),
.B(B),
.R(SYNTHESIZED_WIRE_0));
endmodule
效果图:
3.实验设备
kx3c10F+开发板,电脑。
4.实验步骤
4.1编译
4.1.1编译结果如下图所示:
编译解释:
在这个报告中,我们可以看到如下信息:
Total logic elements 16/5136(<1%):
该芯片中共有5136个LE资源,其中的16个在这个工程的这次编译中得到了使用。
Total combinational functions 16/5136(<1%):
该芯片的5136个LE资源中,其中16个用于实现组合逻辑。
Dedicated logic registers 10/5136(0%):
该芯片的5136个LE资源中,其中10个用于实现寄存器,即时序逻辑。
从上述信息中,可以得到组合逻辑与时序逻辑的使用比例——16/10= 1.6:
1。
软件仿真电路图
4.1.2综合出来的电路图
硬件仿真电路图
电路图解释:
从以上电路图可以看出本电路图主要由按键程序(key4)和七段数码管显示程序(segled)组成。
从key4的CLK端输入CLK信号,通过输入信号A[3..0]和输出信号B[3..0]的不同排列来进行按键的选择,然后由R[3..0]端将按键选择信号送到七段数码管进行显示,其中七段数码管是通过输入的四位二进制数来选择相应的断码进行输出显示。
4.2管脚分配
管脚连接:
通过双击Location选择与芯片上相应的引脚进行连接。
4.3仿真
1.测试模块代码:
moduletest;
regCLK;//将输入时钟定义为寄存器变量
reg[3:
0]A;//将输入定义为寄存器变量
wire[3:
0]B;//将输出定义为wire型变量
wire[6:
0]OUT1;
initialbegin//变量初始化
CLK=0;
A=0;
end
always#50CLK=~CLK;//时钟信号
always@(posedgeCLK)//上升沿触发输入A的值
begin
#400A=4'B0111;
#400A=4'B1011;
#400A=4'B1101;
#400A=4'B1110;
end
boardu1(.CLK(CLK),.A(A),.B(B),.OUT1(OUT1));//例化元件
endmodule
2.modesim仿真图:
仿真图解释:
对于测试模块一共用到四个变量,两个输入和两个输出。
输出的变量的值由程序完成,而输入clk时钟信号通过always语句很容易给出,然后只需要通过一个case语句在不同的时间段给A附上对应的值就行,测试模块即可完成。
通过仿真图可以看到每一个A的值持续8个CLK时钟的时间与程序对应,B的值持续2个CLK时钟(即一个上升沿),out与B一一对应输出相应的七段数码管断码,A,B的组合与对应的断码相同。
所以经验证仿真结果与理论值相同,所以仿真成功。
注:
本仿真是在4X4阵列按键程序代码case语句阻塞赋值下的结果,因非阻塞赋值有延迟仿真结果不易观察。
4.4下载验证
5.实验体会
通过本次实验学会了很多,从对Verilog代码的一知半解到基本上可以自己独立的编一个模块了。
也理清了很多迷惑好久的概念,比如测试文件待测模块输入要用reg型是因为输入信号是与待测试模块的输入信号相连的,而待测试文件输出信号定义为wire型是因为这些信号与待测模块的输出信号相连的,initial是一次性顺序块与always和assign三个语句不能互相嵌套等。
总之,通过不断分析程序查找错误能明白许多课堂上理解不了的知识,发现了Verilog也是一门有趣的课程,期待下一次实验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验三 4X4 键盘输入显示控制器 实验 X4 键盘输入 显示 控制器