首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog VGA信号实现:“拉伸水平”

Verilog VGA信号实现:“拉伸水平”
EN

Stack Overflow用户
提问于 2016-04-01 14:29:38
回答 2查看 1K关注 0票数 0

我正在用Altera实现XGA (1024x768)视频协议。我有图像显示,具有正确的颜色和清晰的垂直显示(即将每第n个垂直像素设置为黑色,就会产生尖锐的水平线w/o混叠)。然而,水平显示(垂直线)是非常倾斜的,1像素宽的线条在3到4像素宽的范围内被“涂抹”。此外,显示信号的宽度太宽。试图创建一个均匀的高度和宽度网格会导致单元格比其高度更宽。

我已经通过逻辑分析器检查了所有的时间和这些值,它们非常精确,甚至在百分之一的精度范围内。

基于这个问题的描述,对于在哪里查找调试有什么想法吗?考虑到垂直点是点,我认为它与我的水平同步有什么关系?VGA信号生成代码:

代码语言:javascript
复制
module vga_sig_gen
(
    clk,
    reset_n,
    vga_BLANK_N,
    vga_SYNC_N,
    vga_HS,
    vga_VS,
    vga_R,
    vga_G,
    vga_B
);

// XGA signals
input clk;
input reset_n;
output reg vga_BLANK_N;
output reg vga_SYNC_N;
output reg vga_HS;
output reg vga_VS;
output reg [7:0] vga_R;
output reg [7:0] vga_G;
output reg [7:0] vga_B;

// Frame/line position
reg [11:0] hor_pos;
reg [9:0] vert_pos;

always @ (posedge clk) begin
    if(!reset_n) begin
        {vga_R, vga_G, vga_B} <= 24'h000000;
        hor_pos <= 12'd0;
        vert_pos <= 10'd0;
    end
    else begin
        // Update RGB values
        {vga_R, vga_G, vga_B} <= (hor_pos % 48 == 0) || (vert_pos % 48 == 0) ? 24'd0 : 24'hB93E06;

        // Update line/fram position
        hor_pos <= (hor_pos == 12'd1343) ? 12'd0 : hor_pos + 12'd1;
        if(hor_pos == 12'd1343) begin
            if(vert_pos == 10'd805) begin
                vert_pos <= 10'd0;
            end
            else begin
                vert_pos <= vert_pos + 10'd1;
            end
        end
    end

    // Generate VGA signals
    vga_BLANK_N <= ((hor_pos > 12'd319) && (vert_pos > 10'd37)) ? 1'b1 : 1'b0;
    vga_HS <= ((hor_pos > 12'd23) && (hor_pos < 12'd160)) ? 1'b0 : 1'b1;
    vga_VS <= ((vert_pos > 10'd2) && (vert_pos < 10'd9)) ? 1'b0 : 1'b1;
    vga_SYNC_N <= 1'b0;
end

endmodule 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-05 21:30:00

问题是,我的液晶显示器的固有纵横比是造成拉伸的原因。约翰的答案可能是如果内部时钟太慢处理不了它,但在50 MHz与65 MHz锁相环乘法器,这不是一个问题(如示波器所揭示的)。

票数 0
EN

Stack Overflow用户

发布于 2016-04-01 19:16:22

看起来你正试图通过每48个像素发送一个黑色像素来形成一个网格。对吗?

根据您所说的,您可能会在vga_R/G/B寄存器上出现设置时间问题。这可能是因为如果您显式地使用%48,这不是一个简单的操作

一个更简单的解决方案可能是添加另一个计数从0-47,并输出一个黑色像素时,该计数器是等于47。您将需要这个计数器的垂直和水平。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36358944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档