带发送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: ...
随机推荐
- 基于Task的多线程
/// <summary> /// 基于Task的多线程 /// </summary> public class Tasks { public static void Task ...
- java 字符串处理的
@Test public void testString(){ /*字符串处理 */ String email="123456789@qq.com"; System.out.pri ...
- 使用paypal-php-sdk开发php国际支付
参考:https://github.com/paypal/PayPal-PHP-SDK/wiki https://blog.csdn.net/markely/article/details/79044 ...
- 虚拟机Vmware使用记录
一直使用的是docker for windows,但是总会出现能打包,能打tag,但是push超时,所以想着弄个虚拟机来实现. 第一步: 安装VMware,安装一个ubantu最新的系统. 第二步: ...
- 结合python实现的netcat与python实现的tcp代理,建立一个流量隧道
在proxy中 python2 proxy.py 127.0.0.1 3334 192.158.1.111 80 true 作为服务器在本地3334端口进行监听, 作为客户端连接远程web服务器192 ...
- 同步/异步/阻塞/非阻塞/BIO/NIO/AIO
转摘自:https://www.cnblogs.com/lixinjie/p/a-post-about-io-clearly.html 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HT ...
- git基本命令总结
介绍 上一篇博客介绍了git的基本使用方式,建议可以去阅读一下廖雪峰关于git的文章写的十分详细,并且通俗易懂,这篇博客主要是总结上一篇博客中用到的git命令,方便使用查询. git常用命令小结 gi ...
- 03 WIndows编程——手绘函数调用过程
源码 #include<Windows.h> #include<stdio.h> int MessageBoxPrint(char *szFormat, ...); int W ...
- Nginx系列1.1:ubuntu16.04编译nginx-rtmp流媒体服务器
1.下载nginx和nginx-rtmp-module nginx官网:nginx.org tar.gz文件 解压缩命令: wget https://nginx.org/download/nginx- ...
- 【shell】ping加时间戳回复
ping 192.168.2.1 -c 10 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) } ' ...