如果需要发送端不断地接收新的数据,而发送端的数据传输率低就需要一个缓冲器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串口发送以及把众多文件变成“黑匣子”用于其它工程的调用的更多相关文章

  1. RX232串口发送

    在进行工程调试的时候有时候需要对变量进行观察,SingnaTap II Logic Analyzer 只能对管脚进行观察,所以要观察内部的变量必须把内部的变量进行输出.一种方法是直接把变量定义成管脚通 ...

  2. 基于Verilog的带FIFO写入缓冲的串口发送接口封装

    一.模块框图及基本思路 tx_module:串口发送的核心模块,详细介绍请参照前面的“基于Verilog的串口发送实验” fifo2tx_module:当fifo不为空时,读取fifo中的数据并使能发 ...

  3. A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包

    A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...

  4. WPF内实现与串口发送数据和接收数据

    原文:WPF内实现与串口发送数据和接收数据 与串口发送数据和接收数据,在此作一个简单的Demo.此Demo可以实现按下硬件按钮,灯亮,发送灯状态数据过来.并且可以实现几个灯同时亮,发送灯的状态数据过来 ...

  5. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  6. 89c52串口发送接收小示例

    //串口发送 void sendChar(char *p)//调用前关中断,调用完成后关中断 { while(*p != '\0') { SBUF = *P while(!TI); TI = 0; p ...

  7. 纠错:基于FPGA串口发送彩色图片数据至VGA显示

    今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...

  8. 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

    串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

  9. 基于Verilog的串口发送程序

    一.模块框图及基本思路 tx_bps_module:波特率时钟产生模块 tx_control_module:串口发送的核心控制模块 tx_module:前两个模块的组合 control_module: ...

随机推荐

  1. hdu 6197 array array array LIS

    正反跑一次LIS,取最大的长度,如果长度大于n-k就满足条件. ac代码: #include <cstdio> #include <cstring> #include < ...

  2. (五)Struts之Action类基础(二)

    上一章节末((三)Struts之Action类基础(一))介绍了如何获取用户输入数据的获取.接着就是在Struts中怎么把数据响应给用户端,这就必须要求我们把数据放到作用域中,然后才能显示到用户浏览器 ...

  3. (二十)SpringBoot之集成mybatis:使用mybatis注解

    一.使用mybatis注解的集成 1.1 引入maven依赖 <dependencies> <dependency> <groupId>org.springfram ...

  4. Effective Java 读书笔记(三):类与接口

    1 最小化类和成员的可访问性 (1)封装 封装对组成系统的组件进行解耦,从而允许这些组件独立开发,测试,优化,使用,理解和修改. 封装提高了软件的复用性,因为组件间的耦合度低使得它们不仅在开发环境,而 ...

  5. 解决 Linux grep 不高亮显示

    今天偶然发现一个问题,在 grep 日志的过程中,搜出来一大坨但是被 grep 的那一段未高亮显示,属实有些难受,高亮显示是 Linux 的高亮本来就是 Linux 的功能,与连接工具(我用的 xsh ...

  6. .NetCore如何使用ImageSharp进行图片的生成

    ImageSharp是对NetCore平台扩展的一个图像处理方案,以往网上的案例多以生成文字及画出简单图形.验证码等方式进行探讨和实践. 今天我分享一下所在公司项目的实际应用案例,导出微信二维码图片, ...

  7. WPF 自定义一个控件,当点击按钮是触发到ViewModel(业务逻辑部分)和Xaml路由事件(页面逻辑部分)

    #region - 用于绑定ViewModel部分 - public ICommand Command { get { return (ICommand)GetValue(CommandPropert ...

  8. [JZOJ5888]GCD生成树

    [JZOJ5888]GCD生成树 题目链接 gugugu 分析 对于N很小的情况,暴力Prim即可 对于值域很小的情况,我的想法与solution不太一样,将值相同的缩成一个点,\(O(w^2)\)预 ...

  9. 【多进程】php实现 master-worker 守护多进程模式

    <?php class Worker{ public static $count = 2; public static function runAll(){ static::runMaster( ...

  10. Vivado Bit文件压缩

    前言 Vivado编译生成的Bit文件太大,想要小一点该咋办呢?那么就需要给bit文件瘦身. 流程 直接在约束文件xdc中添加下述语句即可: set_property BITSTREAM.GENERA ...