收到莫恩的开发板,继续TFT实验,硬件测试成功,并附测试代码
[复制链接]
之前提到过我的开发板有问题,发现是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 编辑 ]
|