1.2.2 主控制器模块
该模块为显示控制器的主要控制部分,通过对输入缓冲的读请求信号和输出缓冲的写请求信号处理,来实现对两个SDRAM的读、写切换。上电后,该模块接收从输入缓冲中读出的数据并将其写入到SDRAM 1中,同时从SDRAM2中读出数据,送入到输出缓冲中,当然最初读出的数据为无效数据。当SDRAM1中写满一帧图像数据,即1024×768个有效数据后,该模块对两个SDRAM进行读、写切换,即将接收数据写入到SDRAM2中,同时从SDRAM 1中读出数据,一直按此规则进行读、写切换。两个SDRAM的读、写地址发生器靠主控制器内部的计数器来实现。
1.2.3 SDRAM控制器模块
该模块首先完成对SDRAM 的初始化,初始化过程为:上电后等待200 us,然后对所有BANK发预充命令,接着发出八个自动刷新命令,然后进行模式设置,模式设置时将SDRAM设置成连续的全页并发模式,即512并发。
初始化结束后,SDRAM进入正常工作状态,准备接收读、写命令。当SDRAM在空闲状态下,为保持其数据不丢失,必须对其进行定时刷新,一般要求64ms内刷新4096次,通常根据时钟频率,用计数器计时钟脉冲到15.625 us时,发自动刷新命令,但是当SDRAM在进行读、写进发时,自动刷新命令会打断读、写,从而造成数据丢失。该设计中,由于在64ms内对SDRAM至少进行4096次读、写操作,所以可以不必对其进行刷新。
由于SDRAM被设置成全页并发,预充命令可停止并发,所以当SDRAM读、写到511时,发出预充命令,来停止并发,同时关闭当前行,为下一次读、写作好准备。SDRAM初始化后,其状态转移图如图3所示。
图3 SDRAM初始化后的状态转移图
1.2.4 时序发生器模块
该模块为输出行、场同步产生模块,利用FPGA内部时钟锁相环倍频后的65MHZ的主时钟产生符合VESA标准的分辨率为1024×768、帧频为60HZ的标准XGA格式的行、场同步信号,同时在行、场参考信号都有效时产生一个信号给输出缓冲模块,作为输出缓冲的读使能信号。根据VESA标准,分辨率为1024×768、帧频为60HZ的标准XGA信号的象素时钟为65MHZ,行同步信号的有效时间相当于1024个象素时钟周期,同步头宽度相当于136个象素时钟周期,前肩宽度为相当于26个象素时钟周期,后肩宽度为相当于162个象素时钟周期。场同步信号的有效时间相当于768个行周期长度,同步头为6个行周期长度,前肩为3个行周期长度,后肩为29个行周期长度。根据此标准,当行、场参考信号都有效时,一幅图像可输出1024×768个有效数据。该模块的时序仿真波形如图4所示。
1.2.5 输出缓冲模块
该模块为深度为1024、宽度为16bit的异步FIFO(先进先出),写时钟和读时钟同为65MHZ的主时钟,SDRAM初始化结束后,该模块先从SDRAM2中读出1024个数据,然后才使时序发生器模块开始工作,当读使能有效时,在读时钟同步下,读地址计数器从0到1023循环计数,当计数器计到100或700时,该模块向主控制器模块发写请求命令,从而每次可从SDRAM中连续读出512个数据,由于在输出行、场消隐期间,读使能信号无效,所以,不会产生读空现象。
1.2.6 色空间转换模块
输出缓冲模块输出YCbCr(4:2:2)格式的信号,其输出顺序如表1所示。本设计采用临近插值法,插值后的YCbCr格式如表2所示。
表1 YCbCr(4:2:2)图像格式 Y0Cb0 Y1Cr0 Y2Cb2 Y3Cr2 Y4Cb4 Y5Cr4 ……
表2 插值后的YCbCr图像格式 Y0Cb0Cr0 Y1Cb2Cr0 Y2Cb2Cr2 Y3Cb4Cr2 Y4Cb4Cr2 ……
YCbCr色空间到RGB色空间的转换公式为:
其中Y的范围是(16,235),Cb、Cr的范围是(16,240),为了防止相减后为负出现溢出,对转换公式变形得:
用VHDL语言描述小数乘法时,通常是将小数扩大2的整数幂次方倍后,取整进行乘法运算,然后将结果进行移位操作。当需要对运算结果进行四舍五入时,可以在运算时加0.5,然后对运算结果取整。下面将对R的运算过程进行描述,运算精度取11位。
R=(1.164Y+1.596Cr)-222.912+0.5
= (1.164Y+1.596Cr)-222.412
= (1/211) [(2384Y+3296Cr)-455499]
将方括号中的运算结果右移11位,即可得到R的值。Cb、Cr的运算过程与此类似。
色空间转换模块输出24bit RGB(8:8:8)信号,该信号经D/A转换后,配合时序发生器模块产生的行、场同步信号,即可在VGA显示器上显示。
色空间转换模块之所以放在输出缓冲模块后,主要是为了减少输入缓冲和输出缓冲模块中的先进先出及SDRAM的存储空间,如在相同精度下,SDRAM存储一帧图像将会占用1024×768×24bit的存储空间,色空间转换模块放在输出缓冲模块后,将会减少1/3的存储空间。
2 显示控制器的硬件实现
该显示控制器是基于Xilinx公司的Spartan-IIE系列FPGA XC2S300E-6-PQ208C设计实现的。此FPGA逻辑资源丰富,其内有30万个系统门,6912个逻辑单元(LC),1536个可配置逻辑快(CLB),64Kbit的块RAM,146个可用的I/O口,4个数字延迟锁相环(DLL)。块RAM可实现大量数据的内部存储,延迟锁相环可对时钟进行管理,可自动调整并消除输入时钟与FPGA内部时钟之间的相位偏移,同时还可实现对时钟的分频、倍频和移相。
用于帧缓存的两个SDRAM 的型号为HY57V281620HCST,此SDRAM 为Hynix公司生产的高速存储器,其内有四个Bank,每个Bank的存储空间为2M×16bit,可应用于需存储大量数据的场合。
3 结论与展望
本文设计的显示控制器具有很强的灵活性,当输入图像格式改变时,只需在色空间转换模块做相应修改,便可实现不同格式图像的VGA显示。基于该显示控制器而研发的高分辨率监控摄像机、数字视频展台等产品可广泛应用在教育、银行、煤矿、交通、医疗等领域。