差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
book_excise_vga_if [2021/08/24 11:14]
zili
book_excise_vga_if [2021/08/24 12:18] (当前版本)
zili
行 10: 行 10:
 ### 2. 实验原理 ### 2. 实验原理
 #### 2.1 VGA接口电路原理图 #### 2.1 VGA接口电路原理图
-在介绍VGA接口的工作原理之前,先介绍一下本实验的VGA接口电路图,如图 18 1所示。其中U18为VGA控制芯片ADV7123,而J21为VGA接口。实验中通过FPGA控制U18来实现图像的输出。+在介绍VGA接口的工作原理之前,先介绍一下本实验的VGA接口电路图,如图18-1所示。其中U18为VGA控制芯片ADV7123,而J21为VGA接口。实验中通过FPGA控制U18来实现图像的输出。
 {{ :​图18-1.jpg |图18-1 实验原理图}} {{ :​图18-1.jpg |图18-1 实验原理图}}
 <WRAP centeralign>​ <WRAP centeralign>​
行 26: 行 26:
 #### 2.3 VGA时序分析 #### 2.3 VGA时序分析
 本实验需要在显示器上显示一个640*480分辨率的静态图像,同时根据VGA接口需要产生相应的场行消影信号,具体信号比例如图18-3所示。 本实验需要在显示器上显示一个640*480分辨率的静态图像,同时根据VGA接口需要产生相应的场行消影信号,具体信号比例如图18-3所示。
 +
 {{ :​图18-3.png |图18-3 有效信号和场行消影信号所占的比例}} {{ :​图18-3.png |图18-3 有效信号和场行消影信号所占的比例}}
 <WRAP centeralign>​ <WRAP centeralign>​
 **图18-3 有效信号和场行消影信号所占的比例** **图18-3 有效信号和场行消影信号所占的比例**
 </​WRAP>​ </​WRAP>​
 +\\
  
 控制VGA接口要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。 VGA的行时序如图 18-4所示,其中包括同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。\\ 控制VGA接口要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。 VGA的行时序如图 18-4所示,其中包括同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。\\
-{{ :​图18-4.jpg |图18-4 ​ VGA行时序参考图}}+ 
 +{{ :​图18-4.jpg |图18-4 VGA行时序参考图}}
 <WRAP centeralign>​ <WRAP centeralign>​
-**图18-4 ​ VGA行时序参考图**+**图18-4 VGA行时序参考图**
 </​WRAP>​ </​WRAP>​
  
-\\ +行时序中各个部分持续时钟周期分别为:同步脉冲96像素点周期,显示后沿48像素点周期,显示时序段640像素点周期,显示前沿16像素点周期,一共800个像素点周期。在程序中对应的参数为:
-行时序中各个部分持续时钟周期分别为:同步脉冲96像素点周期,显示后沿48像素点周期,显示时序段640像素点周期,显示前沿16像素点周期,一共800个像素点周期。在程序中对应的参数为:\\+
  
 <code verilog> ​ <code verilog> ​
行 57: 行 59:
 \\ \\
 场时序和行时序不同的是,行时序以像素点周期为单位,而场时序则以行周期为单位。场时序也分为四个部分组成,如图 18 5所示,各个部分持续行周期数分别为:帧同步脉冲2个行周期,帧显示后沿32个行周期,帧显示时序段个480个行周期,帧显示前沿11个行周期,一共525个行周期。在程序中对应的参数为: 场时序和行时序不同的是,行时序以像素点周期为单位,而场时序则以行周期为单位。场时序也分为四个部分组成,如图 18 5所示,各个部分持续行周期数分别为:帧同步脉冲2个行周期,帧显示后沿32个行周期,帧显示时序段个480个行周期,帧显示前沿11个行周期,一共525个行周期。在程序中对应的参数为:
-\\+
 <code verilog> ​ <code verilog> ​
  
行 221: 行 223:
 </​code>​ </​code>​
  
 +#### 3.5 VGA_OSD_RAM模块(VGA_OSD_RAM.v)
 +这里需要说明的是因为FPGA内部的RAM大小有限,无法存储10位三基色的图像数据,所以这里只存储了黑白2值图像。VGA_OSD_RAM模块根据读取出来的2值图像的值,也即是根据读取出来的是0还是1而给出相应的10位的三基色。其接口如下所示:
 +<code verilog> ​
  
-\\ +output reg [9:​0] oRed;//​输出像素色彩信号 
-\\ +output reg [9:​0] oGreen;​ //​输出像素色彩信号 
-### 4仿真结果+output reg [9:​0] oBlue;​ //​输出像素色彩信号 
 +input [18:​0] iVGA_ADDR;​ //​输出像素值存储的地址信号 
 +input iVGA_CLK;​ //​ VGA时钟:25.2MHz 
 +input [18:​0] iWR_ADDR;​ //​输入写地址信号 
 +input iWR_DATA;//​输入待写入数据 
 +input iWR_EN;//​输入写使能 
 +input iWR_CLK;//​输入写时钟 
 +input [9:​0] iON_R;//​当存储的像素点数据位1’b1时,对应的RGB三色值 
 +input [9:​0] iON_G;​ 
 +input [9:​0] iON_B;​ 
 +input [9:​0] iOFF_R;​ //​当存储的像素点数据位1’b0时,对应的RGB三色值 
 +input [9:​0] iOFF_G;​ 
 +input [9:​0] iOFF_B;​ 
 +input iRST_N;​ 
 +具体程序如下所示: 
 +reg [2:​0] ADDR_d;//​存储输入地址信号的低3位 
 +reg [2:​0] ADDR_dd;//​为时序需要将ADDR_d延时一个时钟周期 
 +always@(posedge iVGA_CLK or negedge iRST_N) begin 
 + if(!iRST_N) begin 
 + oRed <​= 0;​ 
 + oGreen <​= 0;​ 
 + oBlue <​= 0;​ 
 + ADDR_d <​= 0;​ 
 + ADDR_dd<​= 0;​
  
 + end
 + else begin
 + ADDR_d <​= iVGA_ADDR[2:​0];​
 +ADDR_dd <​= ~ADDR_d;  ​
 + oRed <​= ROM_DATA[ADDR_dd]?​ iON_R : iOFF_R; //​根据该像素对应
 +//​在存储器的值为0还是为1,输出项对应的10为RGB三色信号
  
 + oGreen <​= ROM_DATA[ADDR_dd]?​ iON_G : iOFF_G;
 + oBlue <​= ROM_DATA[ADDR_dd]?​ iON_B : iOFF_B;
 +end
 +end
 +//​存储了图像的RAM。
 +Img_RAM u0 ( //​写入接口,目前没有使用
 + .data(iWR_DATA),​
 + .wren(iWR_EN),​
 + .wraddress({iWR_ADDR[18:​3],​~iWR_ADDR[2:​0]}),​
 + .wrclock(iWR_CLK),​
 + //​ Read Out Side
 + .rdaddress(iVGA_ADDR[18:​3]),​
 + .rdclock(iVGA_CLK),​
 + .q(ROM_DATA));​
  
 +</​code>​
 +
 +读取出来的数据为8位宽,而8位宽的数据中的每一位对应一个像素点,同时8位位宽数据的低位对应的像素应该先显示在屏幕上,截取输入地址信号iVGA_ADDR的低3位作为MUX,输出相应的像素信息。
  
 \\ \\
 \\ \\
-### 5文件说明 +### 4运行结果 
 +通过SignalTap看到的FPGA内部场行同步信号如图 18 7所,其中VGA_HS为图 18 4所示时,而VGA_R为红色信号线,而VGA_VS为场同步信号线。
  
 +{{ :​图18-7.jpg |图18-7 运行结果}}
 +<WRAP centeralign>​
 +**图18-7 运行结果**
 +</​WRAP>​
  
 +\\
 +\\
 +### 5. 演示程序文件说明
 +|文件名|功能|
 +|TE3_Default.v|顶层模块。|
 +|Reset_Delay.v|延时模块。|
 +|VGA_Controller.v|VGA控制逻辑模块|
 +|VGA_OSD_RAM.v|存储显示数据模块。|
 +|VGA_PLL.v|产生频率为25.2MHz的VGA时序所需的主时钟。|
  
 \\ \\
 \\ \\
 ### 6. 演示程序使用 ### 6. 演示程序使用
 +演示设备:核心板、扩展板、带VGA接口的显示器。
  
 +演示方法:将显示器连接到开发板上面的VGA接口上,然后把程序下载到开发板上既可以看到显示器上显示的图像。