NEXYS 3开发板练手--USB UART(三)
2014-01-16 15:11
225 查看
接着上一篇,今天我们来建立一个能用于实际工程中的DEMO。
首先,为了使我们的发送机不像上一个DEMO一样无节制的循环发送,我们需要修改代码,增加使发送机停止发送的控制部分,修改后的代码如下:
`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: lwy // // Create Date: 23:02:53 11/12/2013 // Design Name: // Module Name: PulTri // Project Name: // Target Devices: // Tool versions: // Description: 这个模块用来产生pulsewide个时钟宽度的脉冲(高电平)而不关心触发信号脉冲宽度是多少,该模块的输出脉冲宽度固定为pulsewide个时钟周期 // // Port Descriptions: clk -- 系统时钟,他关系到最后的输出脉冲宽度 // reset_n -- 系统复位信号,低电平复位 // start -- 触发信号端口,高电平触发 // pulse -- 输出脉冲,该脉冲宽度固定为 // // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // pulsewide这里定义为一常数5,可以根据需要调整 // ////////////////////////////////////////////////////////////////////////////////// module PulTri( clk, reset_n, start, pulse ); input clk,reset_n,start; output reg pulse; parameter pulsewide = 50;//调整触发脉冲的宽度,pulsewide*clk reg counten; reg [7:0] count; initial begin counten <= 0; count <= 0; pulse <= 0; end //计数器启动标记,表示一次延时计数开始 always @ ( posedge clk ) begin if ( reset_n == 1'b0 ) counten <= 1'b0; else begin if ( start == 1'b1 ) counten <= 1'b1; else if ( start == 1'b0 && count > pulsewide ) counten <= 1'b0; end end //延时计数器,保证延时 pulsewide 个时钟周期 always @ ( posedge clk ) begin if ( reset_n == 1'b0 ) count <= 0; else begin if ( counten == 1'b0 ) count <= 0; else if ( counten == 1'b1 && count <= pulsewide ) count <= count + 1; else if ( counten == 1'b0 && start == 1'b0 ) count <= 0; end end //输出定宽脉冲 always @ ( negedge clk ) begin if ( reset_n == 'b0 || count >= pulsewide ) pulse <= 1'b0; else if ( counten == 1'b1 ) pulse <= 1'b1; end endmoduleView Code
为了验证它是否达到了我们预先的目的,我在modelsim中进行了仿真,得到下面的波形图:
start信号是我们的随机触发信号(在这个DEMO中即是按键信号),我们发现无论这个start信号的脉宽是多少,最后得到的pulse信号的宽度都是一定的,在上面的代码中我们知道它的宽度为pulsewide*clk,是我们可以设定的(仿真中pulsewide为5),说明这个模块达到了我们预先的目的。其实,这个模块在实际的应用中是很有价值的,我们可以理解为它将一种非理想的状况转换成了一种接近理想的状况。
最后,我们的将编译生成的bit数据流文件下载进板子中,能在PC的超级终端(或则串口调试助手)中得到下面的结果:
可见,上面的DEMO与上一篇文章中的相比已经有了很大的改观,这是一个真正有实用价值的DEMO!如果我们像Quartus中一样将它做成一个SOPC嵌入式IP核,将顶层模块中的string和strLen这两个常数改成能用软件设置的寄存器,这样我们就能在软件中编程完成各种字符的发送工作,这是不是很有意义呢!
相关文章推荐
- NEXYS 3开发板练手--USB UART(二)
- NEXYS 3开发板练手--USB UART(一)
- NEXYS 3开发板练手--LED与数码管时钟
- nexys3练手——USB—UART初探秘
- 【连载】【FPGA黑金开发板】NIOSII那些事儿--USB主机模式(二十一)
- ubuntu 连接开发板(串口转USB)的PUTTY、secureCRT、kermit设置
- 如何将arm log从usb切换到uart出来(展讯)
- 熙熙-如何用USB将WinCE与PC同步(天嵌开发板,ARM)
- TQ2440开发板学习纪实(7)--- 基于中断的UART串口接收
- s5pv210开发板linux系统检验USB鼠标是否能用?
- S5PV210开发板刷机(SD卡uboot、串口+USB-OTG刷机方法)
- USB_Mega 调试1 --- 开发板测试
- KitProg USB-UART驱动 安装失败终结贴
- linux 开发板(Linux USB Gadget) 模拟u盘
- rk3288开发板Ubuntu没有ttyUSB(串口转USB驱动--cp210x, ftdi, pl2303)
- USB协议和UART对比分析
- I2C,SPI,UART,USART,USB 的区别及串行总线的选择
- STM32F4 discovery 开发板 UART1 问题
- 关于TQ2440通过Jlink下载Uboot到开发板的方法(不能识别自己板子的norflash型号,且不能安装USB)
- 6410开发板通过USB烧写u-boot,kernel,system