3863|6

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于VGA显示扫描模块 [复制链接]

用vga640480这程序  实现一个HS里包含800个CLK  1个VS里包含525个HS
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity vga640480 is
  port (clk :in std_logic;
       hs,vs,r,g,b :out std_logic;
       rgbin :in std_logic_vector(2 downto 0);
       hcntout,vcntout :out std_logic_vector(9 downto 0));
end vga640480;
architecture one of vga640480 is
signal hcnt,vcnt :std_logic_vector(9 downto 0);
begin
hcntout <= hcnt; vcntout<=vcnt;
process(clk) begin
if (rising_edge(clk))then
  if(hcnt<800)then hcnt<=hcnt+1;
else hcnt<=(others=> '0' );end if;
end if;
end process;
process(clk) begin
if(rising_edge(clk))then
  if(hcnt=640+8)then
if(vcnt<800*525)then vcnt<=vcnt+1;
else vcnt<=(others=>'0');end if;
end if;
end if;
end process;
process(clk) begin
if(rising_edge(clk))then
if((hcnt=640+8+8)and(hcnt<640+8+96))then hs<='0';
else hs<='1';end if;
end if;
end process;
process(vcnt) begin
if(hcnt>=(480+8+2)*800)and(hcnt<(480+8+2+2)*800)then vs<='0';
else vs<='1';end if;
end process;
process(clk) begin
if(rising_edge(clk))then
if(hcnt<640 and vcnt<480) then
r<=rgbin(2);g<=rgbin(1);b<=rgbin(0);
else r<='0';g<='0';b<='0';end if;
end if;
end process;
end one;           谁能帮下怎么改程序才能得出正确的波形,这个是我改了次的,波形还是不对
此帖出自FPGA/CPLD论坛

最新回复

楼主做出来了不?若做出来了能否把你定制ROM的那一块发来看看,主要是.MIF或者.HEX文件那一部分,谢谢!  详情 回复 发表于 2010-5-30 17:06
点赞 关注
 

回复
举报

3138

帖子

0

TA的资源

裸片初长成(初级)

沙发
 

几个if语句里的计数器比较值有问题

1、“if (vcnt < 800*525) then”
  vcnt只有10位,哪来这么大的值?

2、“if (hcnt >= (480+8+2)*800) and (hcnt < (480+8+2+2)*800) then”
  hcnt也只有10位,同上问题。
此帖出自FPGA/CPLD论坛
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

板凳
 

建议用严谨的书写格式,增强程序的可读性。

下面的代码没改正错误,仅调整了书写格式:
----------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity vga640480 is
  port (clk :in std_logic;
       hs,vs,r,g,b :out std_logic;
       rgbin :in std_logic_vector(2 downto 0);
       hcntout,vcntout :out std_logic_vector(9 downto 0));
end vga640480;

architecture one of vga640480 is

  signal hcnt,vcnt :std_logic_vector(9 downto 0);

  begin

  hcntout <= hcnt;
  vcntout <= vcnt;

  process(clk)
  begin
    if (rising_edge(clk)) then
      if (hcnt < 800) then
        hcnt <= hcnt + 1;
      else
        hcnt <= (others=> '0' );
      end if;
    end if;
  end process;

  process(clk)
  begin
    if (rising_edge(clk)) then
      if (hcnt = 640+8) then
        if (vcnt < 800*525) then
          vcnt <= vcnt + 1;
        else
          vcnt <= (others => '0');
        end if;
      end if;
    end if;
  end process;

  process(clk)
  begin
    if (rising_edge(clk)) then
      if ((hcnt = 640+8+8) and (hcnt < 640+8+96)) then
        hs <= '0';
      else
        hs <= '1';
      end if;
    end if;
  end process;

  process(vcnt)
  begin
    if (hcnt >= (480+8+2)*800) and (hcnt < (480+8+2+2)*800) then
      vs <= '0';
    else
      vs <= '1';
    end if;
  end process;

  process(clk)
  begin
    if (rising_edge(clk)) then
      if ((hcnt < 640) and (vcnt < 480)) then
        r <= rgbin(2);
        g <= rgbin(1);
        b <= rgbin(0);
      else
        r <= '0';
        g <= '0';
        b <= '0';
      end if;
    end if;
  end process;

end one;
此帖出自FPGA/CPLD论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 

没改前的程序

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity vga640480 is
  port (clk :in std_logic;
       hs,vs,r,g,b :out std_logic;
       rgbin :in std_logic_vector(2 downto 0);
       hcntout,vcntout :out std_logic_vector(9 downto 0));
end vga640480;
architecture one of vga640480 is
signal hcnt,vcnt :std_logic_vector(9 downto 0);
begin
hcntout <= hcnt; vcntout<=vcnt;
process(clk) begin
if (rising_edge(clk))then
if(hcnt<800)then hcnt<=hcnt+1;
else hcnt<=(others=> '0' );end if;
end if;
end process;
process(clk) begin
if(rising_edge(clk))then
  if(hcnt=640+8)then
if(vcnt<525)then vcnt<=vcnt+1;
else vcnt<=(others=>'0');end if;
end if;
end if;
end process;
process(clk) begin
if(rising_edge(clk))then
if((hcnt=640+8+8)and(hcnt<640+8+96))then hs<='0';
else hs<='1';end if;
end if;
end process;
process(vcnt) begin
if((hcnt>=480+8+2)and(hcnt<480+8+2+2))then vs<='0';
else vs<='1';end if;
end process;
process(clk) begin
if(rising_edge(clk))then
if(hcnt<640 and vcnt<480) then
r<=rgbin(2);g<=rgbin(1);b<=rgbin(0);
else r<='0';g<='0';b<='0';end if;
end if;
end process;
end one;    这个是我没改前的程序
此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

5
 
错误:“if ((hcnt = 640+8+8) and (hcnt < 640+8+96)) then”

显然是 (hcnt = 640+8+8) 漏掉一个 > 号,使得水平同步脉宽只有一个时钟,太窄了。
此帖出自FPGA/CPLD论坛

赞赏

1

查看全部赞赏

 
 
 

回复

221

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复 楼主 litei0000 的帖子

这个有用,自己看看哦···
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity vga640480 is
port(clk:in std_logic;
     hs,vs,r,g,b:out std_logic;
     rgbin:in std_logic_vector(2 downto 0);
     hcntout,vcntout:out std_logic_vector(9 downto 0));
end vga640480;
architecture one of vga640480 is
signal hcnt,vcnt:std_logic_vector(9 downto 0);
begin
hcntout<=hcnt;
vcntout<=vcnt;
process(clk) begin
if(rising_edge(clk))then
   if(hcnt<800) then hcnt<=hcnt+1;
   else hcnt<=(others=>'0');
   end if;
end if;
end process;
process(clk)begin
if(rising_edge(clk))then
   if(hcnt=640+8) then
    if(vcnt<525) then vcnt<=vcnt+1;
     else vcnt<=(others=>'0');
    end if;
   end if;
end if;
end process;
process(clk)begin
  if(rising_edge(clk)) then
    if(hcnt>=640+8+8)and(hcnt<640+8+8+96)then
    hs<='0';
    else hs<='1';
    end if;
  end if;
end process;
process(clk)begin
if(rising_edge(clk))then
  if(hcnt<640 and vcnt<480) then
    r<=rgbin(2);
    g<=rgbin(1);
    b<=rgbin(0);
  else r<='0';
       g<='0';
       b<='0';
  end if;
end if;
end process;
end one;
此帖出自FPGA/CPLD论坛
个人签名学习
 
 
 

回复

221

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼主做出来了不?若做出来了能否把你定制ROM的那一块发来看看,主要是.MIF或者.HEX文件那一部分,谢谢!
此帖出自FPGA/CPLD论坛
个人签名学习
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表