HDMI/DVI____串行发送器

2023-05-16

一.功能:把10bit数据转化为串行数据在一个时钟周期全部输出(先输出高位,再输出低位)

二.框图

 

二.思路

     对于TMDS编码器,在每一个输入时钟周期,输入一次数据到TMDS编码器进行处理,然后又串行发送器输出串行数据。

  为了在一个周期内输出10位数据,我们设置输出时钟频率是输入时钟频率的5倍利用ODDR(ddio_out)实现双沿输出,可以达到在一个输入周期内输出10位串行数据的效果。

  输入输出时钟频率的关系可以用PLL来实现(5倍),ODDR在XILINX中是用原语实现,在quartus中可以调用IP核实现。

  在quartus中包括altddio_bidir双向双速率 IO)、altddio_in输入型双速率 IO)、altddio_out (输出型双速率 IO)等IP核,在 MegaWizard Plug-In Manager 的搜索框中输入 ddio 搜索即可。(双沿采样模块已经在千兆以太网详细学习了,这里不再介绍)

三.使用的技巧

  由于使用了双沿采样ddio_out模块,要实现10bit到1bit,得先把10bit转化为2bit,2bit双沿采样为1bit。(如果不用双沿采样,时钟频率就需要10倍,要求较高)

  为了实现把10bit转化为2bit,我设计了一个2bit寄存器,每个周期把10bit中的2bit放进来采样。

  为了实现这个目的,在代码中体现为:用1个模10计数器,每次加2,分别为:0,2,4,6,8。每次取两位,得到[1:0],[3:2]......[9:8]。同时使用了变量来取寄存器的内存值,变量的代码已经在前面介绍过了。


//定义模10移位计数器,用来分5次输出10bit的数据
reg [3:0]mod10_cnt ;

always @(posedge clk_5f)
if(!resetn)
    mod10_cnt <= 0 ;
else if (mod10_cnt >= 'd8 )
    mod10_cnt <= 0 ;
else
    mod10_cnt <= mod10_cnt + 2 ;    
    
//定义两bit的寄存器,用来移存10bit数据,输出给oddr。
reg [1:0]TMDS_2bit ;

always @( posedge clk_5f )
if(!resetn)
    TMDS_2bit <= 0 ;
else
    TMDS_2bit <= TMDS_code[('d8 - mod10_cnt)+:2] ;//发送顺序:[9:8]-->[1:0].TMDS_2bit[1]为高位。  

四.遇到的问题:

1.quartus不能在IP核的PLL文件夹中直接调用PLL(灰色,无法选中,一说是芯片IV代不可以,V及以上可以),需要在I/O文件夹中选择ALTPLL。ALTPLL复位信号为高电平有效,无法修改,使用时可以直接接0。

    

2.quartus调用IP核:

①创建IP核并调用:MegaWizard Plug-In Manager找到对应IP核,配置,输出时勾选inst.v文件,就可以复制出来例化了。

②IP核使用技巧:

  对于Quartus 中的很多 IP,我们都是可以直接使用其名加重定义参数的方式来调用,无需通过MegaWizard Plug-In Manager调用。使用这种写法的好处在于针对不同系列,不同版本的Quaruts 软件无需通过MegaWizard Plug-In Manager 创建 IP 核,当软件编译到该部分代码时会从软件自带的底层 IP 库中自动的例化DDIO 功能,非常的方便,把工程文件移植到别的电脑使用时不需要根据设定再重新创建IP(在VIVADO中需要,比较麻烦)

范围:ddio, fifo、pll、双口 ram 等都可以使用该方法。 需要说明的是,该方法仅为开发者的技巧性应用,目前笔者也没找到厂家提供的这种方法的使用说明文档,仅限经验丰富的工程师根据自己的能力使用。(摘自小梅哥教程)

具体操作:从创建好的 IP 核的 xx.v 文件中 把模块xx xx() 和 defpara参数 一起 copy 出来的。要注意你创建的IP和核中,它的端口连线有些是模块内部定义的变量,你需要进行一定的修改。如下面的PLL,创建好的IP核如下:

         

   

圈出来的地方是xx.v文件的内部变量,我们例化时需要自己创建功能相同的变量,连接上。

需要修改IP核参数时,如PLL输入时钟频率,可以直接在defpara那里修改,不需要重新去定义IP核再例化。

创建完以后,就可以在你的顶层文件直接调用了。

 3.差分信号

  HDMI.DVI使用差分信号传输数据。

  差分信号即是用两个线代替一根线来传输信号,增加了物理复杂度,好处是什么?

  用一根导线传输信号,信息隐藏在对地电平中,如1.2V,xxV之类的,都是对地0V的相对电压。

  用两根导线传输差分信号,信息隐藏在这两个差分信号的相对电压之中,由于差分信号幅度相同,相位相反。在计算机中又是用0/1表示,所以0/1为一对差分信号。一根导线表示的1,在差分信号中表示为 1 - 0 = 1 ;一根导线表示的 0,在差分信号中表示为 0 - 1 = -1 。

  好处:

  ①屏蔽电磁干扰,电磁干扰对两个差分信号的影响相同,所以不会改变他们的差值,从而不会影响信息的传递。

  ②单导线依赖虚地的稳定性,双导线不依赖,更可靠。

 4调用modelsim仿真时出现modelsim is existing with code 7 。

解决方法:跟据此链接建立新连接:【解决】计算机用户名是中文名导致软件安装失败!_Antrn的博客-CSDN博客_电脑用户名是中文 

5.为了增强时序性,让某些信号延迟1ns再输出,可以避免多个信号同时跳变时,取了跳变后的状态。

语法如下:

assign #1 a =  b;(assign必须是 #x 在前)

always@(*)begin a  = #1 b ;end  ;

always@(*)begin a  <= #1 b ;end  ;

always@(*)begin  #1  a  <= b ;end  ;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDMI/DVI____串行发送器 的相关文章

  • 树莓派(ubuntu系统)连接后使用HDMI-VGA,VGA无信号

    与系统无关 xff0c 主要修改config txt文件 详细配置参数见 xff1a http blog lxx1 com 1706
  • 树莓派CM4_Tiny(双HDMI)扩展板在Ubuntu Desktop下驱动OV5647摄像头的操作演示

    关键词 xff1a 树莓派 Compute Module CM4 双HDMI Ubuntu Camera OV5647 概述 xff1a Raspberry Pi Camera是树莓派硬件平台的官方摄像头模块 xff0c 国内有很多兼容摄像
  • Rockchip HDMI-CEC软件说明

  • 树莓派4b ubuntu mate 18.04设置开机自动登录,解决无HDMI无法开机问题

    一 树莓派4b ubuntu mate 18 04设置开机自动登录 之前安装的是树莓派4b Ubuntu server 的18 04版本 xff0c 通过命令行安装的ubuntu mate 18 04 xff0c 由于官方没有18 04ma
  • Xilinx ZYNQ 7000 HDMI

    High Definition Multimedia Interface HDMI 参考xilinx application note XAPP460 HDMI来自High Definition Multimedia Interface 高
  • 解决MAC用HDMI连接显示器就没声音问题

    声明 xff1a 我的MAC装了Windows系统 xff0c 问题是在Windows系统出现的 xff1a 1 右键点击声音图标 xff0c 点击 播放设备 2 原本默认设备是S24F350的 xff0c 改为扬声器就有声音了
  • AX7A200教程(6): 串口接收图片数据,通过hdmi接口输出显示

    本章节主要使用uart接收图片数据 xff0c 然后通过ddr3缓存 xff0c 最后通过hdmi接口显示输出 xff0c 功能框图如下图所示 uart接收的图片数据位1024 768 3分辨率大小的数据 xff0c 一共2359296个字
  • odroid x2安装ubuntu系统,HDMI显示,说说折腾事儿。

    安装的是Lubuntu14 04 xff0c odroid官网有下载 xff0c 烧写软件用官网下载的win32disk imager for odroid 不要用通用的win32disk image 可能不行 write烧写完毕之后记得v
  • 解决odroid-XU3的HDMI输出问题

    odroid XU3的板子直接通过microHDMI口连接显示器 xff0c 并没有显示 解决方法是修改 media boot boot ini文件 xff0c 取消屏蔽与HDMI设置相关语句 重启之后 xff0c 解决问题 由于不同的显示
  • FPGA基于XDMA实现PCIE X8的HDMI视频采集 提供工程源码和QT上位机程序和技术支持

    目录 1 前言2 我已有的PCIE方案3 PCIE理论4 总体设计思路和方案5 vivado工程详解6 驱动安装7 QT上位机软件8 上板调试验证9 福利 xff1a 工程代码的获取 1 前言 PCIE xff08 PCI Express
  • HDMI/DVI____TMDS编码

    一 编码步骤 xff1a 基本方法 xff1a 取第一位数据为初值 xff0c 接下来输入的每一位与前一导出的位 xff08 根据判断条件 xff09 进行异或XOR或者同或XNOR xff08 最小化传输 xff0c 减少0 1翻转 xf
  • LCD液晶屏接口和显示器接口介绍

    LCD液晶屏主流显示接口介绍 屏的接口类型种类以及接口定义分析 绝对收藏 I2C SPI UART RGB LVDS MIPI EDP和DP等显示屏接口简要总结 LCD主流显示接口介绍 这个ID洒家要了的博客 CSDN博客 lcd接口定义
  • HDMI的DDC是什么

    DDC 是什么 DDC Display Data Channel 显示数据通道 在 HDMI 协议中用于 Source 和 Sink 两端进行数据交换 通常是基于 I2C 标准的一套通讯机制 在实际使用过程中 Source 端的 HDMI
  • HDMI中的视频时序分析

    一 前言 建立层次观念 说到时序 我们首先想到的例子是IIC SPI 串口等接口的例子 以我们之前的理解 时序就是传输线上电平随时间变化的顺序 但是但是但是 在HDMI这里 我们应该建立一个新的观念 即时序不一定对应到物理层 即传输线上 这
  • HDMI之数据岛

    概述 发送端在发送视频信号之前 将多媒体信息通过数据岛传输给接收端 接收端通过数据岛信息获取当前分辨率 VIC 编码信息 RGB YCR等 色彩空间 位深等等 然后对应将视频信息解码 与此同时 多余的带宽用于传输音频信息等 本文通过具体的包
  • Linux 上的 HDMI 端口开发

    如何才能从应用程序中专门驱动 HDMI 输出 而不允许操作系统自动将其配置为显示输出 例如 使用标准 DVI VGA 作为主显示器 但使用设备文件将 Mplayer 视频输出发送到 HDMI 通过谷歌很难回答这个问题 几乎每个结果都与通过
  • Android 强制 HDMI 音频

    当我的 ADT 1 连接到电视时 无法通过 HDMI 播放声音 在该特定电视上 我必须在 Raspberry PI 上强制使用 HDMI 音频 因此我也尝试在 ADT 1 上强制使用它 我尝试制作一个具有许可的应用程序
  • Android - 发送 HDMI CEC 命令到电视 - minix - libCEC

    我正在开发 Minix NEO X8 H Android 媒体中心 4 4 2 我需要向电视发送 HDMI CEC 命令 当我的应用程序收到呼叫时 我想自动将电视源更改为 Minix hdmi来源 实际上 Minix 提供了一些启用 HDM
  • iPad 2 上带有 HDMI 适配器的黑条

    我的应用程序支持 HDMI 输出 我询问了电视分辨率的代码 得到了 1920 x 1080 px externalScreen bounds 好的 一切都很好 我已经设置了我的视图并在电视上尝试过 BUT 有黑条尽管电视被正确检测为 192
  • Android - 禁用 HDMI

    我的一个 Android 项目需要时不时地在 2 个 HDMI 输入之间切换 可能是一分钟一次 一根 HDMI 输入来自 Android 设备的 HDMI 输出 一根来自外部不可控源 我发现了一个 HDMI 开关 当信号可用时 它可以自动在

随机推荐

  • cmake交叉编译配置

    cmake交叉编译配置 很多时候 xff0c 我们在开发的时候是面对嵌入式平台 xff0c 因此由于资源的限制需要用到相关的交叉编译 即在你host宿主机上要生成target目标机的程序 里面牵扯到相关头文件的切换和编译器的选择以及环境变量
  • OS——gcc、g++、gdb、vim、vs code的基本使用

    文章目录 g 43 43 的使用gdb的使用vim的使用vscode的使用vs code的安装vs code中C 43 43 的编译运行配置 如果想要学习如何在CentOS 7中安装配置gcc g 43 43 gdb zhs和oh my z
  • make和cmake

    编程人员已经使用CMake和Make很长一段时间了 当你加入一家大公司或者开始在一个具有大量代码的工程上开展工作时 xff0c 你需要注意所有的构建 你需要看到处跳转的 CMakeLists txt 文件 你应该会在终端使用 cmake 和
  • ubuntu自带python与anaconda python环境的切换

    ubuntu的python可分为三大类 xff1a 1 ubuntu自带的python环境 一般安装在 usr bin 中python2和python3可以共存 2 anaconda自带的base环境 3 在anaconda中创建的虚拟py
  • 详细介绍如何在ubuntu20.04中安装ROS系统,以及安装过程中出现的常见错误的解决方法,填坑!!!

    本篇文章写于2020 10 xff0c 经过很多小伙伴的验证 xff0c 文章所介绍的步骤是可以正常完成安装的 xff0c 现在是2021 10 xff0c 经过近期的探索 xff0c 我将安装步骤进行了进一步的优化 xff0c 使安装变得
  • VScode进行python开发出现 No module named “XXX“的解决方法

    VScode进行python开发出现 No module named 34 XXX 34 的解决方法 最近从pycharm转向vscode的时候 xff0c 遇到了如下问题 span class token keyword import s
  • CM3寄存器简介

    Cortex M3基础 寄存器组 通用目的寄存器组R0 R7 也被称为低组寄存器 xff0c 所有指令都能访问字长32位 通用目的寄存器组R8 R12 高组寄存器 32位寄存器 复位后的初始值不可预料 堆栈指针R13 CM3中共有两个堆栈指
  • 基于亚博K210开发板的学习之旅(一)

    本文参考亚博智能官方K210开源课程 五月份购买了亚博的K210开发板 xff0c 但由于课程压力就搁置了 xff0c 最近暑假得空又恰逢电赛清单里有这个 芯片 xff0c 就抽空学习一下 xff0c 特写下这些 xff0c 以作记录 按照
  • STM32标准库通用软件模拟IIC

    STM32标准库通用软件模拟IIC 继上次通用可移植的矩阵键盘之后 xff0c 便继续寻找着下一个能够拿来只需改改引脚就可以使用的通用方案 恰好最近在研究PCA9685 xff0c 这是一片能够产生最多十六路PWM信号的芯片 xff0c 通
  • STM32F103控制PCA9685产生16路PWM波控制SG90舵机

    STM32控制PCA9685产生16路PWM波控制SG90舵机 如果你能点开这篇文章 xff0c 说明你已经知道PCA9685是多么强大 xff0c NXP公司原本做这片芯片是为了提供给LED使用 xff0c 在其官方文档里也能看到所有PW
  • 从源代码来看HAL库函数(一) HAL基础函数

    从源代码来看HAL库函数 xff08 一 xff09 HAL基础函数 全局变量 IO uint32 t uwtick 这个变量充当了一个运行时长计数的作用 xff0c 每发生一次SysTick中断就会加一 xff0c 直至溢出 xff0c
  • 使用TCP+串口与板子进行网络通信

    最近做了一个嵌入式的project xff0c 大概要求就是做一个client端 xff0c 一个sensor端 xff0c 两者通过TCP UDP进行通信 xff0c 然后在client端输入不同的命令sensor需做出不同的处理 xff
  • 毕业论文格式(图片题注引用,表格,公式格式)

    本科毕业论文差不多写完了 xff0c 记录一下一些格式 xff0c 以后写作可能会用到 xff0c 就可以翻起来看看 首先 xff0c 如果可以找到一篇格式符合要求的word文档的话 xff0c 最简单的方法就是在这个文档的基础上进行内容的
  • 图像处理——相位恢复(GS,TIE,改进型角谱迭代法)(已更新代码)

    利用GS xff0c TIE xff0c 改进型角谱迭代算法进行相位恢复 角谱传播理论 角谱传播理论可以翻阅傅里叶光学的书 xff0c 就能找到定量分析的计算公式 xff0c 可以分析某个平面的角谱垂直传播到另外一个平面的角谱 xff0c
  • 串口应用:遵循uart协议,发送多个字节的数据(状态机)

    上一节中 xff0c 我们遵循uart协议 xff0c 它发送一次只能发送6 7 8位数据 xff0c 我们不能随意更改位数 xff08 虽然在代码上可行 xff09 xff0c 不然就不遵循uart协议了 xff0c 会造成接收端无法接收
  • 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)

    一个数码管有八个引脚 xff0c 控制八段二极管的亮灭 xff0c 用以显示需要的数字 当有N个数码管时 xff0c 一个一个控制的话需要N x 8 个引脚 xff0c 消耗资源较多 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态
  • 彻底理解DDS(信号发生器)的fpga实现(verilog设计代码)

    DDS xff08 Direct Digital Synthesis xff09 是一种把一系列数字信号通过D A转换器转换成模拟信号的数字合成技术 它有查表法和计算法两种基本合成方法 在这里主要记录DDS查表法的fpga实现 查表法 xf
  • HDMI/DVI

    一 基础知识 1 历史 早期在FPGA芯片上实现HDMI控制显示是使用HDMI发送芯片 xff0c eg xff1a ADV7513 sil9022 xff0c CH7301等 用之前VGA控制中输出的RGB信号 行场同步信号和使能信号输入
  • HDMI/DVI____TMDS编码

    一 编码步骤 xff1a 基本方法 xff1a 取第一位数据为初值 xff0c 接下来输入的每一位与前一导出的位 xff08 根据判断条件 xff09 进行异或XOR或者同或XNOR xff08 最小化传输 xff0c 减少0 1翻转 xf
  • HDMI/DVI____串行发送器

    一 功能 xff1a 把10bit数据转化为串行数据在一个时钟周期全部输出 xff08 先输出高位 xff0c 再输出低位 xff09 二 框图 二 思路 对于TMDS编码器 xff0c 在每一个输入时钟周期 xff0c 输入一次数据到TM