数字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实现串并转换相关推荐

  1. verilog实现串并转换

    串转并:我这个实现为每输入四位串行数据,输出一个并行数据 module c2b(input clk,input rst_n,input data_i,output reg[3:0] data_o);r ...

  2. FPGA校招笔试题分析

    仅仅给出下面一个电路图,让你画出Q1,Q2以及Q3的波形,并描述电路功能 第一个触发器的输入是第二个以及第三个触发器的输出的反馈,是Q1与Q2的或非:实际上就是同步三分频电路: 只要触发器复位有初值即 ...

  3. FPGA(九)RTL代码之五(基本电路设计2)

    系列文章目录 FPGA(四)数字IC面试的四个基本问题 FPGA(五)RTL代码之一(跨时钟域设计) FPGA(六)RTL代码之二(复杂电路设计1) FPGA(七)RTL代码之三(复杂电路设计2) F ...

  4. 2020华为海思实习生面试记录

    来自微信公众号:数字芯片联合实验室 2020年4月12日,投简历.我投的是华为海思的数字芯片岗位.首先先是从简历上,你的简历上一定要写清楚自己从大学开始到现在的学习经历,项目经历,自己的知识储备,自己 ...

  5. 【Verilog HDL 训练】第 07 天(串并转换)

    串并转换 1. 复习verilog语法 [选做题] - 文件操作fopen fdisplay fwrite fclose - 生成随机数 random - 初始化 readmemh readmemb ...

  6. 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)

    移位寄存器总结 一.前言 二.简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.逻辑移位与算 ...

  7. 超级好用的串并转换Verilog

    串并转换都是利用移位寄存器.本文拿四位串并转换举例. 串转并就是将低3位信号和输入信号一起赋值.因为经过转换后,码元速率会将为原来四分之一,所以设置4分频时钟,将其输出.而并转串就是不断右移,取高位输 ...

  8. 移位寄存器专题(verilog HDL设计)

    目录 移位寄存器简介 分类 4位右移位寄存器工作原理 1. 16位右移位寄存器 2. 16位左移寄存器 3. 串行输入并行输出寄存器 4. 并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数 ...

  9. [转]常用数字处理算法的Verilog实现

      2.6.3 常用数字处理算法的Verilog实现 1.加法器的Verilog实现 串行加法器 组合逻辑的加法器可以利用真值表,通过与门和非门简单地实现.假设 和 表示两个加数, 表示和, 表示来自 ...

最新文章

  1. Cordova webapp实战开发:(1)为什么选择 Cordova webapp?
  2. Java基础-OOP特性之封装、继承、多态、抽象
  3. 递归回溯解决八皇后问题
  4. 树莓派实现AD转换(pcf8591模块)
  5. Android开发切换host应用
  6. Stream流中的常用方法_forEach
  7. Effective Java~3. 私有Constructor 或Enum 强化单例
  8. 【批处理】windows环境将文件放置在虚拟盘
  9. php美顏滤镜,PHP GIF / PNG True Colorize滤镜,可保留亮度和Alpha
  10. 免费python网络课程-Python零基础免费入门课程
  11. aws----文件存储efs的全面了解
  12. PCBA上电容开裂短路,怎么又是设计的错?
  13. 怎么看曲线有没有斜渐近线_怎样判断一个曲线有无斜渐近线
  14. win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决
  15. Flash游戏抓取,flash网站抓取,网页游戏提取工具
  16. 【JavaWeb篇】快速上手Tomcat|实战项目详解
  17. python换零钱_LeetCode-python 322.零钱兑换
  18. 幅相曲线渐近线_若最小相位系统的低频段幅频特性的渐近线是一条斜率为20dB/dec的直线,则该系统( )。_学小易找答案...
  19. 最大值最小值计算机一级,最小值
  20. 卓识车辆数据标注解析

热门文章

  1. 算法练习——在有序序列(r1,r2,...,rn)中,存在序号i(1<=i<=n),使得ri=i。请设计一个分治算法找到这个元素。 要求算法在最坏情况下的时间性能为O(logn))
  2. SAP MASS批量更新(Mass Maintenance)工具对象类型介绍
  3. 2020 届,互联网校招的薪资情况如何?
  4. 360 重磅开源性能监控平台 ArgusAPM
  5. 如何组建优秀的创业团队
  6. Python字典推导式
  7. 银行排队算法实现C++
  8. 3D游戏开发可视化渲染调试工具-KylinsGraphicsDebugger
  9. Codeforces Round #628 (Div. 2) C. Ehab and Path-etic MEXs
  10. 风控基础指标之决策树的特征选择