发一个我做的CPLD+SRAM驱动4.3寸TFT控制器
断断续续地学了verilog HDL和FPGA一段时间,一直没有完整的做一个东西,看到论坛上有做TFT控制器的,于是就仿制了一个主要参考“dzng11”做的,链接如下
http://www.amobbs.com/forum.php?mod=viewthread&tid=5255518&highlight=%E8%B5%A4%E8%A3%B8%E8%A3%B8%E7%9A%84%E5%A5%89%E7%8C%AE
verilog程序大部分是自己写的,一些部分如异步写入,HSync,VSync时序产生部分参考了"dzng11"
废话不说了:直接上图上资料
这是个好资料!支持楼主开源!我先顶一个 不错啊! 这个要顶 非常感谢 mark
不错要顶上去 Oh my god,Perfect.
Thank you. 这个好呀,下载来看看,研究一下。 好资料,必须顶!感谢分享 要要要…定 楼主我顶你了,谢谢给大家分享 有没硬件加速画水平竖直以及斜线线,画块功能? 有硬件加速画水平(从左往右),竖直(从上往下),但不支持斜线,
另外 IS61WV25616刚好能放下两幅图像,
因此搞了两个页面,数据写入和显示的页面由reg4和reg6设置,可以写入当前显示的页面,也可以写入另一页面
还有16级背光亮度调节
目前,数据只能往里写,不能读出,
如果要读出,得加一级缓冲,240个LE有点不够用了 请问楼主,这个与用一块芯片来驱动LCD有何区别?
有何优势?
真心不懂,望解答
ghostxdy 发表于 2013-8-30 23:10 static/image/common/back.gif
请问楼主,这个与用一块芯片来驱动LCD有何区别?
有何优势?
真心不懂,望解答
用一块芯片,如RA8875,SSD1963等,只要按照使用手册操作寄存器就可以了
最大优势就是不用去看超长的英文数据手册了{:smile:} {:victory:} 感谢楼主!我有个PSP3的屏最近打算用起来,这回更有信心了。
不过,有两个stm32的文件不能下载,可能这上传没成功。:) 不错,顶楼主 tonyg 发表于 2013-9-1 12:03 static/image/common/back.gif
感谢楼主!我有个PSP3的屏最近打算用起来,这回更有信心了。
不过,有两个stm32的文件不能下载,可能这上 ...
stm32就一个原理图和一个工程的压缩包,刚才试了下,都可以下载啊!
赞一个,一直想玩,楼主有没有空板要转? jianfengxixi 发表于 2013-9-1 12:18 static/image/common/back.gif
stm32就一个原理图和一个工程的压缩包,刚才试了下,都可以下载啊!
还真是,我用IE可以下载,可是chrome却报告页面找不到。:)
再次感谢楼主!
hunningtu 发表于 2013-9-1 12:40 static/image/common/back.gif
赞一个,一直想玩,楼主有没有空板要转?
一共打样了7块,自己焊2块(只买了2套元件),还有5块空板,要的话付个邮费我发给你 jianfengxixi 发表于 2013-9-1 20:06 static/image/common/back.gif
一共打样了7块,自己焊2块(只买了2套元件),还有5块空板,要的话付个邮费我发给你 ...
多谢,需要再联系你。 jianfengxixi 发表于 2013-9-1 20:06 static/image/common/back.gif
一共打样了7块,自己焊2块(只买了2套元件),还有5块空板,要的话付个邮费我发给你 ...
楼主还有pcb没,可否给1片。{:lol:} 好资料,楼主还有空板子吗 b57203493 发表于 2013-9-5 10:02 static/image/common/back.gif
楼主还有pcb没,可否给1片。
已发顺丰到付,请注意查收 不错,帮顶。
可惜CAT4237没有,要然也弄块板玩玩 rifjft 发表于 2013-9-5 16:50 static/image/common/back.gif
不错,帮顶。
可惜CAT4237没有,要然也弄块板玩玩
CAT4237还剩2片{:smile:} 支持顶楼主! jianfengxixi 发表于 2013-9-5 15:54 static/image/common/back.gif
已发顺丰到付,请注意查收
谢谢了。
万分感谢。 首先感谢楼主的无私奉献.
我有个问题:
//External asynchronous data write
always @(posedge ExWr or negedge SysRst) 使用EXWr上升沿,好像cpld有些不稳定,不知楼主遇到了没?
begin
if(!SysRst)
begin
ExWrData <= 16'd0;
ExRegAddr <= 3'b000;
ExWrClk <= 1'b0;
end
else
begin
if(!ExCs)
if(!ExRs)
ExRegAddr <= ExDataBus;
else
begin
ExWrData <= ExDataBus;
ExWrClk <= ~ExWrClk;
end
end 你是用杜邦线连的吗?
如果是的话,多连几根GND线试试 mark{:smile:} jianfengxixi 发表于 2013-9-5 15:54 static/image/common/back.gif
已发顺丰到付,请注意查收
还有空板子吗?可否赠送一块 fy024 发表于 2013-10-10 21:57 static/image/common/back.gif
还有空板子吗?可否赠送一块
还有一块,顺丰到付可否? jianfengxixi 发表于 2013-10-10 23:58 static/image/common/back.gif
还有一块,顺丰到付可否?
可以的,我站内发地址给你
楼主还有空板吗?送我一块!!
不错,顶楼主 mark 必须顶下 LVmcu 发表于 2013-10-11 13:58 static/image/common/back.gif
楼主还有空板吗?送我一块!!
没有了,最后一块发给你楼上了 jianfengxixi 发表于 2013-10-11 16:19 static/image/common/back.gif
没有了,最后一块发给你楼上了
LZ是个好同志!
非常感谢! 这是一个好东西,必须mark 帮lz顶起,正在啃cpld代码中。 “
end
RGB_Q <= (SysCmdValue_Q)?16'd0:RamDataBus;
SramAddr <= YRegValue_Q;
SramAddr <= XRegValue_Q;
RamAddrBus_Q <= XRegValue_Q;
RamAddrBus_Q <= SysCmdValue_Q;
end else begin
if (AskWr) begin
WrEn_Q <= 1'b1;
end
ExBusOut_Q <= RamDataBus;
SramAddr <= HsCount_Q;
SramAddr <= DotCount_Q;
RamAddrBus_Q <= DotCount_Q;
RamAddrBus_Q <= SelDispRam_Q;
end
”
楼主 能讲下这段代码吗?
什么时候写SRAM,什么时候读SRAM。
谢谢啦! 下载了,感谢楼主奉献 sblpp 发表于 2013-10-21 19:43 static/image/common/back.gif
“
end
RGB_Q
我写的在tft43_test.v,tft43.v是网友写的 jianfengxixi 发表于 2013-10-22 11:47 static/image/common/back.gif
我写的在tft43_test.v,tft43.v是网友写的
谢谢楼主分享!
你的代码比较简洁,赞一个先。
不过 是不是没有实现硬件加速啊?
sblpp 发表于 2013-10-22 20:03 static/image/common/back.gif
谢谢楼主分享!
你的代码比较简洁,赞一个先。
不过 是不是没有实现硬件加速啊?
有加速画水平线和竖线 突然想起我还有块版.等下也来弄弄. 太没毅力了.2年前我就做了,遇到点麻烦,就停了. 最近把他弄起来. thzbigone 发表于 2013-10-23 14:34 static/image/common/back.gif
太没毅力了.2年前我就做了,遇到点麻烦,就停了. 最近把他弄起来.
支持LS的朋友搞起!有问题可以一起交流讨论!
-----
另,赞lz的热心!请多多赐教!
顶起! 框架搞好啦,不过有个问题 不知道为什么,每次变换颜色时候会缺2个点。
查的我头都疼了。
以下为verilog 代码:
//
//
//EPM240+61LV25616+TMS320VC5509 驱动TFT夏普LQ057,5.7 320*240
//
//
module Epm240_Sram_CtrTft( Clk , //40MHZ晶振
Dsp_Data, Dsp_Address,Emif_Awe, Emif_Ce2, Emif_Ce3,// 显示数据写入接口
Sram_Data, Sram_Address, Sram_Ce, Sram_Oe, Sram_We,//Sram 接口 UB/LB 已接低
Tft_RGB, Tft_Ck, Tft_Hs, Tft_Vs, Tft_En, TFT_Rl); //LQ057接口 32PIN 只用RGB只用了3*6共18位,HS,VS模式
inputClk, Emif_Ce2, Emif_Ce3, Emif_Awe;
input Dsp_Address; //
output Sram_Ce, Sram_Oe, Sram_We, Tft_Ck, Tft_Vs, Tft_Hs, Tft_En,TFT_Rl;
output Sram_Address, Tft_RGB;
inputDsp_Data;
inout Sram_Data;
//接口
regTft_Ck=0; //Tft 时钟
regTft_En=0; //Tft ENAB模式,本例无效
regTft_Hs=0; //列时序
regTft_Vs=0;
regTFT_Rl=1; //行时序
regTft_RGB;
regSram_Oe;
regSram_We=0;
regSram_Ce=0;
wire Sram_Address;
//标志
regMark_TftReady=0; //TFT 上电完成标志
regDisplay_Valid=0;
//计数器
reg Counter_Delay=0; // 延时计数器
regCounter_FreqDiv=0; //分频计数器
regCounter_TftVs; //TFT行计数器
regCounter_TftHs; //TFT列计数器
//临时寄存器
reg Temp_SramAddrW=0;
reg Temp_SramAddrR=0;
reg Temp_SramData=0;
///////////////////////////////WAIT//FOR//READY/////////////////////////////////
//
assign Sram_Address=Sram_We? Temp_SramAddrR:Temp_SramAddrW;//Temp_SramOe为高写入为写数地址
assign Sram_Data =Sram_Oe? Temp_SramData:18'hzzzzzz; //Temp_SramOe为高为写入状态
//延时10ms等待tft上电完成
always @ (posedge Clk)
begin
if(Mark_TftReady==0)
begin
Counter_Delay<=Counter_Delay+1;
if(Counter_Delay>=400000)
begin
Mark_TftReady<=1;
end
end
end
//////////////////////////////////////////TFT***BEGIN////////////////////////////////
//40Mhz晶振6分频 6.67Mhz 作为TFT时钟
always @ (posedge Clk)
begin
if(Mark_TftReady==1)
begin
if((Counter_FreqDiv==2)||(Counter_FreqDiv==5))
begin
Tft_Ck=~Tft_Ck;
if(Counter_FreqDiv==5)
Counter_FreqDiv<=0;
end
Counter_FreqDiv<=Counter_FreqDiv+1;
end
end
//行有效时钟380个,选取320个送显示点
always @ (posedge Tft_Ck)
begin
if (Counter_TftHs<40)
Tft_Hs=0;
else
Tft_Hs=1;
if (Counter_TftHs>=420)
Counter_TftHs<=0;
else
Counter_TftHs<=Counter_TftHs+1;
end
//列有效时钟276个,选取中间的240个送显示
always@(negedge Tft_Hs)
begin
if(Counter_TftVs<7)
Tft_Vs=0;
else
Tft_Vs=1;
if(Counter_TftVs>=283)
Counter_TftVs<=0;
else
Counter_TftVs=Counter_TftVs+1;
end
//////////////////////////////////////////TFT***END////////////////////////////////
////////////////////////////////////SRAM***BEGIN////////////////////////////////////
//Counter_FreqDiv
//Tft_Ck为0~3时钟周期 写入SRAM
always @ (posedge Clk)
begin
if(Mark_TftReady==1)
begin
case(Counter_FreqDiv)
3'b000:
begin
Sram_Oe=1;
Sram_We=0;
if((Counter_TftHs==85)&&(Counter_TftVs==18)) //模拟DSP写入显示数据到SRAM 中。
Temp_SramAddrW=0; //显示数据存于SRMA地址 0~320*240
Temp_SramAddrW=Temp_SramAddrW+1;
end
3'b001:
begin
if(Temp_SramAddrW<76800)
begin
if(Temp_SramAddrW<642)
Temp_SramData=9'b000000111; //red
else
if(Temp_SramAddrW<1282)
Temp_SramData=9'b111000000; //blue
else
if(Temp_SramAddrW<51202)
Temp_SramData=9'b000111000;//green
else
if(Temp_SramAddrW<76800) //320*240=76800
Temp_SramData=9'b111000000;
else
Temp_SramData=9'b000000000;
end
end
3'b010:
begin
Sram_Oe=1;
Sram_We=0;
end
3'b011:
begin
end
3'b100:
begin
Sram_Oe=0;
Sram_We=1;
if((Counter_TftHs==85)&&(Counter_TftVs==19)) //读SRAM
begin
Temp_SramAddrR<=0;
Display_Valid<=1; //由于显示行列有效数据间有空周期 设定了显示有效位。
end
if(((Counter_TftHs>85)&&(Counter_TftHs<=405))&&((Counter_TftVs>=19)&&(Counter_TftVs<259)))
begin
Temp_SramAddrR<=Temp_SramAddrR+1;
Display_Valid<=1;
end
else
Display_Valid<=0;
end
3'b101:
begin
if(Display_Valid)
begin
Tft_RGB=3'b000; //512色即可
Tft_RGB=Sram_Data;
Tft_RGB=3'b000;
Tft_RGB=Sram_Data;
Tft_RGB=3'b000;
Tft_RGB=Sram_Data;
end
else
Tft_RGB<=18'bzzzzzzzzzzzzzzzzzzz;
end
default
Tft_RGB<=18'bzzzzzzzzzzzzzzzzzzz;
endcase
end
end
////////////////////////////////////SRAM***END//////////////////////////////////////
/////////////////////////////////DSPDATA***BEGIN////////////////////////////////////
//依据Dsp_Address数据判别送来数据类型
//0 列地址2行地址4前景色 5背景色 6写显示数据寄存器 7状态控制寄存器
//Sram_Address 【17:8】行地址【7:0】列地址
always @ (negedge Emif_Awe )
begin
if( Emif_Ce2==0)
case (Dsp_Address)
4'b0000:
begin
//Temp_SramAddrW=Dsp_Data;
end
4'b0001:
begin
end
4'b0010:
begin
//Temp_SramAddrW=Dsp_Data*320+Temp_SramAddrW;
end
4'b0011:
begin
//Temp_SramData=Dsp_Data;
end
4'b0100:
begin
end
4'b0101:
begin
end
4'b0110:
begin
end
4'b0111:
begin
end
4'b1000:
begin
end
endcase
end
/////////////////////////////////DSPDATA***END//////////////////////////////////////
endmodule
过几天再继续完善。 本帖最后由 thzbigone 于 2013-11-7 16:27 编辑
上面程序里我写入SRAM的时候地址加了2的偏移,不然就会像上面图上缺两点。
由于XDS510挂了,暂时没能外部写数据来。
权限太低不能飞语,飞我的兄弟,不好意思没发飞回来。
板子是以前调废了的板,屏也是客户弄进油了我自己修的旧屏。
懂的兄弟们多指教啊,我搞这个不在行。弄的东西太多,什么都会以点,什么都不精。 LVmcu 发表于 2013-10-11 13:58 static/image/common/back.gif
楼主还有空板吗?送我一块!!
我手上多一片,当时楼主送了我两片,上面焊了个CPLD sblpp 发表于 2013-10-22 20:03 static/image/common/back.gif
谢谢楼主分享!
你的代码比较简洁,赞一个先。
不过 是不是没有实现硬件加速啊?
我已经调好了,有硬件水平和垂直加速,刷屏速度挺快的 楼上的不用送给我吧,我也想玩一下,成本和运费我出(方便的话屏也一起) 好贴!!果断收藏。。 hyghyg1234 发表于 2013-11-7 17:47 static/image/common/back.gif
我手上多一片,当时楼主送了我两片,上面焊了个CPLD
谢谢你,最近公司有人开始做FPGA了,我到时就拿块板子玩玩就 可以了! gginhouse 发表于 2013-11-7 19:37 static/image/common/back.gif
楼上的不用送给我吧,我也想玩一下,成本和运费我出(方便的话屏也一起) ...
屏我手上没有,就板子上面焊接了CPLD
屏幕是:http://item.taobao.com/item.htm?spm=a1z09.5.0.0.eHLfsk&id=3871984886这家的 强烈支持楼主!!! 强烈支持楼主!!! 我用的是Quartus II 7.2软件,怎么打不开工程文件呢?是不是版本问题? hyghyg1234 发表于 2013-11-7 17:51 static/image/common/back.gif
我已经调好了,有硬件水平和垂直加速,刷屏速度挺快的
直接使用这个源码还是修改了啊?
能分享下你的源码吗?
谢谢! sblpp 发表于 2013-11-8 12:43 static/image/common/back.gif
直接使用这个源码还是修改了啊?
能分享下你的源码吗?
谢谢!
不用修改的,我找下我跑ucgui的程序 sblpp 发表于 2013-11-8 12:43 static/image/common/back.gif
直接使用这个源码还是修改了啊?
能分享下你的源码吗?
谢谢!
http://pan.baidu.com/share/link?shareid=482209303&uk=520913075你试试看
mark cpld+sram lcd驱动 请问楼主,我看一个是arm, 一个是cpld,
请问实现这个功能是否还需要那个arm呢,
还是给出的arm仅是一个参考,只用cpld就能实现?
谢谢啊! 另外,请问楼主 stm32的开发板用的是哪一个商家的呢,最近也想了解下,
能否给个介绍,谢谢 mark 支持一个 河Elvis 发表于 2013-11-8 12:03 static/image/common/back.gif
我用的是Quartus II 7.2软件,怎么打不开工程文件呢?是不是版本问题?
我用的quartusii 13.0
代码:tft43_test.v
管脚定义:tft43.tcl yinian 发表于 2013-11-8 14:28 static/image/common/back.gif
另外,请问楼主 stm32的开发板用的是哪一个商家的呢,最近也想了解下,
能否给个介绍,谢谢 ...
别的单片机也可以
stm32开发板是HY-STM32 攒楼主,做得不错.
不过做产品的话不如找我买一个,也就几十块钱的事,全部做好了的 不加屏和PCB,成本多少? 没来想用fpga读SDHC开,然后再在液晶上显示,查了下资料原来读SDHC就是一个技术难点,无奈新手,不知如何下手
请问谁有fpga读SDHC的例程呢,谢谢 Oliver 发表于 2013-11-29 20:03
攒楼主,做得不错.
不过做产品的话不如找我买一个,也就几十块钱的事,全部做好了的 ...
这个只是自己玩玩{:smile:} marshallemon 发表于 2013-11-29 20:25
不加屏和PCB,成本多少?
所有元件加起来30块左右 yinian 发表于 2013-11-29 20:32
没来想用fpga读SDHC开,然后再在液晶上显示,查了下资料原来读SDHC就是一个技术难点,无奈新手,不知如何下 ...
FPGA读写SDHC卡我也没弄过
DE2-115的资料中好像有个SD CARD的demo,可以参考一下
另外网上的例程还是比较多的,可以搜索一下
推荐一位大婶的博客:http://www.cnblogs.com/oomusou/category/110932.html jianfengxixi 发表于 2013-11-29 21:43
FPGA读写SDHC卡我也没弄过
DE2-115的资料中好像有个SD CARD的demo,可以参考一下
另外网上的例程还是比较 ...
这个比较麻烦,因为读了SDHC是不是也要FAT了呢,对MCU简单,要么NIOS吧 Oliver 发表于 2013-11-29 21:55
这个比较麻烦,因为读了SDHC是不是也要FAT了呢,对MCU简单,要么NIOS吧
是的,涉及到 fat32 格式 Oliver 发表于 2013-11-29 21:55
这个比较麻烦,因为读了SDHC是不是也要FAT了呢,对MCU简单,要么NIOS吧
自己写个ip挂到avalon总线上,熟悉SD协议的话应该不难
数据缓冲加个FIFO
然后在NIOSII中就像在单片机上一样了,写好底层驱动接口,移植个fatfs就OK了 嗯,是个思路,明天查下资料,谢谢 jianfengxixi 发表于 2013-11-29 21:35
所有元件加起来30块左右
问一个小白的问题,使用这种MCU+CPLD+SRAM和直接使用MCU驱动的优势在哪里?是屏的刷新速度吗?能有多大的提升? marshallemon 发表于 2013-11-30 09:06
问一个小白的问题,使用这种MCU+CPLD+SRAM和直接使用MCU驱动的优势在哪里?是屏的刷新速度吗?能有多大的 ...
MCU一般不带RGB接口的{:smile:} jianfengxixi 发表于 2013-11-30 09:10
MCU一般不带RGB接口的
哦,看来我没搞清这LCD的种类,你的意思是使用这种方法的优势就是完成LCD的控制器?我还以为使用这种架构会比直接使用MCU刷速度快 果断MARK下 marshallemon 发表于 2013-11-30 09:16
哦,看来我没搞清这LCD的种类,你的意思是使用这种方法的优势就是完成LCD的控制器?我还以为使用这种架构 ...
速度差不多,但如果CPU带LCD驱动那会比外部总线快.
用FPGA主要是稳定性更好,1963,8875总是有这里那里的不如意.
单纯从从经济角度看FPGA方案已经无优势了 赞赞赞 楼主威武 你这两个stm32和cpld的通信用的是? ExAddrBus <= {WritePage ,({RegY,8'd0} +
{1'd0,RegY,7'd0} +
{2'd0,RegY,6'd0} +
{3'd0,RegY,5'd0} +
{8'd0,RegX})};
咨询一下楼主,这一段SRAM地址拼接代码,我需要如何理解?多谢! pygh 发表于 2013-12-16 08:53
ExAddrBus
ExAddrBus = WritePage * 2^17 + RegY*480 + RegX 不错,顶一个,支持楼主{:biggrin:} 顶一个。 相当不错。
好东西,长见识了! mark,需要的时候来获取。thank you! MARK一下啊,我正在要做这个东东,但是,现在只是直接采用的RGB接口转CPU接口的芯片采用STM32驱动的,要学习一下你的FPGA~谢谢 太给力了 不错的资料 mark.......
页:
[1]
2