上节我们使用编码模块可解决图像数据的编码问题,而这次使用的并行转串行模块的主要功能就是实现并行串行转换、单端信号转差分信号、单沿采样转双沿采样。
        并行转串行模块框图如下:
图1 串行转并行结构框图
图2 并行转串行模块输入输出信号信号功能描述
        传入的时钟信号 clk_5x,频率 125MHz,为输出串行差分信号 ser_data_p、ser_data_n 的同步时钟;传入的并行数据信号 par_data,同步时钟信号为 clk_1x,频率25MHz,未传入本模块。时钟信号 clk_1x 与 clk_5x,时钟频率为 5 倍关系,因为并行数据信号 par_data 位宽 10bit,若转换为串行信号,需要在时钟信号 clk_1x 的一个时钟周期内完成数据转换,转换后的串行数据信号的同步时钟频率必须为 clk_1x 的 10 倍,使用双沿采样则为 5 倍。

ALTDDIO_OUT  IP核的调用
        ALTDDIO_OUT 是 Altera 提供的双数据速率 (DDR) IP 核的一部分,双数据速率 (DDR) IP 核可以用于在逻辑资源中实现 DDR 寄存器。其中 ALTDDIO_IN 可实现 DDR 输入接口, ALTDDIO_OUT 可实现 DDR 输出接口,ALTDDIO_BIDIR 可实现双向 DDR 输入输出接口。
        本模块使用的是 ALTDDIO_OUT IP 核,用以实现 DDR 输出接口,将两路单沿信号,转换为双沿信号,在参考时钟的上升沿和下降沿发送数据。ALTDDIO_OUT IP 核框图和接口信号描述,具体见下图:
        
图3 ALTDDIO  IP核框图
图4 ALTDDIO_OUT  IP 核接口信号描述

图5 ALTDDIO_OUT  IP 核时序图
        了解了 ALTDDIO_OUT IP 核的相关知识后,我们开始进行 IP 核的配置。
图6
        在图 6 IP 核搜索界面标注①处搜索 ALTDDIO;选中标注②处的ALTDDIO_OUT;在标注③处选择 IP 核文件存储位置并命名 IP 核;点击标注④处的 “Next”,进行后续配置。

图7

        图 7 所示,在标注①处选择输入输出数据位宽,本模块中选择位宽为 1bit;在标注②处选择“Not used”,不使用“aclr”“aset”信号;点击标注③处“Next”,进行后续配置。
图8
        本页面不进行任何参数设置,直接点击“Next”进入下一步。
图9 
        标注①处为 IP 核仿真模型的相关描述;本页面同样不进行任何参数配置,点击标注②处“Next”,进入后续配置。

图10

如图 10 所示,标注①处为 IP 核生成后产生文件的文件列表,默认全部勾选,读者也可自定义选择;点击标注②处“Finish”完成 IP 核的生成。

这里我们只使用了 ALTDDIO_OUT IP 核的部分功能,有关其详细的配置资料读者可点击图 10 标注③,查找 IP 核的官方数据手册。

        IP 核生成完毕后,打开 IP 核实例化文件,如图 11 所示。其中,信号 datain_h 为输入的时钟上升沿待输出数据,位宽为 1bit,信号 datain_l 为输入的时钟下降沿待输出数据,位宽为 1bit ,dataout 为输出的串行双沿采样数据,同步时钟为 outclock。

图11 IP核实例化文件

        在这里模块输入的是位宽 10bit 的并行数据 par_data,clk_1x 时钟信号同步下的 par_data 数据是如何转换为 clk_5x 时钟信号下的 datain_h、datain_l 数据信号?下面我们进行讲解。
图12 并转串波形图
        第一步:将输入的 10bit 并行数据 par_data 拆分为两个位宽 5bit 的数据信号。拆分规则 : 将 会 在 时 钟 上 升 沿 输 出 的 par_data[8] 、 par_data[6] 、 par_data[4] 、 par_data[2] 、par_data[0]赋值给变量 data_rise[4:0];将会在时钟下降沿输出的 par_data[9]、par_data[7]、par_data[5]、par_data[3]、par_data[1]赋值给变量 data_fall[4:0]。
        第二步:声明计数器 cnt,以 clk_5x 为计数时钟进行循环计数,计数范围 0-4,每个时钟周期自加 1。当 cnt 计数值为最大值 4 时,将拆分得到的变量 data_rise、data_fall 分别赋值给 data_rise_s、data_fall_s;
        第三步:将 data_rise_s[0]、data_fall_s[0]分别写入 ALTDDIO_OUT IP 核的 datain_h、datain_l 接口;同时,每个时钟周期将 data_rise_s、data_fall_s 右移一位。经过上述三步操作后,位宽 10bit 的并行数据 par_data 转换为两路串行数据传入ALTDDIO_OUT IP 核的 datain_h、datain_l 接口,经过 IP 核处理后,输出以 clk_5x 为同步时钟的串行双沿采样信号。
        同时再次调用 ALTDDIO_OUT IP 核,将~data_rise_s[0]、~data_fall_s[0]分别写入ALTDDIO_OUT IP 核的 datain_h、datain_l 接口,输出的串行双沿采样信号与之前生成的串行双沿采样信号,构成差分信号对。
        到了这里,本模块已完成并行数据 par_data 向串行差分信号对 ser_data_p、der_data_n 的转化。


module par_to_ser
(input  wire       clk_5x ,       //输入系统时钟input  wire [9:0] data_in ,      //输入并行数据output wire       ser_p ,        //输出串行差分数据output wire       ser_n          //输出串行差分数据
);//wire define
wire [4:0] data_rise = {data_in[8],data_in[6],data_in[4],data_in[2],data_in[0]} ;
wire [4:0] data_fall = {data_in[9],data_in[7],data_in[5],data_in[3],data_in[1]} ;//reg define
reg [4:0] data_rise_s = 0 ;
reg [4:0] data_fall_s = 0 ;
reg [2:0] cnt         = 0 ;always@(posedge clk_5x)begincnt <= (cnt[2]) ? 3'd0 : cnt + cnt ;data_rise_s <= (cnt[2]) ? data_rise : data_rise_s[4:1] ;data_fall_s <= (cnt[2]) ? data_fall : data_fall_s[4:1] ;endalt_ddio_out alt_ddio_out_inst_1
(.datain_h (data_rise_s[0]) ,.datain_l (data_fall_s[0]) ,.outclock (~clk_5x)        ,.dataout  (ser_p)
);alt_ddio_out alt_ddio_out_inst_2
(.datain_h (~data_rise_s[0]) ,.datain_l (~data_fall_s[0]) ,.outclock (~clk_5x)         ,.dataout  (ser_n)
);endmodule

具体代码如下:

FPGA之VGA转HDMI之并行串行转换模块编写相关推荐

  1. FPGA之VGA转HDMI之编码模块的编写

    VGA 图像信息到 HDMI 图像信息的转化需要对输入的 VGA 图像信息进行编码.并行串行转换.单端信号转差分信号.单沿采样转双沿采样. 其中,编码模块就是为了完成 VGA 图像数据 8b 转 10 ...

  2. java并发 并行 串行

    并发: 并发是指允许多个任务互相干扰,在一个时间点上,只有一个任务在执行.交叉时间段只能选择一个任务来完成. 并行: 并行是在同一时刻互不干扰的进行任务.多个事件在同一时刻发生 串行: 串行在时间上不 ...

  3. FPGA进阶篇--SPI控制双通道16bit串行DAC8532

    文章目录 一.芯片手册关键点笔记 1.时序 2.寄存器 二.FPGA控制DAC8532驱动 DAC8532_drive_project DAC8532_DATA_Ctrl模块: spi_data_tr ...

  4. py编程技巧-2.5-如何在一个for语句中迭代多个可迭代队象(并行串行)?

    实际案例: 某班学生期末考试成绩,语文,数学,英语分布存储在三个列表当中 同时迭代三个列表,计算每个学生的总分 某年级有四个班,某次考试每班英语成绩分布存储在4个列表中,依次迭代每个列表,统计全年级成 ...

  5. FPGA 20个例程篇:4.串行DAC输出模拟电压控制LED亮度

    二.常用通信协议,摸索探究: 4.串行DAC输出模拟电压控制LED亮度 TLC5615是一颗在实战项目中广泛使用的串行DAC,通过这个例程的学习实践,一方面我们可以掌握SPI通信的底层逻辑,另一方面D ...

  6. promise实现多个请求并行串行执行

    早上查资料,偶然发现这个话题,发现自己并不会,于是乎,下来研究了一下. 想想之前我们用jquery写请求的时候,要实现请求的串行执行,我们可能是这么做的. $.ajax({url: '',data: ...

  7. 进程、线程、进程池、进程三态、同步、异步、并发、并行、串行

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:cnblogs.com/songhaixing/p/1 ...

  8. 8位并行左移串行转换电路_双向移位寄存器 8位双向移位寄存器电路设计

    目录 摘要 .............................................................................................. ...

  9. 并行,串行,流水线,线程和进程傻傻分不清楚

    漫谈并行,串行,流水线,线程和进程 在说并行串行流水线时,我们先要说一个概念双核四程,四核八程代表什么. 双核四程 指处理器中有两个核心, 但是利用了超线程技术,一个核心就有2个线程,所以两个核心就有 ...

最新文章

  1. springboot集成neo4j
  2. html中嵌入天气预报
  3. OpenGL之渲染大小球自转和公转的效果
  4. 获取手机通讯录跟sim卡通讯录
  5. ConfirmCancelUtilDialog【确认取消对话框封装类】
  6. 从二叉树到完全二叉树
  7. 今日收获:图片数据的存和取示例
  8. struts环境搭建以及登陆功能的书写
  9. stella forum 知识库---一些错误的修补
  10. GoEasy实现简单聊天室
  11. 树莓派引脚介绍与GPIO的初步认识与应用
  12. 文档管理系统解决方案
  13. 记录一次使用python来实现雷神加速器自动恢复时间和暂停时间的脚本
  14. PdfSharp库剪裁Pdf页面边缘空白部分
  15. 计算机组装有哪些,教你组装电脑主要配置有哪些
  16. linux系统自动获取ip地址,Linux系统下设置静态IP或自动获取动态IP的简单方法
  17. 有一个类似”abbc,d d.eeffgg,59.30ABDFR ”这样的包含大小写字母,数字,空格,逗号和句号的字符串,求各字符的数量。(设计一个一个函数,传入字符串,返回各字符数量的数据)
  18. CENTOS 7 静默安装 ORACLE 19C
  19. Historian 7.0 安装说明
  20. Linux欧姆单位怎么打,万用表如何进行欧姆校零

热门文章

  1. 高分屏win10PS/AI等软件界面字太小解决方法
  2. java 知网 语义 相似度,基于知网语义相似度的中文文本分类研究 论文笔记
  3. 数学建模重要算法简介及算法实现
  4. 原来,数据分析还可以这样干......
  5. 解决WIN10播放AVI等格式视频黑屏只有声音的问题
  6. 教你自动识别快递公司,过滤重复单号,查询物流信息
  7. 2020JAVA面试题附答案(持续更新版)
  8. eyoumailserver邮箱服务器与foxmail 邮箱客户端的使用和安装
  9. 拉里·埃里森和历史上最牛的演讲【转】
  10. 超详细MySQL安装教程(Windows)