在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3753|回复: 9

[原创] VGA(DVI interface) Controller的高层次综合

[复制链接]
发表于 2010-1-25 13:33:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
// Genarate synch signal to drive DVI output, here 720P is as default
void vga_ctrl(volatile int24 *velXY, volatile uint8 *frameY, struct dvi_video *dvi_o, volatile uint1 *sync_enable)
{
    uint12 hcount = 0;
    uint11 vcount = 0;
    uint1 vga_data_rdenab = 0;
    uint1 sync_en = 0;
    uint1 video_active;
    struct dvi_video tmp_dvi_o;

    sync_en = *sync_enable;

  loop_while: while(sync_en)
    {
        if (vcount < FRAME_HEIGHT)
            video_active = 1;
        else
            video_active = 0;

        if (video_active && (hcount >= (HSYNC_WIDTH + H_BACK_PORCH)) &&
            (hcount < (HSYNC_WIDTH + H_BACK_PORCH + LINE_WIDTH)))
            vga_data_rdenab = 1;
        else
            vga_data_rdenab = 0;

        if (vga_data_rdenab)
        {
            int24 tmp_velXY = *velXY;
            uint8 Yij = *frameY;
            int12 tmpX,tmpY;
            tmpX = (int12)(tmp_velXY>>12);
            tmpY = (int12)tmp_velXY;

            tmp_dvi_o.de = 1;
            tmp_dvi_o.vsync = SYNC_POLARITY_N;
            tmp_dvi_o.hsync = SYNC_POLARITY_N;

            int32 c = (Yij - 16) * 298;
            tmp_dvi_o.red   = (uint8)clip(((c + (tmpY>>1)*409 + 128) >> 8),0,255);
            tmp_dvi_o.green = (uint8)clip(((c - (tmpX*50) - (tmpY*104) + 128) >> 8),0,255);
            tmp_dvi_o.blue  = (uint8)clip(((c + (tmpX*258) + 128) >> 8),0,255);
        }
        else
        {
            tmp_dvi_o.de = 0;
            tmp_dvi_o.red = 0;
            tmp_dvi_o.green = 0;
            tmp_dvi_o.blue = 0;
            tmp_dvi_o.hsync = (hcount < HSYNC_WIDTH) ? SYNC_POLARITY : SYNC_POLARITY_N;
            if(vcount >= V_FRONT_PORCH + FRAME_HEIGHT && vcount < V_FRONT_PORCH + VSYNC_WIDTH + FRAME_HEIGHT)
                tmp_dvi_o.vsync = SYNC_POLARITY;
            else
                tmp_dvi_o.vsync = SYNC_POLARITY_N;
        }

        *dvi_o = tmp_dvi_o;

        if (hcount == (H_FRONT_PORCH + HSYNC_WIDTH + H_BACK_PORCH + LINE_WIDTH - 1))
        {
            hcount = 0;
            if (vcount == (V_FRONT_PORCH + VSYNC_WIDTH + V_BACK_PORCH + FRAME_HEIGHT - 1))
                vcount = 0;
            else
                vcount = vcount + 1;
        }
        else
            hcount = hcount + 1;
    }
}

这是一个用C实现的VGA控制器的接口模块,其中头文件和上下文没有在这里提供(velXY),是一个视频处理design的一部分,在Xilinx VSK FPGA (spartan3adsp)上进行过原型验证。

高层次综合的约束是对while循环进行pipeline。
一般来说,高层次综合的特长是对数据处理为主的模块进行综合,但是随着工具越来越成熟,这些工具对控制为主的模块进行综合也没有任何问题了。

本文采用的工具:AutoESL公司的AutoPilot
发表于 2010-1-25 13:35:46 | 显示全部楼层
learning by learning
发表于 2010-7-27 06:38:06 | 显示全部楼层
sooooooo ! bom demais
发表于 2010-7-27 06:43:35 | 显示全部楼层
soooooooooo
发表于 2010-7-27 18:22:14 | 显示全部楼层
ESL的GateCount目前都還是太大
发表于 2010-8-6 13:27:35 | 显示全部楼层
good !!!!!!!!!!!!!!!!11
发表于 2010-10-28 18:55:47 | 显示全部楼层
谢谢...
发表于 2010-12-6 09:29:22 | 显示全部楼层
very good!
发表于 2010-12-10 01:00:33 | 显示全部楼层
nnnnnnnnnnnnnnnnnnnnnnnnnn
发表于 2010-12-14 10:08:36 | 显示全部楼层
这个要研究一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 14:54 , Processed in 0.025258 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表