用Verilog实现串并转换
数字IC设计——用Verilog实现串并转换
一、串转并转换模块
1、利用移位寄存器
串行转并行数据输出:采用位拼接技术(移位寄存器),将串行的数据总数先表示出来,然后发送一位数据加一,后面的接收的这样标志:
data_o <= {data_o[6:0],data_i };
1输入8输出 的 串转并模块的Verilog代码
module serial_parallel(input clk,input rst_n,en,input data_i, //一位输入output reg [7:0] data_o //8位并行输出);always @(posedge clk or negedge rst_n) beginif (rst_n == 1'b0)data_o <= 8'b0;else if (en == 1'b1)data_o <= {data_o[6:0], data_i}; //低位先赋值//data_o <= {data_i,data_o[7:1],}; //高位先赋值elsedata_o <= data_o;
endendmodule
测试代码
`timescale 1ns/100ps
module serial_parallel_tb;reg clk,rst_n,en;reg data_i;wire [7:0] data_o;serial_parallel n1(.clk(clk),.rst_n(rst_n),.en(en),.data_i(data_i),.data_o(data_o));initial beginclk = 0;rst_n = 0;en = 0;#20 rst_n = 1;#20 en = 1;data_i = 1;#20 data_i = 0;#20 data_i = 1;#20 data_i = 0;#20 data_i = 1;#20 data_i = 1; #20 data_i = 0;#20 data_i = 0;endinitial beginforever #10 clk = ~clk;end endmodule
2、利用计数器
利用计数器cnt 时钟计数,开始数据先给高位,每过一个时钟周期,数据便给低一位。这样便可以达到串转并的效果
1输入8输出 的 串转并模块的Verilog代码
module serial_parallel(input clk,input rst_n,input data_i,output reg [7:0] data_o
);//msb first most significant bit 表示二进制数据的最高位
reg [2:0] cnt; //计数器0-7
always @(posedge clk or negedge rst_n)beginif(rst_n == 1'b0)begindata_o <= 8'b0;cnt <= 3'd0;endelse begindata_o[7 - cnt] <= data_i; //高位先赋值//data_o[cnt] <= data_i; //低位先赋值cnt <= cnt + 1'b1;end
endendmodule
测试代码
`timescale 1ns/100ps
module serial_parallel_tb;reg clk,rst_n;reg data_i;wire [7:0] data_o;serial_parallel n1(.clk(clk),.rst_n(rst_n),.data_i(data_i),.data_o(data_o));initial beginclk = 0;rst_n = 0;#20 rst_n = 1;data_i = 1;#20 data_i = 1;#20 data_i = 1;#20 data_i = 0;#20 data_i = 1;#20 data_i = 1; #20 data_i = 1;#20 data_i = 0;endinitial beginforever #10 clk = ~clk;end endmodule
二、并转串转换模块
并串转换的原理是:
先将八位数据暂存于一个四位寄存器器中,然后左移输出到一位输出端口,这里通过一个“移位”指令。
8输入1输出 的 并转串模块的Verilog代码
使能信号en表示开始执行并转串操作,由于并转串是移位操作,当一次并转串完成后,需要重新载入待转换的并行数据时,使能信号要再起来一次
module parallel_serial(clk, rst_n, en, data_i, data_o);input clk, rst_n,en;input [7:0] data_i;output data_o;reg [7:0] data_buf;always @(posedge clk or negedge rst_n) beginif (rst_n == 1'b0) begindata_buf <= 8'b0;endelse if (en == 1'b1)data_buf <= data_i;elsedata_buf <= data_buf <<1; //将寄存器内的值左移,依次读出//data_buf <= {data_buf[6:0],1'b0};
endassign data_o = data_buf[7];endmodule
测试代码
`timescale 1ns/100ps
module parallel_serial_tb;reg clk,rst_n,en;reg [7:0]data_i;wire data_o;serial_parallel n1(.clk(clk),.rst_n(rst_n),.en(en),.data_i(data_i),.data_o(data_o));initial beginclk = 0;rst_n = 0;en = 0;#10 rst_n = 1;#15 en = 1;data_i = 8'b10111010;#10 en = 0;#195 en = 1;data_i = 8'b10110110;#10 en = 0;endinitial beginforever #10 clk = ~clk;end endmodule
用Verilog实现串并转换相关推荐
- verilog实现串并转换
串转并:我这个实现为每输入四位串行数据,输出一个并行数据 module c2b(input clk,input rst_n,input data_i,output reg[3:0] data_o);r ...
- FPGA校招笔试题分析
仅仅给出下面一个电路图,让你画出Q1,Q2以及Q3的波形,并描述电路功能 第一个触发器的输入是第二个以及第三个触发器的输出的反馈,是Q1与Q2的或非:实际上就是同步三分频电路: 只要触发器复位有初值即 ...
- FPGA(九)RTL代码之五(基本电路设计2)
系列文章目录 FPGA(四)数字IC面试的四个基本问题 FPGA(五)RTL代码之一(跨时钟域设计) FPGA(六)RTL代码之二(复杂电路设计1) FPGA(七)RTL代码之三(复杂电路设计2) F ...
- 2020华为海思实习生面试记录
来自微信公众号:数字芯片联合实验室 2020年4月12日,投简历.我投的是华为海思的数字芯片岗位.首先先是从简历上,你的简历上一定要写清楚自己从大学开始到现在的学习经历,项目经历,自己的知识储备,自己 ...
- 【Verilog HDL 训练】第 07 天(串并转换)
串并转换 1. 复习verilog语法 [选做题] - 文件操作fopen fdisplay fwrite fclose - 生成随机数 random - 初始化 readmemh readmemb ...
- 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)
移位寄存器总结 一.前言 二.简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.逻辑移位与算 ...
- 超级好用的串并转换Verilog
串并转换都是利用移位寄存器.本文拿四位串并转换举例. 串转并就是将低3位信号和输入信号一起赋值.因为经过转换后,码元速率会将为原来四分之一,所以设置4分频时钟,将其输出.而并转串就是不断右移,取高位输 ...
- 移位寄存器专题(verilog HDL设计)
目录 移位寄存器简介 分类 4位右移位寄存器工作原理 1. 16位右移位寄存器 2. 16位左移寄存器 3. 串行输入并行输出寄存器 4. 并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数 ...
- [转]常用数字处理算法的Verilog实现
2.6.3 常用数字处理算法的Verilog实现 1.加法器的Verilog实现 串行加法器 组合逻辑的加法器可以利用真值表,通过与门和非门简单地实现.假设 和 表示两个加数, 表示和, 表示来自 ...
最新文章
- Cordova webapp实战开发:(1)为什么选择 Cordova webapp?
- Java基础-OOP特性之封装、继承、多态、抽象
- 递归回溯解决八皇后问题
- 树莓派实现AD转换(pcf8591模块)
- Android开发切换host应用
- Stream流中的常用方法_forEach
- Effective Java~3. 私有Constructor 或Enum 强化单例
- 【批处理】windows环境将文件放置在虚拟盘
- php美顏滤镜,PHP GIF / PNG True Colorize滤镜,可保留亮度和Alpha
- 免费python网络课程-Python零基础免费入门课程
- aws----文件存储efs的全面了解
- PCBA上电容开裂短路,怎么又是设计的错?
- 怎么看曲线有没有斜渐近线_怎样判断一个曲线有无斜渐近线
- win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决
- Flash游戏抓取,flash网站抓取,网页游戏提取工具
- 【JavaWeb篇】快速上手Tomcat|实战项目详解
- python换零钱_LeetCode-python 322.零钱兑换
- 幅相曲线渐近线_若最小相位系统的低频段幅频特性的渐近线是一条斜率为20dB/dec的直线,则该系统( )。_学小易找答案...
- 最大值最小值计算机一级,最小值
- 卓识车辆数据标注解析
热门文章
- 算法练习——在有序序列(r1,r2,...,rn)中,存在序号i(1<=i<=n),使得ri=i。请设计一个分治算法找到这个元素。 要求算法在最坏情况下的时间性能为O(logn))
- SAP MASS批量更新(Mass Maintenance)工具对象类型介绍
- 2020 届,互联网校招的薪资情况如何?
- 360 重磅开源性能监控平台 ArgusAPM
- 如何组建优秀的创业团队
- Python字典推导式
- 银行排队算法实现C++
- 3D游戏开发可视化渲染调试工具-KylinsGraphicsDebugger
- Codeforces Round #628 (Div. 2) C. Ehab and Path-etic MEXs
- 风控基础指标之决策树的特征选择