由于项目需要使用LVDS通信接口,从xilinx官方selectio资源入手,选择关键原语进行学习和功能仿真验证
1 IDDRE1
功能仿真
调用Xilinx代码模板进行简单的功能仿真:
OPPOSITE_EDGE
DDR采样,i_clk上升沿采样和下降沿采样,上升沿采样的数据在o_data_q1立即输出;下降沿采样的数据在o_data_q2立即输出。输入数据单位长度为半个时钟周期,输出数据单位长度为1个时钟周期。
SAME_EDGE
DDR采样,i_clk上升沿采样和下降沿采样,上升沿采样的数据在o_data_q1立即输出;下降沿采样的数据,等到下次上升沿时在o_data_q2立即输出。
SAME_EDGE_PIPELINED
DDR采样,i_clk上升沿采样和下降沿采样,上升沿采样的数据,等到下次上升沿时在o_data_q1立即输出;下降沿采样的数据,等到下次上升沿时在o_data_q2立即输出。
在属性栏中将IS_CB_INVERTED由0改为1,此时将testbench中i_clk_b改成与i_clk相位、频率、占空比一致,仿真结果与上图一样。
IDDRE1原语block框图如下
IDDRE1端口如下
Port | I/O | Description |
Q1, Q2 | Output | IDDRE1寄存器输出 |
C | Input | 时钟输入管脚 |
CB | Input | IS_C_INVERTED=0,IS_CB_INVERTED=0时反向时钟输入管脚 |
D | Input | IOB(输入输出单元)给出的寄存器输入 |
R | Input | 给到C/CB的异步复位,同步释放 |
IDDRE1属性如下
Attribute | Value | Default | Type | Description |
DDR_CLK_EDGE | OPPOSITE_EDGE SAME_EDGE SAME_EDGE_PIPELINED | OPPOSITE_EDGE | String | 根据时钟边沿设置IDDRE1的操作模式 |
IS_C_INVERTED | 0 or 1 | 0 | Bit | 为1时,C输入局部时钟反向 |
IS_CB_INVERTED | 0 or 1 | 0 | Bit | 为1时,C和CB被同一个全局时钟缓冲驱动;为0时,CB必须在相同的全局时钟缓冲前面加一个反相器 |
2 ODDRE1
功能仿真
调用Xilinx代码模板进行简单的功能仿真:
波形如下
结合xilinx user guide分析波形,在上升沿处采样i_data1和i_data2,该上升沿后o_data_q依次输出采样的i_data1和i_data2的值,各占半个时钟周期。 输入数据单位长度为1个时钟周期,输出数据单位长度为半个时钟周期。
分析仿真波形发现标尺1处采样的idata1为1、idata2为0,该上升沿后o_data_q却输出了0(半个时钟周期)、0(半个时钟周期);在标尺2处采样idata1为0、idata2为1,该上升沿后o_data_q输出了0(半个时钟周期)、1(半个时钟周期);后面采样和输出均正确。在标尺1处出现输出不正确的情况。
将复位后多延时一段时间再做采样操作,如下图。此时不存在上图中的问题。
ODDRE1原语block框图如下
ODDRE1端口如下
Port | I/O | Description |
Q | Output | ODDRE1寄存器输出 |
C | Input | 时钟输入引脚 |
D1, D2 | Input | ODDRE1寄存器输入 |
SR | Input | 异步置位/复位,SR被断言(复位?),Q异步置位为SRVAL,恢复正常操作之前SRVAL保持4个时钟周期 |
IDDRE1属性如下
Attribute | Values | Default | Type | Description |
SRVAL | 0 or 1 | 0 | Bit | 复位后Q输出值的配置 |
IS_C_INVERTED | 0 or 1 | 0 | Bit | 本地信号反向 |
IS_D1_INVERTED | 0 or 1 | 0 | Bit | Not supported Note: Simulation results will not match hardware if IS_D1_INVERTED is set to 1. |
IS_D2_INVERTED | 0 or 1 | 0 | Bit | Not supported Note: Simulation results will not match hardware if IS_D2_INVERTED is set to 1. |
SIM_DEVICE | ULTRASCALE ULTRASCALE_PLUS ULTRASCALE_PLUS_ES1 ULTRASCALE_PLUS_ES1 ULTRASCALE | ULTRASCALE | String | Device family for behavioral simulation. |