基于fpga的通用外设电路设计_毕业设计(论文)(编辑修改稿)内容摘要:
y,clk66MHz)。 input clk66MHz。 output clk,clkss,clksy。 reg clk,clkss,clksy。 reg[9:0] count1。 reg[6:0] count2。 reg[7:0] count3。 reg[5:0] count4。 reg cin1,cin2。 always @(posedge clk66MHz) if(count1[9:0]==1039。 d999) begin count1[9:0]=1039。 d0。 cin1=139。 d1。 //产生进位信号 1 end else begin count1[9:0]=count1[9:0]+1039。 d1。 cin1=139。 d0。 //进位信号 1 清零 end always @(posedge clk66MHz) if(count2[7:0]==839。 d131) begin count2[7:0]=839。 d0。 clksy=~clksy。 //clksy=250Hz cin2=139。 d1。 //产生进位信号 2 end else begin count2[7:0]=count2[7:0]+cin1。 //若进位信号 1 为 1 则加 1,为 0 则 不变 cin2=139。 d0。 //进位信号 2 清零 end always @(posedge clk66MHz) if(count3[7:0]==839。 d249) begin count3[7:0]=839。 d0。 clk=~clk。 //clk=1Hz end else count3[7:0]=count3[7:0]+cin2。 //若进位信号 2 为 1 则加 1,为 0 则 不变 always @(posedge clk66MHz) if(count4[5:0]==639。 d49) begin count4[5:0]=639。 d0。 东华理工大学毕业(设计)论文 第 3 章 系统程序设计 10 clkss=~clkss。 //clkss=5Hz end else count4[5:0]=count4[5:0]+cin2。 endmodule 行列式键盘程序设计 相对 if 语句只有两个分支而言, else 语句是一种多分支语句,故 case 语句多用于条件译码电路,本设计的行列式键盘模块采用 case 语句键盘译码。 利用 250Hz 信号扫描 X 轴和 Y 轴电位信号,当某根 X 连接线和 Y 连接线同时为低电平时有效。 键盘去抖功能: 按键在闭合和断开时 ,触点会存在抖动现象,本设计采用 250Hz低频信号,触发判定为 clk 信号上升沿 和下降沿 ,也就是在 40ms 时间内 会 有 两次 判定, 如果两次判定均为同一键位,则输出 键值 , 否则输出为 0, 可以消除触点抖动的负面作用。 示意图如下: 图 32 去抖示意图 图示为两次按键,第一次 按键时间极短,可视为一次抖动,第二次为正常按键(时间较长,可以 是 多个 CLK 周期,图示只列出 1 个周期),现分析如下: 图示 1 处:读取 key1 为低 ; 图示 2 处:读取 key2 为高 ; 结果: key 为 0,判定无按键。 图示 1 处:读取 key1 为低 ; 图示 2 处:读取 key2 为低 ; 结果: key 为对应键位值,判定有按键。 程序如下: module keypad(clksy,x,y,key)。 //clksy=64hz input clksy。 input[3:0] x,y。 //4*4 key ,low active output[5:0] key。 reg[5:0] key1,key2。 always @(posedge clksy) //第一次判定 begin 东华理工大学毕业(设计)论文 第 3 章 系统程序设计 11 case({~y[3:0],~x[3:0]}) 839。 b00010001:key1[5:0]=639。 d1。 839。 b00010010:key1[5:0]=639。 d2。 839。 b00010100:key1[5:0]=639。 d3。 839。 b00011000:key1[5:0]=639。 d4。 839。 b00100001:key1[5:0]=639。 d5。 839。 b00100010:key1[5:0]=639。 d6。 839。 b00100100:key1[5:0]=639。 d7。 839。 b00101000:key1[5:0]=639。 d8。 839。 b01000001:key1[5:0]=639。 d9。 839。 b01000010:key1[5:0]=639。 d10。 839。 b01000100:key1[5:0]=639。 d16。 839。 b01001000:key1[5:0]=639。 d32。 839。 b10001000:key1[5:0]=639。 d48。 default:key1[5:0]=639。 d0。 //输出结果寄存在 key1 endcase end always @(negedge clksy) //第二次判定 begin case({~y[3:0],~x[3:0]}) 839。 b00010001:key2[5:0]=639。 d1。 //键位 1 839。 b00010010:key2[5:0]=639。 d2。 //键位 2 839。 b00010100:key2[5:0]=639。 d3。 //键位 3 839。 b00011000:key2[5:0]=639。 d4。 //键位 4 839。 b00100001:key2[5:0]=639。 d5。 //键位 5 839。 b00100010:key2[5:0]=639。 d6。 //键位 6 839。 b00100100:key2[5:0]=639。 d7。 //键位 7 839。 b00101000:key2[5:0]=639。 d8。 //键位 8 839。 b01000001:key2[5:0]=639。 d9。 //键位 9 839。 b01000010:key2[5:0]=639。 d10。 //键位 0 839。 b01000100:key2[5:0]=639。 d16。 //键位 ← 839。 b01001000:key2[5:0]=639。 d32。 //键位 → 839。 b10001000:key2[5:0]=639。 d48。 //键位 sel default:key2[5:0]=639。 d0。 //输出结果寄存在 key2 endcase 东华理工大学毕业(设计)论文 第 3 章 系统程序设计 12 end assign key=(key1==key2)?key1:639。 d0。 //判定 如果两次结果相同 则输出为 //键值 如果不同 则输出为 0 endmodule 六位 7 段 LED 显示程序设计 联华众科 FPGA 开发板 FA130 的数码显示为六位 7 段共 阴 极 数码管, 其工作特点是,当笔段电极接高电平,公共阴极接低 电平时,相应笔段发光。 本模块同时具有 片选, 七段译码,灭零功能。 本模块由 250Hz 信号驱动,采用动态显示方法,即对六个 LED 数码管循环扫描。 分时使用显示器驱动电路。 可得每个数码管显示频率为 250/6≈42Hz,人眼视觉暂留时间的要求为 25 帧每秒, 可达到要求。 程序如下 : module xianshi(clksy,a,b,c,d,e,f,g,D0,D1,D2,D3,D4,D5,num0,num1,num2,num3,num4,num5)。 input clksy。 input[3:0] num0,num1,num2,num3,num4,num5。 //num0num5 为时分秒 6 位输入 output a,b,c,d,e,f,g,D0,D1,D2,D3,D4,D5。 //ag 为数码管 7 段电平 reg a,b,c,d,e,f,g,D0,D1,D2,D3,D4,D5。 //D0D5 为片选信号 reg[3:0] num10,num11,num12,num13,num14,num15。 reg[3:0] temp。 reg[2:0] flag。 always@(posedge clksy) begin {D0,D1,D2,D3,D4,D5}=639。 b000000。 if(flag==6) flag=0。 else flag=flag+1。 {num10,num11,num12,num13,num14,num15}={num0,num1,num2,num3,num4,num5}。 if(num15==0) //首位灭零 num15=439。 bzzzz。 case(flag) //片选 0:begin temp=num10。 D0=1。 end 1:begin temp=num11。 D1=1。 end 2:begin temp=num12。 D2=1。 end 东华理工大学毕业(设计)论文 第 3 章 系统程序设计 13 3:begin temp=num13。 D3=1。 end 4:begin temp=num14。 D4=1。 end 5:begin temp=num15。 D5=1。 end default:temp=0。 endcase case(temp) //七段译码 439。 d0:{a,b,c,d,e,f,g}=739。 b1111110。 //显示数字 0 439。 d1:{a,b,c,d,e,f,g}=739。 b0110000。 //显示数字 1 439。 d2:{a,b,c,d,e,f,g}=739。 b1101101。 //显示数字 2 439。 d3:{a,b,c,d,e,f,g}=739。 b1111001。 //显示数字 3 439。 d4:{a,b,c,d,e,f,g}=739。 b0110011。 //显示数字 4 439。 d5:{a,b,c,d,e,f,g}=739。 b1011011。 //显示数字 5 439。 d6:{a,b,c,d,e,f,g}=739。 b1011111。 //显示数字 6 439。 d7:{a,b,c,d,e,f,g}=739。 b1110000。 //显示数字 7 439。 d8:{a,b,c,d,e,f,g}=739。 b1111111。 //显示数字 8 439。 d9:{a,b,c,d,e,f,g}=739。 b1111011。 //显示数字 9 default:{a,b,c,d,e,f,g}=739。 b0000000。 //无任何显示 endcase end endmodule 顶层模块程序设计 根据设计思路 ,画出流程图 ,见 33。 程序是无限循环,也就是到了流程图结束的地方后又会回到开始,程序首先判定是否有键按下,如果有,则判定键值:若键值为 ← 或 → 移动键,则会修改 flag 的值,有前文所述, flag 的值代表时分秒的个 、 十位;若键值为 Sel 修改键,则会改变 sel寄存器的值,设计需求是按一次 Sel键将会进入修改状态,再按一次将退出修改状态,方案为设定 sel 寄存器为 1 位。 程序接下来会判断 sel 的值,如果为 1 则进入修改状态,为零则进入计时状态。 在修改状态下,程序再次判定键值,若为数字键,则会将对应数据赋值给 flag 所对应缓存,若为 ← 或 → 移动键,则会修改 flag 的值,若为 Sel 修改 /确认键,将退出修改状态。 东华理工大学毕业(设计)论文 第 3 章 系统程序设计 14 图 33 顶层模块设计流程图 东华理工大学毕业(设计)论文 第 3 章 系统程序设计 15 在计时状态,程序将逐秒对秒缓存加 1, 判断:若秒低位为 9,则秒低位清零,秒高位加一; 判断:若秒高位为 5,则秒高位清零,分低位加一; 判断:若分低位为 9,则分低位清零,分高位加一; 判断:若分高位为 5,则分高位清零,时低位加一; 判断:若时低位 为 9,则时低位清零,时高位加一; 判断:若时高低位为 23,则时清零。 程序到这里还没有结束,关于修改位闪烁的方案,我将它和输出管脚赋值整合在一起,首先 判定是否为修改状态,若是,则将该修改数据和 5Hz 频率相与再赋值给输出。基于fpga的通用外设电路设计_毕业设计(论文)(编辑修改稿)
相关推荐
reg[6:0] count2。 reg[7:0] count3。 reg[5:0] count4。 reg cin1,cin2。 always @(posedge clk66MHz) if(count1[9:0]==1039。 d999) begin count1[9:0]=1039。 d0。 cin1=139。 d1。 //产生进位信号 1 end else begin count1[9
及低功耗: FPGA 的现场可编程性,使用户可以反复地编程、擦除、使用,或者保持在外围电路不变的情况下,采用不同设计就可以实现不同的功能。 这种现场可编程性给产品的快速开发及产品的升级带来了极大的灵活性。 此外,随着半导体技术的发展, FPGA 的功耗不断降低,非常适合于要求低功耗设备的场合。 因此,利用 FPGA 实现预测控制器,能满足 新应用对预测控制器高实时性、微型化
XIV The Design of Handhold Interphone Based on FX224 Student : school of electronic information engineering Teacher: school of electronic information engineering [ABSTRACT] In this paper, I
INT82DEV_OE83IN484GCLCK11IN12DEV_OE3VCCINT4I/O0/DATA75I/O1/DATA66I/O2/DATA57I/O3/DATA48I/O4/DATA39I/O5/DATA210I/O6/DATA111D A T A 012D C L K13n C E14T D I15I / O 716I / O 817I / O 918I / O 1019V C C
( 6) 灵活高效的全局时钟网络,提高设计性能 ,开发板上提供48MHz 的晶振频率 ; ( 7) 在封装上, A3P030 有 132QFN 和 100VQFP 两种 ,此工程用的是开发板是 100VQFP 封装型号 ; LiberoIDE 是 Actel FPGA 的集成开发环境 ,提供完整的 FPGA 设计工具,支持原理图, HDL 输入,并以用户 GUI 的方式显示 FPGA 的设计过程
4)用 C 语言完成了系统中单片机控制的的软件设计。 ( 5)对频率计的系统性能进行分析,通过分析得出,本设计的测频范围是~50MHz,测量精度为百万分之一,被测信号的幅度为。 本文分 5 章介绍了基于 FPGA 的等精度数字频率计的设计原理、设计步骤,性能分析等。 兰州交通大学毕业设计(论文) 3 2 系统设计的相关理论 频率测量方法的研究 常用测频方案 在电子技术中,频率是最基本的参数之一