当前位置: 首页 > news >正文

HDMI/DVI____串行发送器

一.功能:把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  ;

相关文章:

  • 深度操作系统 15.2——怀揣梦想,笃定前行
  • SAP PI PO 接口配置主体传播 RSXMB_CONFIG_PP_NEW
  • Python编程基础:函数的使用
  • 19.请介绍一下重绘和回流
  • Flink / Scala - AllWindowFunction 与 KeyedProcessFunction 处理 TopK 问题
  • C++20之Concpet(概念部分,之二)
  • 【Spirng】@Component和@Configuration和@Bean的区别
  • 跟着江南一点雨学习springmvc(3)
  • 安卓手机使用Tasker实现应用级功能,屏幕翻译v9,翻译复制贴图
  • 一篇文章吃透 CSS3 属性: transition过渡 与 transform动画
  • 通讯录的动态版本
  • Docker搭建Kafka集群
  • WPS增加正则处理函数,简直如虎添翼
  • opencloudos容器镜像优化
  • 二.go语言条件与循环
  • [nginx文档翻译系列] 控制nginx
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 345-反转字符串中的元音字母
  • Android系统模拟器绘制实现概述
  • css的样式优先级
  • markdown编辑器简评
  • PermissionScope Swift4 兼容问题
  • PHP 7 修改了什么呢 -- 2
  • spring + angular 实现导出excel
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 日剧·日综资源集合(建议收藏)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​如何防止网络攻击?
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (4)logging(日志模块)
  • (4)STL算法之比较
  • (HAL库版)freeRTOS移植STMF103
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • *1 计算机基础和操作系统基础及几大协议
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ./configure,make,make install的作用
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @Responsebody与@RequestBody
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [Android Pro] Notification的使用
  • [Bugku]密码???[writeup]
  • [BZOJ2208][Jsoi2010]连通数
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C#]winform部署yolov5-onnx模型