可编程逻辑器件原理、应用与实验课程实验报告--LED控制.docx_第1页
可编程逻辑器件原理、应用与实验课程实验报告--LED控制.docx_第2页
可编程逻辑器件原理、应用与实验课程实验报告--LED控制.docx_第3页
可编程逻辑器件原理、应用与实验课程实验报告--LED控制.docx_第4页
可编程逻辑器件原理、应用与实验课程实验报告--LED控制.docx_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

xx电子科技大学可编程逻辑器件原理、应用与实验 课程实验报告实验名称 LED控制 成 绩 研究生院 学院 xx 班姓名 学号14 同作者 实验日期 2017 年 6 月 16 日指导教师评语: 指导教师: 年 月 日实验报告内容基本要求及参考格式一、实验目的二、实验所用仪器(或实验环境)三、实验基本原理及步骤(或方案设计及理论计算)四、实验数据记录(或仿真及软件设计)五、实验结果分析及回答问题(或测试环境及测试结果)实验一、LED控制一、 实验目的目的:使用六个拨码开关控制六个LED的亮灭,搭建开发环境,熟悉开发流程,掌握该开发班的调试方法;二、 实验所用仪器(或实验环境)开发环境:(1) 基于Cyclone EP2C35FPGA的 ICETEK-EP2C35-A评估板(图1);(2) PC 机一台,开发软件为Quartus II 13.0 。图1 开发板三、 实验基本原理及步骤(或方案设计及理论计算)实验基本原理:在FPGA中通过拨码开关来控制LED,编写代码如下:module led (SYS_RESET,SYS_CLKIN,SW,LED);input SYS_RESET,SYS_CLKIN;input wire6:1 SW;output wire6:1 LED;assign LED = SW;endmodule实验步骤:1. 新建文件夹,命名为LED,打开软件Quartus II 13.0;2. 建立工程并选器件;3. 编辑代码;4. 综合;5. 管脚分配在Quartus II 13.0主界面中,点击Pin planner,进行管脚分配,具体配置如下:图2 管脚映射6. 烧写程序:在Quartus II 13.0主界面中,点击Programmer图标,选择工程产生的sof文件,完成烧写;7. 观察实验现象。四、 实验数据记录(或仿真及软件设计)实验现象:拨动拨码开关SW1SW6可以分别控制LED1LED6的亮灭。图3 实验现象五、 实验结果分析及回答问题(或测试环境及测试结果)通过本次实验,安装了USB-Blaster驱动,搭建了基于Quartus II 13.0的开发环境,完成了程序的烧写,熟悉了该开发板的调试流程,为后续的实验打下了基础。xx电子科技大学可编程逻辑器件原理、应用与实验 课程实验报告实验名称 VGA控制器的设计与实现 成 绩 研究生院 学院 xx 班姓名 王冠雄 学号 1600030024 同作者 实验日期 2017 年 6 月 16 日指导教师评语: 指导教师: 年 月 日实验报告内容基本要求及参考格式一、实验目的二、实验所用仪器(或实验环境)三、实验基本原理及步骤(或方案设计及理论计算)四、实验数据记录(或仿真及软件设计)五、实验结果分析及回答问题(或测试环境及测试结果)实验二、VGA控制器的设计与实现一、 实验目的目的:设计VGA控制器,驱动电脑显示器;功能要求:使用开发板上的VGA接口连接电脑显示器,使显示器显示相应图案,分辨率为640480,刷新频率为60Hz,支持一键复位。二、 实验所用仪器(或实验环境)开发环境:(1) 基于Cyclone EP2C35FPGA的 ICETEK-EP2C35-A评估板(图1);(2) PC 机一台,开发软件为Quartus II 13.0;(3) 液晶显示器一台,VGA数据线一根。图1 开发板三、 实验基本原理及步骤(或方案设计及理论计算)实验基本原理:如VGA原理图(图2)所示,FPGA产生30路RGB数据(RGB各10路)经过DA转换芯片ADV7123转化为三路RGB模拟信号输出,并由板载VGA接口引出,并由FPGA产生VGA_CBLK、VGA_SYN、VGA_PCLK信号来控制三路DA转换后的RGB信号的输出,VGA_HSYNC为行扫描信号,VGA_VSYNC位列扫描信号,行列扫描信号控制屏幕的分辨率和刷新速率。图2 VGA接口原理图具体控制策略如下:VGA_R9:0 :红色数据信号输入;VGA_G9:0 :绿色数据信号输入;VGA_B9:0 :蓝色数据信号输入;VGA_HSYNC :行扫描信号,由下列部分构成;本实验中设定分辨率为640480,基准时钟25MHz,场频60Hz,行频31.25KHz,那么行扫描时序设置如下(单位:基准时钟周期);a:行同步时期,扫描地址复位,低电平,持续长度96;b:行消隐后肩,数据建立时间 ,高电平,持续长度48;c:行显示时期,数据有效区域,高电平,持续长度640;d:行消隐前肩,扫描地址转移的准备,高电平,持续长度16;e:行扫描总时间,一行扫描的总时间,持续长度800。VGA_VSYNC :列扫描信号;本实验中设定分辨率为640480,基准时钟25MHz,场频60Hz,行频31.25KHz,那么列扫描时序设置如下(单位:行扫描周期);a:场同步时期,扫描地址复位,低电平,持续长度2;b:场消隐后肩,数据建立时间 ,高电平,持续长度33;c:场显示时期,数据有效区域,高电平,持续长度480;d:场消隐前肩,扫描地址转移的准备,高电平,持续长度10;e:场扫描总时间,一场扫描的总时间,持续长度800。VGA_SYN :复合同步信号,用于消隐;本实验中取VGA_SYN = VGA_HSYNC & VGA_VSYNC;VGA_CBLK :复合消隐控制信号,当为低电平时,RGB共30路数字信号输入无效,模拟输出为灰电平,用于消隐,因此本实验中取VGA_SYN = VGA_HSYNC & VGA_VSYNC;VGA_PCLK :用于锁存数据的基础时钟,上升沿时锁存数据;本实验中取VGA_PCLK = CLK(行扫描时钟,25MHz)。(a) 行扫描时序(b) 列扫描时序(c) 总体时序图3 VGA_SYN 和VGA_HSYNC信号时序verilog代码:module vga (RESET,CLK,VGA_R,VGA_G,VGA_B,VGA_HSYNC,VGA_PCLK,VGA_CBLK,VGA_SYN,VGA_VSYNC);input RESET,CLK;output reg9:0 VGA_R,VGA_G,VGA_B;output wire VGA_PCLK,VGA_CBLK,VGA_SYN;output reg VGA_HSYNC,VGA_VSYNC;reg10:0 h_count;reg10:0 v_count;define H_FRONT 11d16 /行扫描时序参数define H_SYNC 11d96 define H_BACK 11d48 define H_DISP 11d640 define H_TOTAL 11d800 define V_FRONT 11d10 /列扫描时序参数define V_SYNC 11d2 define V_BACK 11d33 define V_DISP 11d480 define V_TOTAL 11d525assign VGA_SYN = VGA_HSYNC & VGA_VSYNC;assign VGA_CBLK = VGA_HSYNC & VGA_VSYNC;/0assign VGA_PCLK = CLK;/行扫描always(posedge CLK or negedge RESET)beginif(0 = RESET)beginVGA_HSYNC = 0;h_count = 0;endelsebeginif(0 = h_count)beginVGA_HSYNC = 0;h_count = h_count+1;endelse if(H_SYNC = h_count)beginVGA_HSYNC = 1;h_count = h_count+1;endelse if(H_TOTAL-1) = h_count)h_count = 0;elseh_count = h_count+1;endend/列扫描,每完成1次行扫描,列扫描计数加1(即换行)always(negedge h_count9 or negedge RESET)beginif(0 = RESET)beginVGA_VSYNC = 0;v_count = 0;endelsebeginif(0 = v_count)beginVGA_VSYNC = 0;v_count = v_count+1;endelse if(V_SYNC-1) = v_count)beginVGA_VSYNC = 1;v_count = v_count+1;endelse if(V_TOTAL-1) = v_count)v_count = 0;elsev_count = v_count+1;endend/控制RGB信号的输出和显色的区域always(posedge CLK or negedge RESET)beginif(0 = RESET)beginVGA_R = 10d0;VGA_G = 10d0;VGA_B (H_SYNC+H_BACK+199) & h_count(V_SYNC+V_BACK+100) & v_count(V_SYNC+V_BACK+V_DISP-100)beginVGA_R = 10b1111111111;VGA_G = 10d0;VGA_B = 10d0;endelsebeginVGA_R = 10d0;VGA_G = 10d0; VGA_B = 10d0;endendendendmodule实验步骤:1. 新建文件夹,命名为LED,打开软件Quartus II 13.0;2. 建立工程并选器件;3. 编辑代码;4. 综合;5. 管脚分配在Quartus II 13.0主界面中,点击Pin planner,进行管脚分配,具体配置如下:图4 管脚映射6. 连接VGA线,并烧写程序:在Quartus II 13.0主界面中,点击Programmer图标,选择工程产生的sof文件,完成烧写;7. 观察实验现象。四、 实验数据记录(或仿真及软件设计)实验现象:如图5所示,电脑显示器上出现目标图案(一个红色方块,背景为黑色)。图5 实验现象五、实验结果分析及回答问题(或测试环境及测试结果)本实验主要通过ADV7123芯片将位宽为10位的数字信号转化为模拟信号再由VGA接口输出到显示器,从而增加了显色的色域,ADV7123芯片提供了BLANK信号和SYN信号的输入增强了VGA控制器在行列扫描时的稳定性;FPGA直接输出行扫描和列扫描信号来控制扫描,便于调节显示的分辨率和刷新率。我通过本实验学到了ADV7123芯片的驱动方法,VGA接口显示器的驱动原理,深刻了解了我们生活中显示器的成像原理,感到收获很大。xx电子科技大学可编程逻辑器件原理、应用与实验 课程实验报告实验名称 UART控制器的设计与实现 成 绩 研究生院 学院 xx 班姓名 王冠雄 学号 1600030024 同作者 实验日期 2017 年 6 月 16 日指导教师评语: 指导教师: 年 月 日实验报告内容基本要求及参考格式一、实验目的二、实验所用仪器(或实验环境)三、实验基本原理及步骤(或方案设计及理论计算)四、实验数据记录(或仿真及软件设计)五、实验结果分析及回答问题(或测试环境及测试结果)实验三、UART控制器的设计与实现一、 实验目的目的:设计UART控制器,实现与PC的通信;功能说明:(1) 该UART控制器主要功能为:接收PC机发来的数据,并且在接收完成后回传给PC;(2) 支持115200和9600两种波特率模式,可通过拨码开关选择模式;(3) LED2 LED6可以显示接收到数据的第五位;(4) 在minicom(类似超级终端)上支持回车换行功能;(5) 支持一键复位。二、 实验所用仪器(或实验环境)开发环境:(1) 基于Cyclone EP2C35FPGA的 ICETEK-EP2C35-A评估板(图1);(2) PC 机一台,开发软件为Quartus II 13.0;(3) 公转母串口转接线,串口转USB接口;(4) Linux下的串口通信终端minicom(类似于windos中的超级终端),该终端可以向串口发送数据,并显示出PC端接收的数据。图1 开发板三、 实验基本原理及步骤(或方案设计及理论计算)实验基本原理:波特率时钟在FPGA中对25MHz的系统时钟进行分频,得到相应的波特率时钟以及波特率16倍频的接受采样时钟,在程序中通过改变分频因子的大小就可以达到改变波特率的目的。例如,当分频因子为217时,此时串口波特率就为115200(25MHz/217),当分频因子为2604时,串口波特率为9600(25MHz/2604),使用拨码开关进行波特率因子的切换即可实现波特率可调。数据发送和接收原理基本的UART帧格式如图2所示:图2 URAT帧格式本实验中采用的数据帧,数据位为8位,起始位停止位都为1位,起始位为低电平,停止位为高电平,无校验位。采样时钟CLK_RXD,它是波特率的16倍,即串口上一个数据位长度会有16个CLK_RXD周期,如果在每个数据位的第8个CLK_RXD周期上采样,即在每个数据位的中间进行取样,这样可以使采样值更加准确可靠,此原理如图3所示。图3 采样原理本实验的UART控制器工作顺序大致为:(1) 分频模块:产生波特率时钟(传给发送模块)和采样时钟(传给接收模块);(2) 接收模块:接收PC端传来的数据,接收完成后将8位数据并行传递给发送模块,产生一个脉冲通知发送模块回传数据。(3) 发送模块:收到接收模块传来的数据和通知脉冲后,将收到的数据回传到PC,这样在minicom上就可以看到PC端发送给开发板的数据了。回车换行原理在minicom中,所有的数据都是以ascii码传送,在PC端上以字符的形式显示,当我们在PC端按下回车时,PC端向开发板发送字符r码值为0x0D,r的作用为回到行首,而通常我们按下回车时,光标除了要回到行首,还要进行换行,换行字符为n,码值为0x0A,显然按下回车后开发版仅仅回传一个r是无法实现换行功能的。 所以在本实验中,为了实现,UART控制器被设计成如果上一个回传的数据为r,那么接下来就向PC端回传一个n的字,从而实现换行。Verilog代码/顶层模块,采用了实例化的方法调用各个功能模块module test (SYS_CLKIN,SW,RXD0,RESET,TXD0,RESET_LED,LED);input SYS_CLKIN,RXD0,RESET;input wire6:1 SW;output wire6:1 LED;output wire TXD0;output wire RESET_LED;wire CLK_TXD,CLK_RXD;reg24:0 bote;reg 2:0 state;wire7:0 UART0_RX_Data;wire UART0_RX_Valid;assign LED6:2 = UART0_RX_Data4:0;assign RESET_LED = RESET;/波特率选择模块always(SW2) begin case(SW2)1b0:bote = 2604;/96001b1:bote = 217;/115200default:bote = 217;endcaseend/例化分频模块d1,产生波特率时钟CLK_TXDdiv d1(.CLK(SYS_CLKIN),.RESET(RESET),.bote(bote),.CLKOUT(CLK_TXD);/调用分频模块d2,产生采样时钟CLK_RXDdiv d2(.CLK(SYS_CLKIN),.RESET(RESET),.bote(bote/16),.CLKOUT(CLK_RXD);/例化接收模块r1,/输出接收到的数据UART0_RX_Data7:0和通知脉冲UART0_RX_Validrecv r1(.CLK(CLK_RXD),.RESET(RESET),.UART0_RX(RXD0),.UART0_RX_Data(UART0_RX_Data),.UART0_RX_Valid(UART0_RX_Valid);/例化发送模块r1,/收到UART0_RX_Data7:0和通知脉冲UART0_RX_Valid发送数据send s1(.CLK(CLK_TXD),.RESET(RESET),.SENDDATA(UART0_RX_Data),.UART0_RX_Valid(UART0_RX_Valid),.UART0_TX(TXD0);endmodule/分频模块module div(CLK,RESET,bote,CLKOUT);inputwire24:0 bote;input CLK,RESET;output reg CLKOUT;reg24:0 ClockCount;always (posedge CLK or negedge RESET)beginif(RESET = 0)CLKOUT = 0; elsebegin if(ClockCount=bote)beginCLKOUT = 1; ClockCount = 0;endelsebegin CLKOUT=0;ClockCount= ClockCount+1;endendendendmodule/接收模块module recv(CLK,RESET,UART0_RX,UART0_RX_Data,UART0_RX_Valid);input wire CLK,RESET,UART0_RX;output reg7:0 UART0_RX_Data;output reg UART0_RX_Valid;reg 7:0 m;reg sign; always (posedge CLK or negedge RESET)beginif(RESET=0) beginm=0;UART0_RX_Data = 8b11111111;endelse beginif(8h0D = UART0_RX_Data & 0 = sign)/判断rbeginif (180 = m)beginUART0_RX_Data = 8h0A;/输出n用于回传UART0_RX_Valid=1;m = 0;sign = 1;endelsem = m+1;endelsebegincase(m)/数据中段采样0: begin UART0_RX_Valid = 0; sign = 1;if(0 = UART0_RX)beginm=m+1;endelse beginm=0; end end24 :begin UART0_RX_Data0=UART0_RX;m=m+1;end40 :begin UART0_RX_Data1=UART0_RX;m=m+1;end56 :begin UART0_RX_Data2=UART0_RX;m=m+1;end72 :begin UART0_RX_Data3=UART0_RX;m=m+1;end88 :begin UART0_RX_Data4=UART0_RX;m=m+1;end104 :begin UART0_RX_Data5=UART0_RX;m=m+1;end120 :begin UART0_RX_Data6=UART0_RX;m=m+1;end136 :begin UART0_RX_Data7=UART0_RX;m=m+1;end152 :begin UART0_RX_Valid=1;m=m+1;end 168 : begin m=0;UART0_RX_Valid=0;sign=0;enddefault:m=m+1;endcaseendendendendmodule /发送模块module send(CLK,RESET,SENDDATA,UART0_RX_Valid,UART0_TX);input wire7:0 SENDDATA;input CLK,RESET,UART0_RX_Valid;output reg UART0_TX;wire9:0 Send_data;wire start;wire last;reg send_en,send_over;reg3:0 Send_count;assign start=0;assign last=1;assign Send_data = last,SENDDATA,start;always(posedge UART0_RX_Valid or negedge RESET or posedge send_over)beginif(0 = RESET)send_en = 0;else if(1 = send_over)send_en = 0;elsesend_en = 1;endalways (posedge CLK or negedge RESET)beginif(0 = RESET) beginSend_count =0 ;UART0_TX = 1;send_over = 0;endelsebeginif(1 = send_en)beginif(9 = Send_count)begin UART0_TX=Send_data9;Send_co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论