当前位置: 首页 > news >正文

串行并行数据转换

前言

        串行数据传输通常在数据传输距离较远时使用,而并行数据传输适用于短距离、高速数据交换。通过转换,可以根据实际需求选择合适的传输方式,以优化数据传输效率和速度。串行数据传输在长距离传输中可以减少信号的干扰和失真,因为它只使用一条数据线。而并行传输由于多条数据线可能引入干扰,串行并行转换可以在需要时将数据转为串行传输,以减少干扰。在多种接口标准之间转换数据时,串行并行转换可以实现不同接口之间的数据兼容。例如,许多现代通信系统使用串行接口,而内部处理可能使用并行数据格式,转换可以使系统之间的数据交换顺畅。在某些应用中,FPGA等硬件平台可以通过串行并行数据转换实现灵活的设计,简化电路结构,降低成本和复杂度,同时提高系统的整体性能。

正文

一、串行并行数据转换

        1.项目需求

        进行串行数据转换为并行数据,并行数据转化为串行数据实验

        2.技术介绍

        并转串的设计思想:首先准备好一组寄存器,把需要发送的数据(并行数据)放到这个寄存器组里面,然后通过位拼接的移位方式把这个并行数据一位一位地发送给接收端,同时拉高标志信号en,当全部数据发送完之后,再把标志信号en拉低。

        串转并的设计思想:准备好一组寄存器,接收串行数据,将数据按位移入寄存器组,然后将整个寄存器组的数据组合成一个完整的并行数据字。使用一组寄存器暂时存储数据,然后逐位将数据移出至串行输出端,同时使用标志信号指示何时数据转换完成。

        3.顶层架构

并转串

串转并

        4.端口描述

并转串

clk系统时钟(50Mhz)
rst_n复位按键(低电平有效)
sda_in[7:0]并行数据输入
en串行数据串行输出有效信号
sda_out串行输出

串转并

clk系统时钟(50Mhz)
rst_n复位按键(低电平有效)
en串行输入有效信号
sda_in串行输入
sda_out[7:0]并行输出

二、代码验证

并转串:

module para_serial(input clk,input rst_n,input [7:0]sda_in,//并行输入output reg en,output reg sda_out//串行输出);reg [7:0]sda;//并行数据寄存器
reg [3:0]cnt;//移位计数器always @(posedge clk,negedge rst_n)
beginif(rst_n == 0)beginsda_out <= 1'b0;cnt <= 4'd0;sda <= 8'b0;en  <= 1'b0;endelsebeginif(cnt == 0)//数据加载beginsda <= sda_in;cnt <= 4'd1;endelse if(cnt < 9)//移位输出beginen  <= 1'b1;cnt <= cnt + 4'd1;sda <= {sda[6:0],sda[7]};sda_out <= sda[7];endelsebegincnt <= 4'd0;//系统复位sda <= 8'b0;en  <= 1'b0;endend
endendmodule

        仿真程序

`timescale 1ns/1ps
module para_serial_tb;reg clk;reg rst_n;reg [7:0]sda_in;wire en;wire sda_out;para_serial para_serial_inst(.clk(clk),.rst_n(rst_n),.sda_in(sda_in),.en(en),.sda_out(sda_out));initial clk = 1;
always #10 clk = ~clk;initial beginrst_n = 0;#10rst_n = 1;sda_in = 8'b1011_0100;//数据载入#200sda_in = 8'b1010_0001;//数据载入#200$stop;
endendmodule

串转并

module serial_para(input clk,input rst_n,input sda_in,//串行输入input en,//输入有效output reg [7:0] sda//并行输出);always @(posedge clk,negedge rst_n)
beginif(rst_n == 0)beginsda <= 8'b0;endelsebeginif(en == 1)//输入使能sda <= {sda[6:0],sda_in};//数据并位elsesda <= 8'b0;end
endendmodule

创建顶层,利用并转串输出数据

module top(//进行数据连线input clk,input rst_n,input [7:0]sda_in,output en,output sda_out,output [7:0]sda);para_serial para_serial_inst(.clk(clk),.rst_n(rst_n),.sda_in(sda_in),.en(en),.sda_out(sda_out));serial_para serial_para_inst(.clk(clk),.rst_n(rst_n),.sda_in(sda_out),.en(en),.sda(sda));
endmodule

        仿真程序

`timescale 1ns/1ps
module para_serial_tb;reg clk;reg rst_n;reg [7:0]sda_in;wire en;wire sda_out;wire [7:0]sda;top top_inst(.clk(clk),.rst_n(rst_n),.sda_in(sda_in),.en(en),.sda_out(sda_out),.sda(sda));initial clk = 1;
always #10 clk = ~clk;initial beginrst_n = 0;#10rst_n = 1;sda_in = 8'b1011_0100;#200sda_in = 8'b1010_0001;#200$stop;
endendmodule

三、仿真验证

并转串:观察仿真波形图,数据有正常显示,调出过程信号

数据在cnt=0的时钟上升沿时候加载sda,在cnt=1的时候显示输入并进行移位,在cnt=2的时候显示移位结果,并将移位结果输出,依次循环移,直到cnt=8的时钟上升沿对输入数据移位完8次,在cnt = 9的时候输出数据并系统复位,在下一个cnt=0的上升沿时钟加载数据

上图输入10110100,输出电平在en有效下依次为10110100,下图输入10100001输出电平在en有效下依次为10100001,数据转化正确。

串转并:可以观察到在en拉低后sda输出10110100与并转串模块输入数据相同。

在时钟上升沿读取到en=1后将串行输入依次移位保存到并行输出串口并输出,串行输入10100001,经过8次en=1的时钟上升沿后由于输入en为并转串的输出使能,经过8个时钟周期后数据输出完成,en拉低,此时串转并模块输出上个时钟周期产生的完整串转并数据。此时数据为10100001与串行输入结果相同,实验成功。

参考资料

串并转换

相关文章:

串行并行数据转换

前言 串行数据传输通常在数据传输距离较远时使用&#xff0c;而并行数据传输适用于短距离、高速数据交换。通过转换&#xff0c;可以根据实际需求选择合适的传输方式&#xff0c;以优化数据传输效率和速度。串行数据传输在长距离传输中可以减少信号的干扰和失真&#xff0c;因为…...

推荐一个优秀的 .NET MAUI 组件库

目录 前言 组件介绍 组件展示 布局 按钮 复选框 进度条 导航栏 组件地址 最后 前言 .NET MAUI 的发布&#xff0c;项目中可以使用这个新的跨平台 UI 框架来轻松搭建的移动和桌面应用。 为了帮助大家更快地构建美观且功能丰富的应用&#xff0c;本文将推荐一款优秀…...

用Manim创建条形图【BarChart】

BarChart是Manim库中用于创建条形图的函数。它允许用户通过一组值创建一个条形图&#xff0c;其参数可以调整条形的外观和布局。 BarChart(values, bar_namesNone, y_rangeNone, x_lengthNone, y_lengthNone, bar_colors[#003f5c, #58508d, #bc5090, #ff6361, #ffa600],bar_w…...

iMES工厂管家:强大的工厂管理系统

iMES工厂管家&#xff1a;强大的工厂管理系统 在现代工厂管理中&#xff0c;iMES工厂管家作为一款功能强大的MES系统&#xff0c;为用户提供了全面的管理解决方案。本文将介绍iMES工厂管家的基本信息、特点、以及如何快速部署和使用。 软件简介 iMES工厂管家是一款基于.NetCor…...

iOS ------ 事件响应链

响应者链 响应者链是由一系列链接在一起的响应者&#xff08;UIResponser之类&#xff1a;UIApplication&#xff0c;UIViewController&#xff0c;UIView&#xff09;注组成的。一般情况下&#xff0c;一条响应链开始于第一响应者&#xff0c;结束于application对象。如果一个…...

Go 语言 switch 语句的特点

在 Go 语言中&#xff0c;switch 语句设计得更加简洁和直观&#xff0c;因此不需要显式使用 break 语句来终止一个分支。这种设计决策源于 Go 语言的一些设计哲学和目标&#xff0c;主要包括&#xff1a; 自动终止&#xff1a; Go 语言的 switch 语句会在每个 case 执行完成后自…...

【递归】什么是递归-C语言为例

递归是指一个函数在其定义中直接或间接调用自身的编程技巧。在C语言中&#xff0c;递归常用于解决可以被分解为更小的子问题的问题。递归函数通常由两个主要部分组成&#xff1a; 基准情况&#xff1a;这是递归停止的条件&#xff0c;通常是最简单的情况。 递归情况&#xff1…...

vue针对低版本浏览器不兼容es6特性解决方案,

browser.min.js 解决ES6兼容IE browser.min.js&#xff0c;polyfill.min.js vue针对安卓低版本、ios9 不兼容 es6特性解决方案 解决IE9无法使用promise的js脚本&#xff0c;引入后&#xff0c;还需跟browser.js配合使用 Babel 默认只转换新的 JavaScript 句法&#xff0c;po…...

嵌入式内存管理高频面试题及参考答案(4万字长文)

目录 嵌入式系统中内存管理的重要性 嵌入式系统中的内存主要分为哪几类? 静态内存分配和动态内存分配的特点 内存对齐的概念及其作用 嵌入式系统中为什么需要关注内存碎片问题 内存分区的概念及其在嵌入式系统中的应用 内存映射文件的概念及其在嵌入式系统中的作用 虚…...

TinyWebserver的复现与改进(2):项目的整体框架

上文我们成功运行了代码&#xff0c;本文我们将对项目的整体流程作一下讲解 如果你之前没做过相关的内容&#xff0c;对服务器的⾼并发模型也⼀⽆所知&#xff0c;不建议继续做下去&#xff0c;需要的前置知识有&#xff1a; Linux的基本命令&#xff08;⭐&#xff09;多进程…...

R 语言学习教程,从入门到精通,R 字符串(10)

1、R 字符串 R 语言字符串可以使用一对单引号 ’ ’ 或一对双引号 " " 来表示。 单引号字符串中可以包含双引号。 单引号字符串中不可以包含单引号。 双引号字符串中可以包含单引号。 双引号字符串中不可以包含双引号。 以下示例演示来字符串的使用&#xff1a; a …...

QT 简易音乐播放器

目录 放置控件 获取mp3文件 播放音乐 准备工作 加载模块 加载头文件 new一个output对象,Mediaplayer对象 把outpout对象交给mediaplayer对象 给播放器设置音乐 播放 优化 上一曲下一曲功能 双击歌曲播放 获取音乐时长和音乐播放时间 让音乐进度条跟随音乐走 调…...

代码随想录八股训练营day32

代码随想录八股训练营day32 1、synchronized和lock的区别是什么 &#xff08;1&#xff09;synchronized和lock的区别是什么 synchronized和Lock都是Java中用于实现线程同步的手段&#xff0c;synchronized是Java的关键字&#xff0c;基于JVM的内置锁实现&#xff0c;可以用于…...

11.面试题——消息队列RabbitMQ

1.RabbitMQ是什么&#xff1f;特点是什么&#xff1f; RabbitMQ是一种开源的消息队列中间件&#xff0c;用于在应用程序之间进行可靠的消息传递。它实现了AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议&#xff0c;提供了强大的消息处理能力。RabbitMQ的…...

MySQL运维-日志

错误日志 二进制日志 介绍 日志格式 日志查看 日志删除 查询日志 慢查询日志...

synchronized重量级锁的实现原理是怎样的

重量级锁&#xff08;Heavyweight Locking&#xff09;是 Java 中 synchronized 关键字的锁机制的一部分&#xff0c;用于在高竞争情况下确保线程的同步。重量级锁主要通过操作系统的线程同步机制实现&#xff0c;通常涉及阻塞线程、上下文切换等开销较大的操作。以下是重量级锁…...

探索 GLTF 的世界:3D 内容的未来

在 3D 内容创作领域&#xff0c;GLTF 正在掀起波澜&#xff0c;成为跨不同平台提供丰富互动体验的未来标准。GL 传输格式 &#xff08;GLTF&#xff09; 由 Khronos Group 开发&#xff0c;是一种用于在工具和服务之间传输 3D 模型和场景的开放标准。它设计紧凑、高效且易于集成…...

【深度学习】【语音】TTS, CM-TTS,TTS扩散模型,论文

CM-TTS: Enhancing Real Time Text-to-Speech Synthesis Efficiencythrough Weighted Samplers and Consistency Models CM-TTS: 提高实时文本到语音合成效率 通过加权采样器和一致性模型 Xiang Li 1, Fan Bu 1, Ambuj Mehrish 2, Yingting Li 1, Jiale Han 1, Bo Cheng 1, S…...

【网络协议】网络劫持 - ARP_DNS欺骗篇

前言 网络劫持是一种网络攻击技术&#xff0c;攻击者通过拦截、篡改或重定向数据流量&#xff0c;控制用户的网络通信路径&#xff0c;干扰正常的网络服务。其方式可能包括DNS劫持、ARP欺骗和HTTP劫持等。通过这些手段&#xff0c;攻击者可以窃取敏感信息如个人身份数据和财务信…...

Linux 系统框架分析(一)

一、linux内核结构框图 对内核结构框图有个总体的把握&#xff0c;有助于理解为什么驱动要这样写&#xff0c;为什么写的应用程序所用的C库接口能够产生这么多的事情。 框图可以看出来&#xff0c;linux系统&#xff0c;包括五个系统 一、Linux内核结构介绍 Linux 内核是操作…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...