串口收 程序FPGA
module detect_module
(
CLK,RSTn,
RX_Pin_In,
H2L_Sig
);
input CLK;
input RSTn;
input RX_Pin_In;
output H2L_Sig;
reg H2L_F1;
reg H2L_F2;
always@(posedge CLK or negedge RSTn)
if(!RSTn) //有无复位
begin
H2L_F1<=1'b1;
H2L_F2<=1'b1; //非阻塞语句
end
else
begin
H2L_F1<=RX_Pin_In;
H2L_F2<=H2L_F1;
end
assign H2L_Sig=H2L_F2&!H2L_F1; //有低时,H to L 输出高电平
endmodule
module rx_bps_module
(
CLK,RSTn,
Count_Sig,
BPS_CLK
);
input CLK;
input RSTn;
input Count_Sig;
output BPS_CLK;
reg[12:0]Count_BPS;
always@(posedge CLK or negedge RSTn)
if(!RSTn)
Count_BPS<=13'd0;
else if(Count_BPS==12'd5207) //9600 bps 传输速度使一位数据的周期是 0.000104166666666667s 。
Count_BPS<=13'd0; //以50Mhz时钟频率要得到上述的定时需要: N = 0.000104166666666667 / ( 1 / 50Mhz ) = 5208
else if(Count_Sig)
Count_BPS<=Count_BPS+1'b1;
else
Count_BPS<=13'd0;
assign BPS_CLK=(Count_BPS==13'd2604)? 1'b1 : 1'b0; //采集数据要求“在周期的中间”,那么结果是 5208 / 2 ,BPS_CLK为采样时钟
endmodule
module rx_control_module
(
CLK,RSTn,
H2L_Sig,RX_Pin_In,BPS_CLK,RX_En_Sig,
Count_Sig,RX_Data,RX_Done_Sig
);
input CLK;
input RSTn;
input H2L_Sig;
input RX_En_Sig;
input RX_Pin_In;
input BPS_CLK;
output Count_Sig;
output [7:0]RX_Data;
output RX_Done_Sig;
reg [3:0] i;
reg [7:0] rData;
reg isCount;
reg isDone;
always@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
i<=4'd0;
rData<=8'd0;
isCount<=1'b0;
isDone<=1'b0;
end
else if(RX_En_Sig)
case(i)
4'd0:
if(H2L_Sig) begin i<=i+1'b1; isCount<=1'b1;end
4'd1:
if(BPS_CLK) begin i<=i+1'b1;end
4'd2,4'd3,4'd4,4'd5,4'd6,4'd7,4'd8,4'd9:
if(BPS_CLK) begin i<=i+1'b1;rData[i-2]<=RX_Pin_In;end
4'd10:
if(BPS_CLK) begin i<=i+1'b1;end
4'd11:
if(BPS_CLK) begin i<=i+1'b1;end
4'd12:
begin i<=i+1'b1;isDone<=1'b1;isCount<=1'b0;end
4'd13:
begin i<=1'b0;isDone<=1'b0;end
endcase
assign Count_Sig=isCount;
assign RX_Data=rData;
assign RX_Done_Sig=isDone;
endmodule
module rx_module
(
CLK,RSTn,
RX_Pin_In,RX_En_Sig,
RX_Done_Sig,RX_Data
);
input CLK;
input RSTn;
input RX_Pin_In;
input RX_En_Sig;
output [7:0]RX_Data;
output RX_Done_Sig;
wire H2L_Sig;
detect_module U1
(
.CLK(CLK),
.RSTn(RSTn),
.RX_Pin_In(RX_Pin_In), //input from top
.H2L_Sig(H2L_Sig) //output to U3
);
wire BPS_CLK;
rx_bps_module U2
(
.CLK(CLK),
.RSTn(RSTn),
.Count_Sig(Count_Sig), //input from U3
.BPS_CLK(BPS_CLK) // output to U3
);
wire Count_Sig;
rx_control_module U3
(
.CLK(CLK),
.RSTn(RSTn),
.H2L_Sig(H2L_Sig), //input from U1
.RX_En_Sig(RX_En_Sig), //input from top
.RX_Pin_In(RX_Pin_In), //input from top
.BPS_CLK(BPS_CLK), //input from U2
.Count_Sig(Count_Sig), //output to U2
.RX_Data(RX_Data), //output to top
.RX_Done_Sig(RX_Done_Sig) //output to top
);
endmodule
转载于:https://www.cnblogs.com/April1314/p/3425365.html
串口收 程序FPGA相关推荐
- STM32的USART串口通讯程序(查询方式)
STM32的USART串口通讯程序(查询方式) 文章目录 STM32的USART串口通讯程序(查询方式) 一.USART介绍 1.异步通信: 2.同步通信: 二.CubeMX创建项目 1.点击ACCE ...
- 基于STM32的USART串口通讯程序
文章目录 一.串口协议和RS-232.485标准,以及RS232.485电平与TTL电平的区别,USB/TTL转232模块的工作原理 1.串口协议 2.RS-232.RS-485标准 3.RS232. ...
- 简单的串口助手程序开发
1.简介 之前在烽火集团实习的时候,开发串口通信程序用的都是纯C++.感觉串口程序开发很考验人的逻辑思考能力.不过,现在好了,科研工作中,一切已存在的"利器"都可以用来为自己的&q ...
- 基础问题:在一个 Activity 中定义的串口接收程序,如果 Activity 切换到其它 Activity 后还能接收到串口数据吗?...
====================问题描述==================== RT:基础问题:在一个 Activity 中定义的串口接收程序,如果 Activity 切换到其它 Activ ...
- qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)
Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...
- C#编写串口通信程序(转)
一.概述 在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通 过对此控件的属性和事件 ...
- 详解 Qt 串口通信程序全程图文 (5)
Qt 串口通信程序全程图文是本文介绍的内容,本节也是最后一节,本节主要讲述的是解决一下重要问题的说明: (下面所说的第一个程序是指第一节中写的那个程序,第二个程序是指第三节更改完后的程序,第三个程序是 ...
- 详解 Qt 串口通信程序全程图文 (4)
Qt 串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题. 1.在窗口中加入一些组合框Combo Box,它们的名称及条目如下: 串口:portName ...
- 详解 Qt 串口通信程序全程图文 (3)
Qt 串口通信程序全程图文是本文要介绍的内容,下面的程序在第一部分中所写的程序上进行了一些改进.加入打开和关闭串口,发送数据等功能. 1.加入了"打开串口","关闭串口& ...
- 详解 Qt 串口通信程序全程图文 (2)
Qt 串口通信程序全程图文是本文介绍的内容,上一部分中已经介绍了实现最简单的串口接收程序的编写,下面将对程序内容进行分析. 1.首先应说明操作串口的流程 步骤一:设置串口参数,如:波特率,数据位,奇偶 ...
最新文章
- 蓝桥杯-表达式计算(java)
- 【MySQL】 已经存在大量数据的表做分区
- 第一季6:海思方案中uboot、kernel和rootfs的烧写方法
- 【面向对象】泛化与继承
- android mux协议,GSM 07.10 MUX 协议驱动解析
- ajax中加入if,如何添加if语句到Ajax
- 山东大学机电信息学院计算机网络,山东大学机电与信息工程学院2021考研复试考核内容...
- 获取图片外链的方法--网易相册
- 微信计步器怎么不计步_微信计步器怎么用?微信计步器在哪里?
- mysql straight join_MySQL基础之STRAIGHT JOIN用法简介
- 跨考计算机日程记录01
- k8s集群搭建(亲测有效)
- uni-app使用Hbuilder X如何苹果手机IOS打包、发布、运行
- VR虚拟展厅产品展示如何实现的
- ios 黑魔法 解决问题
- 做前端的我准备玩Arduino
- Gitlab Pages 启用
- 怎么在电脑上看磁盘分配单元的大小_Win10系统如何磁盘分区,今天小黑来教你,看完涨知识了!...
- 录音转文字实用工具(可互转)
- 第三方应用分享到微信朋友圈功能