FPGA-Xilinx原语调用之ODDR
记录背景:最近由于想实现GMIItoRGMII的功能,因此需要调用ODDR原语。
ODDR:Dedicated Dual Data Rate (DDR) Output Register
通过ODDR把两路单端的数据合并到一路上输出,上下沿同时输出数据,上沿输出a路下沿输出b路;如果两路输入信号一路恒定为1,一路恒定为0,那么输出的信号实际上就是输入的时钟信号。
调用的Verilog语句是:
// ODDR: Output Double Data Rate Output Register with Set, Reset
// and Clock Enable.
// 7 Series
// Xilinx HDL Language Template, version 2017.4 ODDR #(
.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
.INIT('b0), // Initial value of Q: 1'b0 or 'b1
.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
) ODDR_inst (
.Q(Q), // 1-bit DDR output
.C(C), // 1-bit clock input
.CE(CE), // 1-bit clock enable input
.D1(D1), // 1-bit data input (positive edge)
.D2(D2), // 1-bit data input (negative edge)
.R(R), // 1-bit reset
.S(S) // 1-bit set
); // End of ODDR_inst instantiation
模式解释:
OPPOSITE_EDGE模式:
在此模式中,时钟边沿被用来以两倍的吞吐量从FPGA逻辑中捕获数据。这种结构与virtex-6的实现比较相似。两个输出都提供给IOB的数据输入或者三态控制输入。

SAME_EDGE模式:
在此模式下,数据可以在相同的时钟边沿从给IOB。相同的时钟沿将数据送给IOB可以避免建立时间违规,并允许用户使用最小的寄存器来执行更高的DDR频率来进行寄存器的延迟,而不是使用CLB寄存器。

注意:
1、set和reset不能同时置位;
2、ODDR原语的复位需要约12个clock,第一次输入的数据可能会有问题(亲测),[由于公司网络的原因,无法上传图片],但亲测是如此。
修改代码前:
wire oddr_do_test; oddr_test oddr_test
(.clk(tx_clk),
.rst(rst),
.ce(~rst),
.di_p(tx_en),
.di_n(tx_er),
.do_o(oddr_do_test)
);

增加如下代码:
wire oddr_do_test; reg [:]tx_en_d;
reg [:]tx_er_d;
always @ (posedge tx_clk)
begin
tx_en_d <= {tx_en_d[:],tx_en};
tx_er_d <= {tx_er_d[:],tx_er};
end oddr_test oddr_test
(.clk(tx_clk),
.rst(rst),
.ce(~rst),
.di_p(tx_en_d[]),
.di_n(tx_er_d[]),
.do_o(oddr_do_test)
);

FPGA-Xilinx原语调用之ODDR的更多相关文章
- 58.xilinx原语DCM,PLL的使用
DCM_BASE 基本数字时钟管理模块的缩写,是相伴和频率可配置的数字锁相环电路,常用于FPGA系统中复杂的时钟管理.如需要频率和相位动态配置,则可以选用DCM_ADV原语,如需要相位动态偏移,可使用 ...
- Xilinx原语学习之时钟资源相关原语
一直来,都是使用Vivado中自带的GMIItoRGMII IP核来完成GMII转RGMII的功能:尽管对GMII及RGMII协议都有一定的了解,但从没用代码实现过其功能.由于使用IP时,会涉及到MD ...
- [原创][FPGA]Quartus中调用Modelsim波形仿真步骤说明
0. 简介 在使用QuartusII软件的过程中,经常地需要跑仿真,那么说到仿真就不得不说Modelsim这个仿真软件了,我们这里介绍下该软件在QuartusII中的使用方法. 1. 建立Quartu ...
- Xilinx器件原语
原语,其英文名为primitive,是FPGA厂商针对其器件特征开发的一系列常用模块的名称.原语是FPGA芯片中基本元件,代表FPGA中实际拥有的硬件逻辑单元,如LUT,D触发器,RAM等.相当于软件 ...
- FIR调用DSP48E_05
作者:桂. 时间:2018-02-06 17:52:38 链接:http://www.cnblogs.com/xingshansi/p/8423457.html 前言 到目前为止,本文没有对滤波器实 ...
- FPGA开发流程1(详述每一环节的物理含义和实现目标)
要知道,要把一件事情做好,不管是做哪们技术还是办什么手续,明白这个事情的流程非常关键,它决定了这件事情的顺利进行与否.同样,我们学习FPGA开发数字系统这个技术,先撇开使用这个技术的基础编程语言的具体 ...
- FPGA开发流程
需求说明:Verilog设计 内容 :FPGA开发基本流程及注意事项 来自 :时间的诗 原文来自:http://www.dzsc.com/data/2015-3-16/1080 ...
- 【FPGA篇章二】FPGA开发流程:详述每一环节的物理含义和实现目标
欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 FPGA的开发流程是遵循着ASIC的开发流程发展的,发展到目前为止,FPGA的开发流程总体按照下图进行,有些步骤可能由于其在当前项目中的条件 ...
- FPGA高速ADC接口实战——250MSPS采样率ADC9481
一.前言 最近忙于硕士毕业设计和论文,没有太多时间编写博客,现总结下之前在某个项目中用到的一个高速ADC接口设计部分.ADC这一器件经常用于无线通信.传感.测试测量等领域.目前数字系统对高速数据采集的 ...
随机推荐
- web 应用响应乱码问题
非西欧语系乱码原因 在没有设置任何内容类型或编码之前,HttpServletResponse使用的字符编码默认是ISO-8859-1.也就是说,如果直接输出中文,在浏览器上就会看到乱码. 有两种方式可 ...
- GIT速成
安装工具与使用工具: GIT工具 :https://www.git-scm.com/download/ WINGDOWS图形界面工具:https://download.tortoisegit.org/ ...
- springboot学习网站及博客
1关于Spring Boot的博客集合https://www.jianshu.com/p/7e2e5e7b32ab 2泥瓦匠BYSocket的Spring Boot系列 https://www.bys ...
- 1.创建maven 项目 动态web工程完整示例
注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装maven 一.创建项目 1.新建maven项目,如果不在上 ...
- C# 中 DataTable 使用详解。
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...
- RAC性能分析 - gc buffer busy acquire 等待事件
概述---------------------gc buffer busy是RAC数据库中常见的等待事件,11g开始gc buffer busy分为gc buffer busy acquire和gc ...
- Mysqlbinlog工具及导出数据并转换编码导入
2014 - binlog是通过记录二进制文件方式来备份数据,然后在从二进制文件将数据恢复到某一时段或某一操作点. 1.使用mysqlbinlog工具来恢复 Mysqlbinlog日志如何开启? 在m ...
- 导出AD用户所属组,查询AD用户(aduser)
$ous="admin","bladmin","af","dd"for($i=0;$i -lt 2;$i++) { $o ...
- 铁乐学Python_Day34_Socket模块2和黏包现象
铁乐学Python_Day34_Socket模块2和黏包现象 套接字 套接字是计算机网络数据结构,它体现了C/S结构中"通信端点"的概念. 在任何类型的通信开始之前,网络应用程序必 ...
- 如何创建一个Quartz.NET的工作,需要注射autofac
问题: 使用 Quartz.Net 做定时任务时,实现IJob对象的服务,Autofac不会自动注入,使用构造函数会直接出现异常,无法执行Execute方法. 解决方式 方法一: 使用 Autofac ...