如果需要发送端不断地接收新的数据,而发送端的数据传输率低就需要一个缓冲器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. scratch少儿编程第一季——05、移动还可以这样动

    各位小伙伴大家好: 上期我们学习了怎么控制方向和移动的程序块. 今天我们继续学习运动模块下的其他9个指令(程序块). 首先来看前面两个关于x坐标的程序块. 分别是将x坐标增加()单位,和将x坐标设定为 ...

  2. Scratch教程:谁是真悟空

    在西游记中,有一集是“真假悟空”,六耳猕猴变成了悟空的模样与真悟空真假难辨,打的不可开交. 在Scartch中,我们常常会使用一个本体来生成多个克隆体,这在开发过程中有重要的意义.但在实际操作中,每个 ...

  3. adb链接时报错误10061解决方法

    首先打开开发者选项然后依次操作: 1. 将安卓设备usb连接到电脑 2. 设备链接到wifi 3. Ping设备ip,检查是否可通信 4. 在cmd依次输入以下命令: 5. adb usb 6. ad ...

  4. hdu 1114需要装满的完全背包 重点是背包初始化的问题

    .,. 最近在看背包九讲 所以就刷了一下背包的题目 这道题目是一个典型的完全背包问题 而且要求满包 在这里 我就简单整理一下背包初始化问题吧 对于没有要求满包的问题 也就是背包可以不取满的问题 在背包 ...

  5. vue实现web登陆权限控制

    实现原理:vueRouter控制前端页面跳转路由,当登录成功后,返回用户登录token信息,将token信息放到store中,router路由跳转取store中状态有token时,当取到token时跳 ...

  6. SQL Server 2017 左补齐

    DECLARE @NUM CHAR(3)='7  'SELECT RIGHT('0000000'+CONVERT(VARCHAR(50),1+ RTRIM(@NUM)),7) ​​​​

  7. 十一、微信小程序-var、let、const用法详解

    let命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ...

  8. 抓某音乐播放器时现在多了个vkey,导致播放地址有问题,如何抓到vkey

    一:在已经通过axios和vue-cli本地服express通过地址获取到songmid这个参数 在js里面地址和参数如下: // 获取歌手和歌曲的详细信息 export function getSi ...

  9. S2-032

    前言 S2-032漏洞的影响范围是Struts 2.3.20 - Struts Struts 2.3.28,当开启了动态方法调用时可RCE.这次的漏洞分析以及后面的漏洞分析都是使用的Struts 2. ...

  10. 通过Nginx统计网站的PV、UV、IP

    转载:通过Nginx统计网站的PV.UV.IP 概念 UV:独立访客:以cookie为依据,假设一台电脑装有3个不同的浏览器,分别打开同一个页面,将会产生3个UV.PV:访问量:页面每访问或刷新一次, ...