书签 分享 收藏 举报 版权申诉 / 10
上传文档赚钱

类型PLD实验报告参考模板范本.doc

  • 上传人(卖家):林田
  • 文档编号:3331301
  • 上传时间:2022-08-20
  • 格式:DOC
  • 页数:10
  • 大小:207.63KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《PLD实验报告参考模板范本.doc》由用户(林田)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    PLD 实验 报告 参考 模板 范本
    资源描述:

    1、PLD实验报告 实验内容:用4*3键盘作为输入,在8*8的LED显示屏上采用动画过度的效果显示相应的字符,并以两个按键作为复位和字符循环播放模式。电路结构:1.4*3数字键盘键盘的按键识别方式采用行扫描,实际电路中由于列输入端在悬空时被内部电路拉高而呈逻辑1,所以需要使用低电平作为行扫描标志,相应的,列接收端以低电平作为有效信号。由于按键存在一定的抖动,所以在扫描时可以采用较低的扫描频率,也可以通过计数器保证一次按键的有效识别。2.8*8的LED显示屏:8*8LED显示屏可采用行扫描来进行显示,行以高电平作为扫描标志连接某一行的二极管的阳极,而列以低电平作为二极管的阴极输出。但由于FPGA驱动

    2、能力有限,不可能同时驱动一整排的LED灯管,所以实验板上采用反向器提高其驱动能力,相应的在FPGA端,应使用以低电平作为标志的行扫描信号。3. 普通按键电路板上有四个被电路拉高为逻辑1的按键,在按键时呈现低电平,作为复位信号以及字符循环显示的模式选择。程序结构:1. 字符矩阵采用常量的方式存储大量的字符显示所需的矩阵信息:TYPE romtable IS ARRAY (0 TO 7) OF STD_LOGIC_VECTOR(7 DOWNTO 0);CONSTANT zero:romtable:=romtable(11000011, 10111101, 10111101, 10111101, 1

    3、0111101,10111101, 10111101, 11000011);CONSTANT one:romtable:=romtable(11100111, 11000111, 11100111, 11100111, 11100111,11100111, 11100111, 11000011);CONSTANT two:romtable:=romtable(11000011, 10011001, 10111001, 11111011, 11110111,11101111, 11011111, 10000001);CONSTANT three:romtable:=romtable(110000

    4、11, 11111001, 11111101, 11100011, 11111101,11111101, 11111001, 11000011);CONSTANT four:romtable:=romtable(11110111, 11101111, 11011111, 10110111, 10110111,10000001, 11110111, 11110111);CONSTANT five:romtable:=romtable(11000001, 11011111, 11000011, 11111001, 11111101,11111101, 10111001, 11000011);CON

    5、STANT six:romtable:=romtable(11110111, 11101111, 11011111, 10100011, 10111101,10111101, 10111101, 11000011);CONSTANT seven:romtable:=romtable(10000001, 11111101, 11111011, 11110111, 11101111,11011111, 11011111, 11011111);CONSTANT eight:romtable:=romtable(11000011, 10111101, 10111101, 11000011, 10111

    6、101,10111101, 10111101, 11000011);CONSTANT nine:romtable:=romtable(11000011, 10111101, 10111101, 10111101, 11000001,11111101, 11111101, 11000011);CONSTANT star:romtable:=romtable(11111111, 11101111, 10101101, 11000011, 11101111,11010111, 10111011, 11111111);CONSTANT sharp:romtable:=romtable(11111111

    7、, 11011011, 10000001, 11011011, 11011011,10000001, 11011011, 11111111);CONSTANT act1:romtable:=romtable(00000000, 00000000, 00000000, 00011000, 00011000,00000000, 00000000, 00000000);CONSTANT act2:romtable:=romtable(00000000, 00000000, 00111100, 00111100, 00111100,00111100, 00000000, 00000000);CONST

    8、ANT act3:romtable:=romtable(00000000, 01111110, 01111110, 01111110, 01111110,01111110, 01111110, 00000000);CONSTANT act4:romtable:=romtable(11111111, 11111111, 11111111, 11111111, 11111111,11111111, 11111111, 11111111);CONSTANT window1:romtable:=romtable(00000000, 00000000, 00111100, 00100100, 00100

    9、100,00111100, 00000000, 00000000);CONSTANT window2:romtable:=romtable(00000000, 01111110, 01000010, 01000010, 01000010,01000010, 01111110, 00000000);CONSTANT window3:romtable:=romtable(11111111, 10000001, 10000001, 10000001, 10000001,10000001, 10000001, 11111111);CONSTANT window4:romtable:=romtable(

    10、00000000, 00000000, 00000000, 00000000, 00000000,00000000, 00000000, 00000000);对应的图像如下:其中前12个对应键盘上的字符,而最后8个用作动画的窗。2.分频器整个程序使用一个PROCESS作为分频模块,采用多次渐进分频的方法,提供多种频率信号的输出,程序如下:SIGNAL clk4:STD_LOGIC:=0;SIGNAL clk5:STD_LOGIC:=0;SIGNAL clk6:STD_LOGIC:=0;clocks:PROCESS(clk,reset)VARIABLE clk1:STD_LOGIC_VECTOR

    11、(7 DOWNTO 0):=00000000;VARIABLE clk2:STD_LOGIC_VECTOR(7 DOWNTO 0):=00000000;VARIABLE clk3:STD_LOGIC_VECTOR(7 DOWNTO 0):=00000000;BEGINIF reset=0 THEN-在需要的时候重置分频器参数。clk1:=00000000;clk2:=00000000;clk3:=00000000;ELSIF RISING_EDGE(clk) THEN-计数器工作,采用系统时钟50MHz,端口“Y11”clk1:=clk1+1;IF clk1=11111010 THEN-250

    12、clk1:=00000000;clk2:=clk2+1;END IF;IF clk2=11111010 THEN-clk2每计数到250时跳变为0clk2:=00000000;clk3:=clk3+1;clk5=NOT clk5;-clk5产生400Hz的信号,作为8*8LED显示屏的扫描频率的8倍END IF;IF clk3=00100000 THEN-clk3每计数到32时跳变为0clk3:=00000000;clk4=NOT clk4;-clk4产生12Hz的信号,作为数字键盘的扫描频率的4倍END IF;clk6=clk3(5);END IF;END PROCESS;3. 数字键盘扫描

    13、:采用clk4信号作为扫描时钟,同时使用复位信号reset进行复位,程序如下:SIGNAL rowtemp:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;scan:PROCESS(clk4,reset)-update rowVARIABLE rowtemp00:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;-采用内部信号进行计数。BEGINIF reset=0 THEN rowtemp00:=0000;rowtemp=0000;row rowtemp00:=0011;WHEN0011= rowtemp00:=0110;WHEN0110= rowt

    14、emp00:=1001;WHEN1001= rowtemp00:=0000;WHEN OTHERS= rowtemp00:=0000;END CASE;CASE rowtemp00 ISWHEN0000= row row row row row=0111;END CASE;rowtemp lastcount=count00;-有新的有效按键输入,存储上一次按键count00:=rowtemp+0001;-由行地址和列地址生成字符地址dcount lastcount=count00;count00:=rowtemp+0010;dcount lastcount=count00;count00:=r

    15、owtemp+0011;dcount lastcount=count00;count00:=count00;IF dcount/=11 THEN dcount=dcount+1; END IF;END CASE;ELSIF style=0 THEN-字符循环显示功能lastcount count00:=0010;WHEN0010= count00:=0011;WHEN0011= count00:=0100;WHEN0100= count00:=0101;WHEN0101= count00:=0110;WHEN0110= count00:=0111;WHEN0111= count00:=1000

    16、;WHEN1000= count00:=1001;WHEN1001= count00:=1010;WHEN1010= count00:=1011;WHEN1011= count00:=1100;WHEN1100= count00:=0001;WHEN OTHERS= count00:=0001;END CASE;END IF;count=count00;colout=col;count2=count00;END IF;END PROCESS;按键(字符地址)第1列第2列第3列第1行1(0001)2(0010)3(0011)第2行4(0100)5(0101)6(0110)第3行7(0111)8(

    17、1000)9(1001)第4行*(1010)0(1011)#(1100)5.字符显示使用50Hz的刷屏速度,将上一个按键所对应的矩阵与本次按键所对应多的矩阵分别与act和lastact相乘后相加,再与边框矩阵window相加得到需要显示的矩阵,示例如下:若上一个字符为0,本次字符为4:若上一个字符为2,本次字符为#:程序如下:showkey:PROCESS(clk5,reset)VARIABLE rowtemp2:STD_LOGIC_VECTOR(7 DOWNTO 0):=00000000;VARIABLE ncol2:INTEGER RANGE 0 TO 7:=0;VARIABLE act:

    18、romtable;VARIABLE window:romtable;VARIABLE lastact:romtable;VARIABLE col2temp:STD_LOGIC_VECTOR(7 DOWNTO 0):=00000000;VARIABLE col2temp2:STD_LOGIC_VECTOR(7 DOWNTO 0):=00000000;BEGINIF reset=0 THEN-清除存储的案件所对应的字符信息rowtemp2:=11111111;ncol2:=0;row2=11111111;col2 rowtemp2:=11111101;ncol2:=1;-ncol2便于提取显示字符

    19、的每一行信息WHEN11111101= rowtemp2:=11111011;ncol2:=2;WHEN11111011= rowtemp2:=11110111;ncol2:=3;WHEN11110111= rowtemp2:=11101111;ncol2:=4;WHEN11101111= rowtemp2:=11011111;ncol2:=5;WHEN11011111= rowtemp2:=10111111;ncol2:=6;WHEN10111111= rowtemp2:=01111111;ncol2:=7;WHEN01111111= rowtemp2:=11111110;ncol2:=0;

    20、WHEN OTHERS= rowtemp2:=11111110;ncol2:=0;END CASE;row2 act:=act1;window:=window1;WHEN01= act:=act2;window:=window2;WHEN10= act:=act3;window:=window3;WHEN11= act:=act4;window:=window4;WHEN OTHERS= act:=act4;window:=window4;END CASE;FOR i IN 0 TO 7 LOOP-lastact = NOT actlastact(i):=NOT act(i);-上一次按键对应

    21、的动作矩阵lastact-与本次按键所对应的动作矩阵act相反END LOOP;CASE count IS-形成本次按键所对应字符矩阵的显示范围WHEN0001= col2temp:=one(ncol2) AND act(ncol2);WHEN0010= col2temp:=two(ncol2) AND act(ncol2);WHEN0011= col2temp:=three(ncol2) AND act(ncol2);WHEN0100= col2temp:=four(ncol2) AND act(ncol2);WHEN0101= col2temp:=five(ncol2) AND act(n

    22、col2);WHEN0110= col2temp:=six(ncol2) AND act(ncol2);WHEN0111= col2temp:=seven(ncol2) AND act(ncol2);WHEN1000= col2temp:=eight(ncol2) AND act(ncol2);WHEN1001= col2temp:=nine(ncol2) AND act(ncol2);WHEN1010= col2temp:=star(ncol2) AND act(ncol2);WHEN1011= col2temp:=zero(ncol2) AND act(ncol2);WHEN1100= c

    23、ol2temp:=sharp(ncol2) AND act(ncol2);WHEN OTHERS= col2temp:=11111111 AND act(ncol2);END CASE;CASE lastcount IS-形成上一次按键所对应字符矩阵的显示范围WHEN0001= col2temp2:=(one(ncol2) AND lastact(ncol2);WHEN0010= col2temp2:=(two(ncol2) AND lastact(ncol2);WHEN0011= col2temp2:=(three(ncol2) AND lastact(ncol2);WHEN0100= co

    24、l2temp2:=(four(ncol2) AND lastact(ncol2);WHEN0101= col2temp2:=(five(ncol2) AND lastact(ncol2);WHEN0110= col2temp2:=(six(ncol2) AND lastact(ncol2);WHEN0111= col2temp2:=(seven(ncol2) AND lastact(ncol2);WHEN1000= col2temp2:=(eight(ncol2) AND lastact(ncol2);WHEN1001= col2temp2:=(nine(ncol2) AND lastact(

    25、ncol2);WHEN1010= col2temp2:=(star(ncol2) AND lastact(ncol2);WHEN1011= col2temp2:=(zero(ncol2) AND lastact(ncol2);WHEN1100= col2temp2:=(sharp(ncol2) AND lastact(ncol2);WHEN OTHERS= col2temp2:=(11111111 AND lastact(ncol2);END CASE;col2=(col2temp OR col2temp2) AND (NOT window(ncol2);-添加边框后形成最后的输出矩阵END

    26、IF;END PROCESS;6. 实体信息entity numberkeyboard is Port ( clk : in STD_LOGIC; style : in STD_LOGIC; reset : in STD_LOGIC; row : out STD_LOGIC_VECTOR (3 downto 0);-from 1 to 4 col : in STD_LOGIC_VECTOR (2 downto 0); colout : out STD_LOGIC_VECTOR (2 downto 0); count2 : out STD_LOGIC_VECTOR (3 downto 0); r

    27、ow2 : out STD_LOGIC_VECTOR (7 downto 0); col2 : out STD_LOGIC_VECTOR (7 downto 0);end numberkeyboard;实验小结:1. 模块化编程将每一个大的模块分开写便于中间调试,但每一个模块尽量完成一个较为完整的功能,而不必将模块的适应性过于高,从而节省有限的FPGA资源。分频器采用多次渐进分频也是处于这个考虑。2. 状态机每一个模块均采用状态机的方法进行编写,层次清晰也不容易出现综合错误。3. 调试为了便于调试,利用8个发光二极管或其他显示端作为程序内部的一些关键信息的输出,便于快速定位错位的位置。4. 常见综合错误(1) SIGNAL信号在不同的PROCESS中出现赋值语句。(2) 将SIGNAL信号的赋值出现在两块复杂的语句中。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:PLD实验报告参考模板范本.doc
    链接地址:https://www.163wenku.com/p-3331301.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库