串行并行数据转换

前言

        串行数据传输通常在数据传输距离较远时使用,而并行数据传输适用于短距离、高速数据交换。通过转换,可以根据实际需求选择合适的传输方式,以优化数据传输效率和速度。串行数据传输在长距离传输中可以减少信号的干扰和失真,因为它只使用一条数据线。而并行传输由于多条数据线可能引入干扰,串行并行转换可以在需要时将数据转为串行传输,以减少干扰。在多种接口标准之间转换数据时,串行并行转换可以实现不同接口之间的数据兼容。例如,许多现代通信系统使用串行接口,而内部处理可能使用并行数据格式,转换可以使系统之间的数据交换顺畅。在某些应用中,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与串行输入结果相同,实验成功。

参考资料

串并转换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/393491.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice

一、 背景 因为项目中需要使用word转pdf功能&#xff0c;因为转换速度原因&#xff0c;最后选用了libreoffice&#xff0c;原因及部署请参考 linux ubuntu环境安装libreoffice&#xff0c;word转pdf 远程调用的话可选docker部署&#xff0c;请看2.3.1 二、springboot整合libr…

达梦数据库的系统视图v$mem_pool

达梦数据库的系统视图v$mem_pool 达梦数据库的V$MEM_POOL视图主要用于显示所有内存池的信息。通过查询这个视图&#xff0c;用户可以监控数据库中各个内存组件的使用状况&#xff0c;包括内存池的大小、使用情况等。这有助于用户判断内存池是否空闲或紧张&#xff0c;从而进行…

【机器人学】6-4.六自由度机器人运动学参数辨识-机器人精度验证【附MATLAB代码】

前言 前两个章节以及完成了机器人参数辨识。 【机器人学】6-1.六自由度机器人运动学参数辨识-辨识数学模型的建立 【机器人学】6-2.六自由度机器人运动学参数辨识-优化方法求解辨识参数 标定了工具端、基座以及机器人本身的DH参数。那么我们的机器人精度如何呢&#xff1f;机…

Unity射击游戏开发教程:(31)制造一定追踪行为的敌人

在本文中,我们将介绍如何在两种敌人行为之间切换。本文是前两篇文章的延续,分别介绍了敌人躲避玩家射击以及敌人不断旋转并向玩家射击的情况。我只是介绍如何在这两种行为之间进行转换。 这种新的敌人行为的目标: 当不开火时,敌人可以躲避玩家的射击。射击时,敌人无法躲避…

谷粒商城实战笔记-137-商城业务-首页-整合dev-tools渲染一级分类数据

文章目录 一&#xff0c;使用热加载工具spring-boot-devtools1&#xff0c;引入devtools依赖2&#xff0c;ctrlshiftf9 编译静态资源 二&#xff0c;thymeleaf原理三&#xff0c;渲染一级分类 一&#xff0c;使用热加载工具spring-boot-devtools 因为我们采用的前后端一体的开…

全国首例 腾讯《穿越火线》协助破获DMA外挂案

据腾讯游戏安全中心公告&#xff0c;腾讯旗下的游戏《穿越火线》协助警方破获了首例DMA外挂案件。DMA即Direct Memory Access&#xff08;直接内存访问&#xff09;&#xff0c;原本是一种读写数据的计算机技术。 DMA外挂则通过特殊的软硬件工具直接访问电脑内存&#xff0c;读…

MIMO技术入门(通俗易懂)

MIMO技术的思路 形象地形容就是&#xff0c;从原来的一个人在搬砖&#xff0c;转变成多个人在搬砖。 MIMO/SIMO/MISO示意图 MIMO用专业一点的词形容&#xff0c;就是发射端和接收端都有多个天线&#xff0c;这里的多天线并不是指有多个天线板&#xff0c;对于基站来说&#…

基于Raft算法的分布式KV数据库:六、常见问题及解答

CPPRaft系列-常见问题及解答 】 目前项目中还有很多地方可以优化&#xff0c;欢迎大家参与吼吼吼。 地址在&#xff1a; https://github.com/youngyangyang04/KVstorageBaseRaft-cpp 在前面的系列文章中&#xff0c;我对这个项目提出了很多问题&#xff0c;但是发现没有解答…

科普文:微服务之全文检索ElasticSearch忝删改查详细操作说明

一、Restful简介 RESTFul&#xff1a;Representational State Transfer&#xff0c;中文意思&#xff1a;表现层状态转化。变现层指的是资源的表现层&#xff0c;这里的资源是指网络上的信息&#xff0c;比如一张图片&#xff0c;一段文本&#xff0c;一步电影&#xff0c;那么…

Python | Leetcode Python题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

[Git][分支设计规范]详细讲解

目录 0.概览1.master分支2.release分支3.develop分支4.feature分支5.hotfix分支 0.概览 以下是常用的分支和环境的搭配&#xff0c;可视情况而定不同的策略 分支名称适用环境master主分支生产环境release预发布分支预发布/测试环境develop开发分支开发环境feature需求开发分支本…

systemd-manage系统服务图形化管理工具使用教程

1. systemd-manage介绍 systemd-manage是一个开源的基于systemd服务管理的图形化工具&#xff0c;使用qt图形库进行开发&#xff0c;可以提供服务管理&#xff0c;用户会话&#xff0c;配置文件修改&#xff0c;日志查询&#xff0c;性能分析&#xff0c;进程管理等功能。图形…

AGV一体式ARM智能控制主机如何替代传统PLC、工控机等方案

工业自动化的不断发展&#xff0c;AGV&#xff08;自动导引车&#xff09;作为一种重要的物流搬运设备&#xff0c;在各个领域得到了广泛的应用。而 AGV 的控制主机是其核心部件之一&#xff0c;直接影响着 AGV 的性能和稳定性。传统的 AGV 控制主机通常采用 x86 工控机交换机i…

HTTPS协议讲解

HTTPS协议讲解 HTTPS是什么理解加密什么是加密为什么要加密 常见的加密方式对称加密非对称加密 数据摘要/数据指纹HTTPS的工作过程探究方案一&#xff0c;只使用对称加密方案二&#xff0c;只使用非对称加密方案三&#xff0c;双方都是用非对称加密方案四&#xff0c;非对称加密…

24/8/6算法笔记 不同核函数

import numpy as np from sklearn import datasets from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt 加载数据 X,ydatasets.load_wine(return_X_y True) d…

运维工作中对反爬虫的一些思考

最近运维工作中单位的网站被攻击&#xff0c;我们的反爬虫系统已经比较严格了&#xff0c;突然有5个用户登录30多万次经我们查找发现&#xff0c;用户是正常登录&#xff0c;这一异常被我们的技术部门捕捉到第一时间响应&#xff0c;没想到常规架构已经不足以应付现在的技术了&…

机器学习练手(二):基于KMeans的股票分类

总结&#xff1a;本文为和鲸python 机器学习原理与实践闯关训练营资料整理而来&#xff0c;加入了自己的理解&#xff08;by GPT4o&#xff09; 原活动链接 在前一关我们学习了逻辑回归&#xff0c;学会如何训练模型、数据基础性分析、如何处理空值等操作&#xff0c;下面我们…

springcloud loadbalancer nacos无损发布

前言 故事背景 jenkins部署时总是会有几秒钟接口调用报错&#xff0c;观察日志是因为流量被下发到已下线的服务&#xff0c;重启脚本在停止应用之前先调用nacos注销实例api后再重启依然会短暂出现此问题。项目架构是springcloud alibaba,通过openfeign进行微服务之间调用&…

面试笔记8.6

缓存 1.如何保证redis与数据库一致性 redis面试&#xff1a;如何保证缓存和数据库数据的一致性&#xff1f;_使用update更新数据,json缓存不更新-CSDN博客 如果先删除缓存&#xff0c;再删除数据库&#xff0c;数据不一致&#xff0c; 解决 删 1.先操作缓存但不删除缓存&…

C#使用NPOI进行Excel和Word文件处理(二)

文章目录 使用NPOI在C#中处理Excel和Word文件1. 什么是NPOI&#xff1f;2. 安装NPOI2.1 VisualStudio2019引入NPOI 3. 处理Excel文件读取Excel文件写入Excel文件 4. 处理Word文件读取Word文件写入Word文件 总结Github 地址链接参考例子 使用NPOI在C#中处理Excel和Word文件 在C…