集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

FPGA初级课程第二十四讲 VGA(显示纯色、彩条)

[复制链接]
 楼主| lcytms 发表于 2017-2-14 11:42:50 | 显示全部楼层
本帖最后由 lcytms 于 2017-2-14 11:44 编辑

进行分析综合检查。
编写Testbench。
新建top_tb.v文件。
`timescale 1ns/1ps

module top_tb;

        reg clk, rst_n;
       
        wire [2:0] r, g;
        wire [1:0] b;
        wire hsync, vsync;

       
        top dut(.clk(clk), .rst_n(rst_n), .r(r), .g(g), .b(b), .hsync(hsync), .vsync(vsync));
       
        initial begin
                clk = 1;
                rst_n = 0;
                #200.1
                rst_n = 1;
               
                #800_000 $stop;
        end
       
        always #10 clk = ~clk;

endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-2-14 11:46:37 | 显示全部楼层
进行分析综合检查。
进行仿真设置。
查看仿真结果。

先看行同步信号。
从复位完成开始时,行同步脉冲每经过1056个VGA时钟信号(40MHz)输出一次。
再看帧同步信号。
从复位完成开始时,经过4个行周期的帧同步脉冲之后,再经过23个行周期的显示后沿阶段,进入显示有效的阶段。
此时,RGB输出8’b111_000_00,对应红色输出。
时间间隔满足设计要求。
仿真功能正确。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-2-14 11:52:15 | 显示全部楼层
参照.tcl文件设置好FPGA管脚
参照EP4CE6E22C8N.tcl文件内容,对FPGA芯片管脚进行设置。

EP4CE6E22C8N.tcl文件相关内容如下所示。
FPGA芯片配置结果如图所示。

        #set_global_assignment -name FAMILY "Cyclone IV"
        #set_global_assignment -name DEVICE ep4ce10f17c8n

set_location_assignment PIN_E1    -to    clk                

# KEY 轻触按键
set_location_assignment PIN_L3    -to   key[0]                  

# 256色VGA
set_location_assignment PIN_A7    -to  vga_vs
set_location_assignment PIN_A6    -to  vga_hs
set_location_assignment PIN_C6    -to  vga_b[1]
set_location_assignment PIN_B5    -to  vga_b[0]
set_location_assignment PIN_E5    -to  vga_g[2]
set_location_assignment PIN_A4    -to  vga_g[1]
set_location_assignment PIN_D4    -to  vga_g[0]
set_location_assignment PIN_C3    -to  vga_r[2]
set_location_assignment PIN_B1    -to  vga_r[1]
set_location_assignment PIN_E8    -to  vga_r[0]         
                 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-2-14 11:54:21 | 显示全部楼层
.sof文件下载到FPGA
全编译FPGA工程,生成.sof文件,连接至芯ZX_1开发板并上电。
打开Programmer通过Jtag口,将.sof文件下载到FPGA进行在线仿真。
.sof文件下载界面如下图所示。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-2-14 11:55:30 | 显示全部楼层
开发板运行效果(显示纯色)

开发板运行效果如下图所示。
经检查,开发板运行效果与设计相符。
屏幕显示纯色(红色)。
功能验证正确。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-2-14 11:56:18 | 显示全部楼层
修改VGA驱动逻辑模块vga.v。
使之显示红绿蓝三色彩条。屏幕三等分,从上至下依次显示红、绿、蓝。
修改vga.v(显示彩条)文件如下。
module vga(clk, rst_n, rgb8, hsync, vsync);

        input clk, rst_n;
       
        output [7:0] rgb8;
        output hsync, vsync;
       
        reg [31:0] hcnt, vcnt;
        wire hflag, vflag;

/////        800*600*60 40.0MHz = 1056(128+88+800+40) * 628(4+23+600+1) * 60Hz
        parameter        ha = 128,
                                        hb = 88,
                                        hc = 800,
                                        hd = 40,
                                        he = 1056;
        parameter        va = 4,
                                        vb = 23,
                                        vc = 600,
                                        vd = 1,
                                        ve = 628;

        localparam        hab = ha + hb,
                                        hac = ha + hb + hc;
        localparam        vab = va + vb,
                                        vac = va + vb + vc;
       
        always @ (posedge clk or negedge rst_n)
                begin
                        if (!rst_n)
                                begin
                                        hcnt <= 0;
                                        vcnt <= 0;
                                end
                        else
                                begin
                                        if ((vcnt == ve - 1) && (hcnt == he - 1))
                                                begin
                                                        hcnt <= 0;
                                                        vcnt <= 0;
                                                end
                                        else       
                                                begin
                                                        if (hcnt == he - 1)
                                                                begin
                                                                        hcnt <= 0;
                                                                        vcnt <= vcnt + 1;
                                                                end
                                                        else
                                                                hcnt <= hcnt + 1;
                                                end
                                end
                end
       
        assign hsync = (hcnt < ha) ? 1'b0 : 1'b1;
        assign vsync = (vcnt < va) ? 1'b0 : 1'b1;
       
        assign hflag = ((hcnt >= hab) && (hcnt < hac)) ? 1'b1 : 1'b0;
        assign vflag = ((vcnt >= vab) && (vcnt < vac)) ? 1'b1 : 1'b0;

        wire [7:0] block;
       
//        assign block = 8'b111_000_00;
        assign block = (vcnt-vab<200) ? 8'b111_000_00 : (vcnt-vab<400) ? 8'b000_111_00 : 8'b000_000_11;
       
        assign rgb8 = (hflag && vflag) ? block : 8'b000_000_00;
       
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-2-14 11:57:39 | 显示全部楼层
开发板运行效果(显示彩条)

重新全编译,并下载程序。
开发板运行效果如下图所示。
经检查,开发板运行效果与设计相符。
屏幕显示彩条(由上至下,红绿蓝三等分彩条)。
功能验证正确。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-2-14 11:57:59 | 显示全部楼层
好了,今天的课程就讲到这里。
通过今天的课程,我们学习了VGA显示图像的基本原理,并对VGA驱动逻辑电路进行了建模和仿真,结合第十四讲的pll一起编写了一个完整的演示逻辑,进行了下板检查。
希望大家掌握VGA显示图像的基本原理,并熟练运用Verilog语言编写相关驱动逻辑。
更复杂的知识和技巧我们将逐步通过后面的课程展现给大家。

课程到此结束,谢谢大家的关注!
小舍YZ 发表于 2017-2-20 15:16:44 | 显示全部楼层
很详细,谢谢分享
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-6 11:02 , Processed in 0.082203 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表