带发送FIFO缓冲的RX232串口发送以及把众多文件变成“黑匣子”用于其它工程的调用
如果需要发送端不断地接收新的数据,而发送端的数据传输率低就需要一个缓冲器FIFO来缓冲数据。当你为别人做项目只是想实现功能而不想让自己的代码让别人看到,想保护自己的算法时,你可以用以下的方法。我使用的是quartus II 13。
参照:
http://www.cnblogs.com/adamite/p/qxp_vqm.html
http://blog.sina.com.cn/s/blog_6276d01c01010izc.html
以下为底层工程文件代码:
module RX232(input clkin,input CLK50,input write,input [:] datain,output TX );//write =2cycle
reg read;
wire [:]dataout;
wire empty;
wire full;
reg EN=;
wire endtck;
reg [:]count=;
wire clk9600;
alt_9600 M0(CLK50,clk9600);
//assign clk9600=CLK50;
FIFO M1(.clkin(clkin),.write(write),.datain(datain),.clkout(CLK50),.read(read),.dataout(dataout),.empty(empty),.full(full));
RX232_IN M2(.CLK9600(clk9600),.datain(dataout),.TX(TX),.EN(EN),.endtck(endtck)); always@(posedge CLK50)
begin
if((!empty)&(endtck) )begin read<=; EN=;end
else read<=;
// if(read) begin count<=count+1; if(count==3) begin count<=0 ;EN=1;end end
if(read) begin read<=;end
if((!read)&(!endtck)) EN<=; end endmodule
module RX232_IN(input CLK9600,input [:] datain,output reg TX,input EN,output reg endtck); reg [:] temp1;
reg [:] temp;
reg [:] count=;
reg[:] num=; always@(posedge CLK9600)
begin
endtck<=;
case(num)
:begin if(EN) begin num<=;endtck<=;end end
:begin endtck<=;num<=;end
:begin num<=;temp<=datain;endtck<=;end
:begin TX<=;num<=;temp1<=temp;endtck<=;end
:begin count<=count+;endtck<=;if(count<) begin temp1<=temp1>>;TX<=temp1[];num<=;end else begin count<=; num<=;end end
:begin TX<=;endtck<=;num<=;end
endcase
end
endmodule
module FIFO(input clkin,input write,input [:] datain,input clkout,input read,output reg [:] dataout,output reg empty,output reg full);
reg [:]stack[:];
reg [:]data_in_point=;
reg [:] data_in_count=;
reg [:]data_out_point=;
reg [:] data_in_num=;
reg[:] data_out_num=;
reg empty1;
always@(posedge clkin)
begin case(data_in_num)
:begin full<=; data_in_num<=;empty1<=;end
:if(write) begin if((data_in_count-data_out_point)>'h3fff) begin full<=1;data_in_num<=1;end else begin data_in_point<=data_in_count[9:0];data_in_num<=2;full<=0;end end
:begin stack[data_in_point]<=datain;data_in_count<=data_in_count+;data_in_num<=;empty1<=;end
endcase end
always@(posedge clkout)
begin case(data_out_num)
:if(empty1)begin data_out_num<=;end else begin if((data_in_count-data_out_point)==) begin empty<=; data_out_num<=;end else begin empty<=;data_out_num<=;end end
:if(read) begin dataout<=stack[data_out_point];data_out_num<=;if(data_out_point=='h3fff)data_out_point<=0; else data_out_point<=data_out_point+1; end else data_out_num<=1;
endcase end endmodule
以下为生成“黑匣子”以及调用过程。
1、源工程和目标工程器件必须一致。先对源工程进行全编译,然后点击project-》Export Design Partition 生成RX232.qxp文件
2、把RX232.qxp加入到目标工程,新建实例化文件。然后点击Processing-》Start-》Start Analysis &Elaboration。
以下为目标工程文件代码:
module RX(input CLK50,output TX);
reg write;
reg [:] datain;
RX232 M0(CLK50,write,datain,TX);
always@(posedge CLK50)
begin
write<=;
datain<='haa;
end
endmodule
带发送FIFO缓冲的RX232串口发送以及把众多文件变成“黑匣子”用于其它工程的调用的更多相关文章
- RX232串口发送
在进行工程调试的时候有时候需要对变量进行观察,SingnaTap II Logic Analyzer 只能对管脚进行观察,所以要观察内部的变量必须把内部的变量进行输出.一种方法是直接把变量定义成管脚通 ...
- 基于Verilog的带FIFO写入缓冲的串口发送接口封装
一.模块框图及基本思路 tx_module:串口发送的核心模块,详细介绍请参照前面的“基于Verilog的串口发送实验” fifo2tx_module:当fifo不为空时,读取fifo中的数据并使能发 ...
- A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包
A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...
- WPF内实现与串口发送数据和接收数据
原文:WPF内实现与串口发送数据和接收数据 与串口发送数据和接收数据,在此作一个简单的Demo.此Demo可以实现按下硬件按钮,灯亮,发送灯状态数据过来.并且可以实现几个灯同时亮,发送灯的状态数据过来 ...
- C#串口通信—向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
- 89c52串口发送接收小示例
//串口发送 void sendChar(char *p)//调用前关中断,调用完成后关中断 { while(*p != '\0') { SBUF = *P while(!TI); TI = 0; p ...
- 纠错:基于FPGA串口发送彩色图片数据至VGA显示
今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...
- 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
- 基于Verilog的串口发送程序
一.模块框图及基本思路 tx_bps_module:波特率时钟产生模块 tx_control_module:串口发送的核心控制模块 tx_module:前两个模块的组合 control_module: ...
随机推荐
- win10系统ping另一台电脑上虚拟机的IP
刚刚因为虚拟机与主机没法互相ping通的事情,奋战到将近凌晨一点.现在把这个过程总结一下,以方便后加入该行业的广大IT精英. VMWare提供了三种工作模式:bridged(桥接模式).NAT(网络地 ...
- (五)Activiti之查看最新版本的流程定义
一.查看最新版本的流程定义 因为每个流程定义都可能会有好几个版本,所以有时候我们有这样的需求,查询出最新版本的流程定义的集合 第一步:我们通过Activiti接口来获取根据流程定义Version升序排 ...
- jQuery_jQuery的两把利器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PHP代码多人开发
我们一定遇到过这样的情况:许多项目是由多个人同时开发的,涉及到不同的开发环境和测试环境我们的许多PHP工程师在windows上开发代码虽然nginx+PHP+MySQL的环境也可以在windows上配 ...
- (详细)JAVA使用JDBC连接MySQL数据库(2)- MySQL Connectors
欢迎任何形式的转载,但请务必注明出处. 本节内容 mysql connectors介绍 下载安装 在java中配置 点击进入官网下载 一.mysql connectors介绍 mysql connec ...
- Mysql基础学习_Windows版(一)
1.Mysql简介 Mysql是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.所谓的关系型数据库,是建立在关系模型基础上的 ...
- 下拉框选择 <from:select>
- UIApplicationDelegate里面最常用的几个函数执行顺序小结
(1)点击桌面图标正常启动App或者杀死进程后点击推送消息启动App 1.application:willFinishLaunchingWithOptions 2.application:applic ...
- cocos发布遇到的问题
学习第二天,用官方的demo进行打包,出现以下问题: 第一个问题: 报错信息:scene 没有保存,请先保存相关信息再进行构建. 解决方案:ctrl+s保存即可,一开始没注意前面的英文是场景的意思 第 ...
- 跨平台打开一个URL的方法
unit u_urlOpen; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System ...