由于 DisplayPort IP 内核硬件演示示例设计(版本 16.0 及更早版本)出现问题,当 DisplayPort IP 内核接口连接到英特尔® GPU 时,可能无法看到此图像。虽然 RX 和 TX MSA 值看起来可能正确,但显示器上不会显示任何图像。这是因为英特尔 GPU 使用的时钟模式与 DisplayPort IP 内核源不匹配。英特尔 GPU 使用同步时钟,而 DisplayPort IP 内核源使用异步时钟。这会导致硬件演示示例设计的两个问题。
首先,硬件演示示例设计使用固定的 NVID 值用于像素时钟恢复 (PCR) 模块。此设置适用于使用异步时钟且不适用于英特尔 GPU 的 GPU。
其次,由于他们的时钟模式,英特尔 GPU 将 RX MSA MISC0 寄存器的位 0 设置为 1,而 DisplayPort IP 内核源将 TX MSA MISC0 寄存器的位 0 设置为 0。尽管这些位在规格范围内存在差异,但Nios® II软件(特别是 EDID 传递代码)期望 RX MSA MISC0 与 TX MSA MISC0 完全匹配,如果出现不匹配,将禁用 DisplayPort IP 内核源。
首先,修改顶层 Verilog 文件以使用 PCR 模块的固定 NVID 值来禁用。在主项目目录中,修改文件 a10_dp_demo.v 更改一行,
从:
defparam bitec_clkrec_i.FIXED_NVID = 1;
自:
defparam bitec_clkrec_i.FIXED_NVID = 0;
第二,在比较 RX MSA MISC0 和 TX MSA MISC0 寄存器时,修改Nios II软件以忽略位 0。在主项目目录中,修改文件 main.c 以更改两行,
从:
rx_misc0 = IORD(btc_dprx_baseaddr(0)、DPRX0_REG_MSA_MISC0)和 0xFFFF;
tx_misc0 = IORD(btc_dptx_baseaddr()、DPTX0_REG_MSA_MISC0)和 0xFFFF;
自:
rx_misc0 = IORD(btc_dprx_baseaddr(0)、DPRX0_REG_MSA_MISC0)& 0xFFFE;
tx_misc0 = IORD(btc_dptx_baseaddr()、DPTX0_REG_MSA_MISC0)& 0xFFFE;
进行这些修改后,运行脚本 build_sw.sh 以重建软件项目,然后在 Quartus® Prime 软件中重新编译项目。或者,您可以重新运行脚本 runall.tcl,这将为您执行这两个步骤。
这两个问题都在 Quartus® Prime 软件 v16.1 DisplayPort 硬件演示示例设计中得到了修复。