收到莫恩的开发板,继续TFT实验,硬件测试成功,并附测试代码

lrz123   2010-11-25 11:41 楼主
之前提到过我的开发板有问题,发现是2.5V电源与1.2V核电压串在一起了,莫恩将他的那一块寄给了我。
    这次先检查开发板,下载了了控制面板的程序,并打开上位机程序测试了一遍,都正常,不过把FLASH擦除了,不该!
    后来再试着下载配置文件到FLASH(这块开发板用并行FLASH配置),根据教程作了一遍,提示FPGA中没有找到FLASH LOAD IP,无法配置FLASH,把里面那个标准nios工程下的SOF文件加入FPGA(本以为这个里面会有这个FLASH LOAD IP),结果报告同样的错误,看来板子带的工程里面都没有这个东西,需要自己加入吧,不管了,下面开始测试,重启电脑,进入ubuntu系统(我的QII里是装在ubuntu9.04下的10.0SP1版本)
我进行了一个简单的测试,就是让全屏显示几种渐变的颜色,下面是这个过程的简单描述:
1、写好代码,进行编译,发现使用0个逻辑单元。很久没有发现这样的现象了,居然又遇上?
             根据经验,如果没有输入端口和输出端口之间没有间接的连通关系会出现这种现象,意思是如果只使用了输入端口,不管做了多么复杂的逻辑而没有将结果送出去的话肯定是这种现象,还有就是很简单的输入端口和输出端口直线连接,很长时间没用FPGA了,查了好一阵子,发现是我在分频的时候:
      本来是时钟边沿下clk<=not clk,我把这个not 掉了,相当于直接连接,所以是0个逻辑单元。
2、由于很简单,没有经过仿真这一步了,直接分配引脚编译并下载(注意将不用引脚设置成输入三态),发现液晶白光,没点反应,郁闷,检查线路和引脚分配没问题,后来内嵌逻辑分析仪分析波形,结果正确,因为手头没有仪器(我是秘密进行的,没有拿到实验室去,因为实验室有N多事),后来偶然发现HSMC转接板上的四个接头有两种不同的封装(这个问题如果FLT9006事先告知一声就不会这样了),而我用的那一个正好反的,再查了一遍电路,发现液晶的DE没有接到FPGA来,于是飞了一根线,重新分配引脚,下载,OK。(没有相机,上不了图),还有就是跑程序的时候芯片也比较烫
下面是代码,并附上一张内嵌逻辑分析仪抓到的波形图:

--tft test   -------------------------
--writen by lrz123
--zhouyuannian#126.com (# replace by @)

LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use work.all;

entity tft_test is
   port(
    inclk:in std_logic;   --50M input clock
    reset_n:in std_logic;  --reset signal
    rst_tft:out std_logic;  --tft reset
    spena:out std_logic;    --spi enable
    spclk:out std_logic;    --spi clock
    spdat:out std_logic;    --spi data
    blue:out std_logic_vector(7 downto 0); --blue data bus
    green:out std_logic_vector(7 downto 0); --green data bus
    red:out std_logic_vector(7 downto 0);   --red data bus
    hsync:out std_logic;    --horizontal sync
    vsync:out std_logic;    --vertical sync
    dclk:out std_logic;     --dot clock
   cif:out std_logic_vector(2 downto 0);   --control the input data format
    de:out std_logic;      --data enable
   
    clkout100:out std_logic;
    locked:out std_logic
    );
end entity;

architecture behave of tft_test is
    signal dot_counter:std_logic_vector(8 downto 0); --408 tosc (320 dot)
     signal h_counter:std_logic_vector(8 downto 0);   --262 th  (240 h)
     signal clkout13M:std_logic;
     signal clkout65:std_logic:='0';
     signal hsync_temp:std_logic;
     signal aset:std_logic:='0';
     signal color:std_logic_vector(5 downto 0);
begin
spena<='1';
spclk<='1';
spdat<='1';
cif<="000";--use the parallel format

--blue<=(others=>'0');
--green<=(others=>'1');
--red<=(others=>'1');
blue(7)<=color(3);blue(6)<=color(0);
green(7)<=color(5);green(6)<=color(2);
red(7)<=color(4);red(6)<=color(1);



dclk<=clkout65;
rst_tft<=reset_n;

aset<='0';
process(clkout13M) --clkout13/2
begin
   if(clkout13M 'event and clkout13M='1')then
         clkout65<=not clkout65;
    end if;
end process;

process(clkout65,reset_n) --dot count
begin
  if(reset_n='0')then
     dot_counter<=(others=>'0');
      de<='0';
      hsync_temp<='1';
  elsif(clkout65 'event and clkout65='1')then
     dot_counter<=dot_counter+"000000001";
      if(dot_counter<30)then    --THS
          hsync_temp<='0';
            de<='0';
     elsif(dot_counter<68)then  --THS+THB
           hsync_temp<='1';
            de<='0';
     elsif(dot_counter<388)then  --THS+THB+TEP
           hsync_temp<='1';
            de<='1';
     elsif(dot_counter<408)then  --TH
          hsync_temp<='1';
            de<='0';
     else
          hsync_temp<='1';
            de<='0';
          dot_counter<=(others=>'0');
    end if;           
  end if;
end process;
hsync<=hsync_temp;

process(hsync_temp,reset_n) --h count
begin
  if(reset_n='0')then
      h_counter<=(others=>'0');
      vsync<='1';
  elsif(hsync_temp 'event and hsync_temp='0')then
     h_counter<=h_counter+"000000001";
      if(h_counter<3)then    --TVS
          vsync<='0';
      elsif(h_counter<18)then    --TVS+TVB
          vsync<='1';
      elsif(h_counter<258)then    --TVS+TVB+TVD
          vsync<='1';
      elsif(h_counter<262)then    --TVS+TVB+TVD+TVF
          vsync<='1';
      else
          vsync<='1';
            h_counter<=(others=>'0');
    end if;           
  end if;
end process;

process(h_counter,hsync_temp)
begin
   if(h_counter=0)then
        color<=(others=>'0');
   elsif(hsync_temp 'event and hsync_temp='1')then
        color<=color+"000001";
    end if;
end process;

u1:lcd_dclk_gen PORT map
    (
        areset=>aset,--        : IN STD_LOGIC  := '0';
        inclk0=>inclk,--        : IN STD_LOGIC  := '0';
        c0=>clkout100,--        : OUT STD_LOGIC ;       --100MHz
        c1=>clkout13M,--        : OUT STD_LOGIC ;       --13MHz
        locked=>locked--        : OUT STD_LOGIC
    );


end architecture;
[ 本帖最后由 lrz123 于 2010-11-25 11:43 编辑 ]
  • 无标题1.gif
zhouyuannian#126.com(#换成@)有问题交流

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复