串口接收端verilog代码分析

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: chensimin
//
// Create Date: 2018/05/23 16:14:30
// Design Name:
// Module Name: uart_rx
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////// module uart_rx( input wire clk,
input wire rxd,
output reg [:]data_i,
output wire receive_ack ); reg [:] data_i = ; localparam IDLE = ,
RECEIVE = ,
RECEIVE_END = ; reg [:]cur_st = ;
reg [:]nxt_st = ;
always @(posedge clk)
begin
cur_st <= nxt_st;
end always @(*)
begin
nxt_st = cur_st; case(cur_st) IDLE:
begin
if(!rxd) //当从接收端口上进来的数据开始为0时,即启动接收
nxt_st = RECEIVE;
end RECEIVE:
begin
if(count == )
nxt_st = RECEIVE_END;
end RECEIVE_END:
begin
nxt_st = IDLE;
end default:
begin
nxt_st = IDLE;
end endcase end reg [:]count = ;
always @(posedge clk)
begin
if(cur_st == RECEIVE)
count <= count + ;
else if(cur_st == IDLE || cur_st == RECEIVE_END)
count <= ;
end //当前状态为接收状态时,rxd 信号线上的数据存储在data_i的最高位
//同时data_i 的数据总体右移一位
always @(posedge clk)
begin
if(cur_st == RECEIVE)
begin
data_i[:] <= data_i[:];
data_i[] <= rxd; // rxd 传过来什么数据, data_i上立马显示什么数据,因为是从端口采集到的数据
end end assign receive_ack = (cur_st == RECEIVE_END) ? : ; endmodule /* add_force {/uart_rx/clk} -radix hex {1 0ns} {0 50000ps} -repeat_every 100000ps
add_force {/uart_rx/rxd} -radix hex {1 0ns} {0 300ns} {1 400ns} {0 500ns} {1 600ns} {0 700ns} {1 800ns} {0 900ns} {1 1000ns} */

仿真结果:

注意:

  分析寄存器的更新一定要结合时钟沿,然后寄存器在时钟沿前后的变化状态。

串口接收端verilog代码分析的更多相关文章

  1. 串口发送端verilog代码分析

    串口发送端verilog代码分析 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...

  2. verilog 代码分析与仿真

    verilog 代码分析与仿真 注意:使用vivado 自带的仿真工具, reg和wire等信号需要赋予初始值 边沿检测 module signal_test( input wire cmos_pcl ...

  3. Verilog代码规范I

    Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...

  4. Linux内核中的GPIO系统之(3):pin controller driver代码分析

    一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...

  5. Bluez SPP实现代码分析(转)

    源:http://blog.csdn.net/walkingman321/article/details/7218705 本文分析蓝牙协议栈中蓝牙转串口(SPP)部分的实现. 1.  基本概念 Blu ...

  6. ISD9160学习笔记05_ISD9160语音识别代码分析

    前言 语音识别是特别酷的功能,ISD9160的核心卖点就是这个语音识别,使用了Cybron VR 算法. 很好奇这颗10块钱以内的IC是如何实现人家百来块钱的方案.且听如下分析. 本文作者twowin ...

  7. 2017-2018-2 《网络对抗技术》 20155322 Exp4 恶意代码分析

    [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实践过程 2.1-Mac下网络监控 2.2-Windows下网络监控 2.3-Mac下恶意软件分析 2 ...

  8. STM32F103片外运行代码分析

    STM32F103片外运行代码分析 STM32F103有三种启动方式: 1.从片内Flash启动: 2.从片内RAM启动: 3.从片内系统存储器启动,内嵌的自举程序,用于串口IAP. 无法直接在片外N ...

  9. Linux内核中的GPIO系统之(3):pin controller driver代码分析--devm_kzalloc使用【转】

    转自:http://www.wowotech.net/linux_kenrel/pin-controller-driver.html 一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道 ...

随机推荐

  1. Introducing the Microservices Reference Architecture from NGINX

    Introducing the Microservices Reference Architecture from NGINX https://www.nginx.com/blog/introduci ...

  2. rsync详细配置

    1 说在前面的话 rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html rsync是可以实现增量备份的工具.配合任务计划,rsync能实现定时或间 ...

  3. 在线自动创建springboot工程

    https://start.spring.io/

  4. springcloud-Eureka-服务注册与发现核心组件

    Eureka组件 Eureka是Netfilx开源的服务发现组件,本身是一个基于rest的服务,它包含client和server两部分. Spirng Cloud将它集成在子项目Spirng Clou ...

  5. vue2.0 实现富文本编辑器功能

    前端富文本编译器使用总结: UEditor:百度前端的开源项目,功能强大,基于 jQuery,但已经没有再维护,而且限定了后端代码,修改起来比较费劲 bootstrap-wysiwyg:微型,易用,小 ...

  6. vue 打开新页面

    <router-link tag="a" target="_blank" :to="{path:'/system/detail?id=' + s ...

  7. css 常用布局

    「前端那些事儿」③ CSS 布局方案 我们在日常开发中经常遇到布局问题,下面罗列几种常用的css布局方案 话不多说,上代码! 居中布局 以下居中布局均以不定宽为前提,定宽情况包含其中 1.水平居中 a ...

  8. 【Jenkins】testng+testNgXslt+ant优化测试报告

    步骤: 准备: testng-results.xsl saxon-8.7.jar 下载地址:http://download.csdn.net/download/a804229570/10210509 ...

  9. 奇异值分解(SVD)与在降维中的应用

    奇异值分解(Singular Value Decomposition,SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是很多机器 ...

  10. ionic1 添加百度地图插件 cordova-plugin-baidumaplocation

    cordova-plugin-baidumaplocation 这个插件返回的数据是 json 格式的  可以直接获取  android 和 ios 都可用 1.先去百度地图平台去创建应用  获取访问 ...