时钟域同步模块是输出控制模块设计的重点,它主要负责两个时钟域之间的控制信号传递。跨时钟域的信号传递设计较为麻烦, 所以设计中将传递的信号分为两类:数据信号和控制信号,其中控制信号就是通过时钟域同步模块传递。对需要跨时钟域传递的信号数进行精简,在最后方案中只需要2个信号:WrDone信号由系统时钟域发出,通知显示时钟域某块双口SRAM中的数据已经更新完毕,可以读取并进行显示输出;RdDone信号由显示时钟域发出,通知系统时钟域某块双口SRAM中的数据已经显示完毕,可以更新其内部的数据。信号在不同的时钟域之间传递需要采取消除亚稳态(Metastability)的处理措施,可使信号通过两级寄存器锁存输出,如图3所示。
图3 跨时钟域信号亚稳态消除电路
图4 视频输出子模块的硬件实现框图
设计中有两点值得注意,首先,时钟域同步电路应放在一个独立的模块中,保证综合工具的优化、时序分析的正确,并方便电路的分析和调试;同时,为了能够使信号的目标时钟域采集到信号变化,设计中传递的控制信号都采用电平信号表征。
时钟域之间要传递的另一种信号是数据信号,由于数据信号数目较多、变化也较快,所以它们的传递通过双口DPRAM实现。双口DPRAM要求读写端口对同一存储地址的操作要满足一定的时间间隔,否则会出现数据传输错误,甚至会破坏硬件电路。因此为了避免DPRAM的读写冲突,设计中采用了"乒乓"缓冲的方法,两块DPRAM交替存取解码后用于显示的亮度或色差数据:当显示部分读取一块DPRAM中的数据时,系统向另一块DPRAM中写接下来要显示的数据,数据读取完毕时,两块DPRAM就进行交换。这部分共用4块DPRAM来实现,2块传递亮度信号,2块传递色差信号。
下面分析在视频控制器显示输出子模块中运用到的格式转换算法、图像缩放处理算法以及它们的硬件实现。
显示数据格式转换分析
根据Sil 164 DVI信号编码芯片资料,同时参考H.264视频编码标准中给出的YUV → RGB转换格式,故在设计中采用的固定转换算法如下式所示:
上式经过定点化处理,使用移位和相加的方法实现了转换,如下式所示:
在硬件设计中的YUV、RGB信号都是用8位无符号数表示,中间变量采用12位保证精度。最后要在0~255的范围内对计算出的RGB结果进行剪裁处理,式中的幂指数和除法运算都通过移位来实现。