差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
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> | ||
行 39: | 行 40: | ||
</WRAP> | </WRAP> | ||
- | \\ | + | 行时序中各个部分持续时钟周期分别为:同步脉冲96像素点周期,显示后沿48像素点周期,显示时序段640像素点周期,显示前沿16像素点周期,一共800个像素点周期。在程序中对应的参数为: |
- | 行时序中各个部分持续时钟周期分别为:同步脉冲96像素点周期,显示后沿48像素点周期,显示时序段640像素点周期,显示前沿16像素点周期,一共800个像素点周期。在程序中对应的参数为:\\ | + | |
<code verilog> | <code verilog> | ||
行 59: | 行 59: | ||
\\ | \\ | ||
场时序和行时序不同的是,行时序以像素点周期为单位,而场时序则以行周期为单位。场时序也分为四个部分组成,如图 18 5所示,各个部分持续行周期数分别为:帧同步脉冲2个行周期,帧显示后沿32个行周期,帧显示时序段个480个行周期,帧显示前沿11个行周期,一共525个行周期。在程序中对应的参数为: | 场时序和行时序不同的是,行时序以像素点周期为单位,而场时序则以行周期为单位。场时序也分为四个部分组成,如图 18 5所示,各个部分持续行周期数分别为:帧同步脉冲2个行周期,帧显示后沿32个行周期,帧显示时序段个480个行周期,帧显示前沿11个行周期,一共525个行周期。在程序中对应的参数为: | ||
- | \\ | + | |
<code verilog> | <code verilog> | ||
行 223: | 行 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接口上,然后把程序下载到开发板上既可以看到显示器上显示的图像。 | ||