差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
book_excise_vga_if [2021/08/24 11:16] zili |
book_excise_vga_if [2021/08/24 12:18] (当前版本) zili |
||
---|---|---|---|
行 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接口上,然后把程序下载到开发板上既可以看到显示器上显示的图像。 | ||