当前位置:文档之家› 实验三 4X4 键盘输入显示控制器

实验三 4X4 键盘输入显示控制器

实验三4X4 键盘输入显示控制器1.实验目的学习quartusii 和modelsim的使用方法;学习原理图和veriloghdl混合输入设计方法;掌握4X4 键盘输入显示控制器的设计及仿真方法。

2.实验原理根据下面电路图,设计4X4 键盘输入显示控制器,在kx3c10F+开发板上实现该电路,并作仿真。

简述4X4 键盘检测键号的原理。

其中FPGA内部电路如下图所示:设计其中的K4X4模块和DECL7S模块的verilogHDL代码,并作出整个系统仿真。

2.1 4X4 键盘检测键号的原理在应用中,当按下按键后,为了能够辨别和读取键信息,一种比较常用的方法是,向A 口扫描输入一组分别只含一个0的4位数据,如1110,1101,1011等。

若有按键按下,则B 口一定会输出对应的数据,这时,只要结合啊A,B口的数据,就能判断出键的位置。

如当键S0按下,对于输入的A=1110,那么输出的B=0111。

于是{B,A}=0111_1110就成了S0的代码。

2.2 4X4阵列按键程序代码module key4(input CLK,input[3:0]A,output reg[3:0]B,R); //定义模块名和输入输出端口reg[1:0] C; //定义一个2位寄存器变量initial beginC=0; //初始化变量cendalways @(posedge CLK) //每一个上升沿使C加1beginC<=C+1;case (C) //case选择语句0:B<=4'B0111;1:B<=4'B1011;2:B<=4'B1101;3:B<=4'B1110;endcasecase({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;endcase endendmodule //模块结束效果图:2.3七段数码管代码module segled(out1,a); //定义模块名和输入输出端口input [3:0]a; //输入一个3位矢量output [6:0]out1; //输出一个6位矢量reg [6:0]out1; //reg型变量用于always语句always@(a) //敏感信号abegincase(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;endcaseendendmodule //模块结束效果图:2.4综合模块代码(无PLL锁相环)// Copyright (C) 1991-2013 Altera Corporation// Your use of Altera Corporation's design tools, logic functions// and other software and tools, and its AMPP partner logic// functions, and any output files from any of the foregoing// (including device programming or simulation files), and any// associated documentation or information are expressly subject// to the terms and conditions of the Altera Program License// Subscription Agreement, Altera MegaCore Function License// Agreement, or other applicable license agreement, including,// without limitation, that your use is for the sole purpose of// programming logic devices manufactured by Altera and sold by// Altera or its authorized distributors. Please refer to the// applicable agreement for further details.// PROGRAM "Quartus II 64-Bit"// VERSION "Version 13.1.0 Build 162 10/23/2013 SJ Web Edition" // CREATED "Mon Apr 10 15:12:37 2017"module board(CLK,A,B,OUT1);input wire CLK;input wire [3:0] A;output wire [3:0] B;output wire [6:0] OUT1;wire [3:0] SYNTHESIZED_WIRE_0; segled b2v_inst(.a(SYNTHESIZED_WIRE_0),.out1(OUT1));key4 b2v_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.测试模块代码:module test;reg CLK; //将输入时钟定义为寄存器变量reg [3:0]A; //将输入定义为寄存器变量wire [3:0]B; //将输出定义为wire型变量wire [6:0]OUT1;initial begin //变量初始化CLK=0;A=0;endalways #50 CLK=~CLK; //时钟信号always @(posedge CLK) //上升沿触发输入A的值begin#400 A=4'B0111;#400 A=4'B1011;#400 A=4'B1101;#400 A=4'B1110;endboard u1(.CLK(CLK),.A(A),.B(B),.OUT1(OUT1)); //例化元件endmodule2.modesim仿真图:仿真图解释:对于测试模块一共用到四个变量,两个输入和两个输出。

输出的变量的值由程序完成,而输入clk时钟信号通过always语句很容易给出,然后只需要通过一个case语句在不同的时间段给A附上对应的值就行,测试模块即可完成。

通过仿真图可以看到每一个A的值持续8个CLK时钟的时间与程序对应,B的值持续2个CLK时钟(即一个上升沿),out与B一一对应输出相应的七段数码管断码,A,B的组合与对应的断码相同。

相关主题