Verilog数字系统基础设计-数据转换器

65c8fee3c0a1a00e220fbd601d8d3a09.png

绪论

在一些应用中,两个电路模块交界处,一个电路模块的输出数据位宽大于另一个模块的输入数据位宽,此时需要进行数据转换。例如,在SATA控制器中,内部数据位宽为32比特,但是与外部物理收发器PHY的接口通常为16比特或8比特。同样的,从PHY接收到的数据也是16比特或8比特,数据交给控制器后,在其内部使用之前转换为32比特。下面将介绍进行数据宽度转换的电路,电路中没有使用FIFO,是通过时钟分频与倍频实现数据位宽转换和传输的。

由宽到窄数据转换

图6.30是位宽由宽变窄时的示意图。6.31是数据转换波形示意图。

a5cb8f38d685f8458f2c606294bb25a2.png 3e91ce0c5e82f7eb1578d3e498416981.png

电路模块B的工作时钟为clk2x,在电路模块A中将其二分频得到clklX。clk1x与clk2x之间有一个同定的相位 差。根据图6.30和图6.31,具体的数据传输过程如下:

  • clklx下方的数据datain[31:0]经过clk2x采样产生datain_sync[31:0],由于clk1x在相位上滞后于clk2x且二者为同步时钟,因此数据从时钟域clklx传递到时钟域clk2x时不会存在问题;

  • 在clk2x时钟域内,当clklx为0时,使用clk2x选择datain_sync的低16比特,当clklx为1时,选择datain_sync的高16比特;

  • 完成数据变换,最终输出dataout_clk2x[15:0]。

代码及仿真结果如下。

module wide_to_narrow
(clk2x,
clklx,
datain,
dataout_clk2x);

input   clk2x;
input   clklx;
input [31: 0]   datain;
output [15: 0]   dataout_clk2x;
//***************************************

reg [31:0]    datain_sync;
reg [15:0]  dataout_clk2x;
wire [15:0]  dataout_clk2x_nxt;

// Flop the data first with clk2x. Reset is not required as it is a datapath and
// default (reset) value of the flops are don’t care.
//***************************************

always @(posedge clk2x)
begin
 datain_sync <- datain;
end

// Select the lower and upper halves from datain_sync
//***************************************

assign dataout_clk2x_nxt = !clk 1 x ? datain_sync[15:0] :datain_sync[31:16];

// Flop the selected 16 bit data with clk2x and drive out
//***************************************

always @(posedge clk2x)
begin
 dataout_clk2x <= dataout_clk2x_nxt;
end

endmodule
d0588d6b51c56a2b1265ca6994cb5705.png

由窄到宽数据转换

图6.32和图6.33是实现由窄到宽数据转换操作的电路和工作波形。

d52f66997e7c4a40d3b32aed9253f90b.png 874e3176f6b6167310fc83e34849cc32.png

代码及仿真结果如下。

module narrow_to_wide
(clk2x,
clklx,
data16,
data32_clk1x);

input   clk2x;
input   clklx;
input [15: 0]   data16;
output [31: 0]   data32_clk1x;
//***************************************

reg [15:0]    data16_tmp;
reg [31:0]  data32_clk1x data32_clk1x_nxt;

/* store temporary data into a register
along with the 16 bits of tmp data stored in pervious cycle to form 32 bits of data.
These 32 bits of data is flopped with clklx, and this happens for every two-clock
periods of clk2x.

When data is passed from 2x (fast) to the lx (slow) domain, make sure that there is
enough delay in the data path to avoid set-up/hold violation in the immediate risi
edge of lx clock. The data should have more delay in the path to pass beyond
immediate rising edge of 1x clock*/

//***************************************

always @(posedge clk2x)
begin
 datal6_tmp <= #2 datal 6;
end
// Form the 32-bit data
 assign data32_clklx_nxt = {datal 6[15:0], data16_tmp[l5:0]};
// Flop the selected 16 bit data with clk2x and drive out
always @(posedge elklx)
begin
 data32_clklx <= data32_clklx_nxt;
end
endmodule
abac1c485a830ada1a7cc9b695d72492.png

9a86c215147fe5d8e3fe53e9ead9c52e.gif

NOW

a2a25750471ac4d5a7c7fe2178cfb935.png

学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

文件名主标题内容简单介绍是否有中文版
UG4767 Series FPGAs GTX/GTH  TransceiversGTX和GTH介绍,PCIe、serdes等学习必备
UG4717 Series FPGAs SelectIO Resources描述 7 系列 FPGA 中可用的 SelectIO资源。
UG1114PetaLinux Tools DocumentatonPetaLinux 工具文档 参考指南是,V2019.2
UG949UltraFAST 设计方法指南(适用于 Vivado  Design Suite)赛灵思® UltraFast™  设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标是,V2018.1
IP手册pg057FIFO GeneratorFIFO生成器IP使用手册
pg104Complex Multiplier复数乘法器IP使用手册
pg122RAM-Based Shift Register 移位寄存器IP使用手册

4dddb725895209387e42e0d65595b2f5.png

推荐阅读

【Vivado那些事】如何查找官网例程及如何使用官网例程

【Vivado使用误区与进阶】总结篇

【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

SystemVerilog数字系统设计_夏宇闻 PDF

图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

简谈:如何学习FPGA

1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程

Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

AD936x+ZYNQ搭建收音机(一)

AD936x+ZYNQ搭建OpenWIFI

无招胜有招-Vivado非工程模式下的详细设计

面试中经常会遇到的FPGA基本概念,你会几个?

Xilinx FPGA MIPI 接口简单说明

Vivado ML(机器学习) 2021尝鲜

推荐一些可以获取免费的国外的原版书籍(电子版)网站

【Vivado那些事】FPGA的配置方式

FPGA 的重构

浅析FPGA局部动态可重构技术

ISP(图像信号处理)算法概述、工作原理、架构、处理流程

国产CPU概括

从电子游戏历史看IC发展的助推剂

80年代电子游戏及电脑游戏的发展历史

PCIe总线的基础知识

万字长文带你回顾电子游戏的七十多年历史(完整版)

FPGA中异步复位,同步释放的理解

OpenFPGA系列文章总结

用Verilog设计一个16 位 RISC 处理器

介绍一些新手入门FPGA的优秀网站(新增)

Verilog数字系统基础设计-CRC

FPGA 的布局规划艺术

Verilog数字系统基础设计-奇偶校验

建立和保持时间及时序简单理解

(Xilinx)FPGA中LVDS差分高速传输的实现

Xilinx Multiboot实例演示

高速串行通信常用的编码方式-8b/10b编码/解码
Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路

再说System Verilog 与 Verilog 的关系

图书推荐|一本图像/视频处理的强大工具书

Verilog HDL-同步技术

再说System Verilog 与 Verilog 的关系

数模混合信号建模语言Verilog-AMS

数字系统重要指标-吞吐率和时延

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenFPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值