搜索
bottom↓
回复: 32

打了一份CPLD驱动LCD的板,明天正式开始学习CPLD

[复制链接]

出0入0汤圆

发表于 2012-3-10 22:40:16 | 显示全部楼层 |阅读模式
刚刚焊接好一份,希望明天能点亮这个LCD.

(原文件名:_MG_0192.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-3-10 22:42:07 | 显示全部楼层
这板子真不错! 还有么 ?

出0入0汤圆

发表于 2012-3-11 00:09:54 | 显示全部楼层
回复【1楼】Mentor 飞
这板子真不错! 还有么 ?
-----------------------------------------------------------------------

同问,关注。

出0入4汤圆

发表于 2012-3-11 00:20:58 | 显示全部楼层
关注

出0入127汤圆

发表于 2012-3-11 14:57:51 | 显示全部楼层
回复【2楼】dosomething
-----------------------------------------------------------------------

同问,有板子出没?

出0入0汤圆

发表于 2012-3-11 16:44:34 | 显示全部楼层
楼主的板子上的引脚表格是怎么画的,看着很整齐!

出0入0汤圆

发表于 2012-3-24 00:53:10 | 显示全部楼层
还有多余的板子吗

出0入0汤圆

 楼主| 发表于 2012-3-24 09:11:51 | 显示全部楼层
板子还有3块

出0入0汤圆

 楼主| 发表于 2012-3-24 09:40:13 | 显示全部楼层
本帖最后由 huatong 于 2012-3-24 09:48 编辑

还做了第2块板,stm32+cy7c4255+ad9283+ep1c3t100,可惜的是由于第一次使用FPGA做板,所以ep1c3t100只做了jtag口,没有做as口,但是做错了,没有看手册,以为与ep2c8的差不多,所以msel0+msel1接了地,做成昨天死活都连不上ep1c3t100,最后上官网看了手册才知道msel1要接vcc才可以,所以这块板就要飞线了,还有,一时大意,只做了一个时钟输入到pin66,但ep1c3t100只有一个pll,还是要从pin10引脚输入时钟,这个就没有办法了.最后还有一个是前后两块板的定位孔居然对不上,真是最大的败笔啊:(

编辑新加 : 不要说可以用ep1c3t做fifo可以省了cy7c4255,我只是一个新手啊,我的本意只是用ep1c3的pll输出采样时钟到ad,还做一些简单的控制而已.而且还当是一块fpga的学习板.但现在只能找200M的有源晶体了.

出0入0汤圆

 楼主| 发表于 2012-3-24 09:42:22 | 显示全部楼层




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-3-24 10:08:20 | 显示全部楼层
这是飞线
attach://155.JPG

可以通过改变6个阻容元件,可以支持stm32f1 或者 stm32f2
attach://156.JPG

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-3-24 16:00:55 | 显示全部楼层
看起来都很美

出0入0汤圆

发表于 2012-3-24 16:27:53 | 显示全部楼层
强中自有强中手,对LZ很是佩服啊!

出0入0汤圆

发表于 2012-3-24 17:48:27 | 显示全部楼层
LZ LCD点亮了吗?

出0入0汤圆

发表于 2012-3-24 17:51:32 | 显示全部楼层
楼主的头像是那个明星

出0入0汤圆

发表于 2012-3-27 09:01:12 | 显示全部楼层
lz的lcd点亮了么 ?

出0入0汤圆

发表于 2012-3-27 09:53:04 | 显示全部楼层
点亮了可以出个套件,正好想学习下这块。

出0入0汤圆

发表于 2012-3-27 13:08:45 | 显示全部楼层
嗯,不错,可以出个套件

出0入0汤圆

发表于 2012-3-27 13:23:09 | 显示全部楼层
其实~AS口的作用不是很大~
如果跑NIOS,直接用FlashProgrammer就可以烧进去
如果没上NIOS,可以转成jjc格式通过JTAG烧

出0入0汤圆

发表于 2012-3-27 17:05:30 | 显示全部楼层
如果出套件, 订一套

出0入0汤圆

 楼主| 发表于 2012-3-29 09:44:41 | 显示全部楼层
终于在昨天搞掂了显示板,并且写了一段代码测试了一下,暂时没有发现问题.

  1. module lcd(        clk,rst_in,
  2.                         mcu_cs,mcu_ale,mcu_we,mcu_re,mcu_ad,mcu_addr,mcu_req_we,
  3.                         sram_cs,sram_we,sram_re,sram_ub,sram_lb,sram_data,sram_addr,
  4.                         rgb_clk,rgb_disp,rgb_den,rgb_light,rgb_hsync,rgb_vsync,rgb_r,rgb_g,rgb_b,
  5.                         tp);
  6.                        
  7. input clk,rst_in;

  8. //mcu interface (25 pins)
  9. input mcu_cs,mcu_ale,mcu_we,mcu_re;
  10. input [15:0] mcu_ad;
  11. input [19:16] mcu_addr;
  12. output reg mcu_req_we;

  13. reg [19:0] mcu_reg_addr;
  14. reg [15:0] mcu_reg_data;
  15. wire mcu_wereq;

  16. //sram interface (40 pins)
  17. output reg sram_cs;
  18. output sram_ub,sram_lb;
  19. output reg sram_we,sram_re;
  20. inout  reg [15:0] sram_data;
  21. output reg [18:0] sram_addr;

  22. reg mcu_req_complete,rgb_req_complete;

  23. assign sram_ub=1'b0;
  24. assign sram_lb=1'b0;

  25. //rgb interface (30 pins)
  26. output reg rgb_clk,rgb_hsync,rgb_vsync;
  27. output rgb_disp,rgb_den;
  28. output reg rgb_light;
  29. output reg [7:0] rgb_r,rgb_g,rgb_b;

  30. reg [15:0] rgb_data;
  31. reg rgb_req_re;
  32. reg [17:0] rgb_addr;

  33. reg [3:0] clkcnt;
  34. reg [13:0] hcnt;
  35. reg [21:0] vcnt;

  36. assign rgb_den=1'b0;
  37. //assign rgb_light=rst;
  38. assign rgb_disp=rst;

  39. //test point interface
  40. output reg [3:0] tp;

  41. /********************************************************************
  42.                                                 POWER ON RESET
  43. ********************************************************************/
  44. wire rst;
  45. reg por;
  46. reg [24:0] porcnt;

  47. initial begin
  48.         por<=1'b0;
  49.         porcnt<=25'h0;
  50. end

  51. always@(posedge clk or negedge rst_in) begin
  52.         if(!rst_in) begin
  53.                 por<=1'b0;
  54.                 rgb_light<=1'b0;
  55.                 porcnt<=25'h0;
  56.         end else begin
  57.                 porcnt<=porcnt+1;
  58.                 if(porcnt==25'd13300000)
  59.                         por<=1'b1;
  60.                 if(porcnt==25'd33250000)
  61.                         rgb_light<=1'b1;
  62.         end
  63. end

  64. assign rst=rst_in & por;


  65. /********************************************************************
  66.                                                 MCU INTERFACE
  67. ********************************************************************/
  68. initial begin
  69.         mcu_req_we<=1'b0;
  70.         mcu_reg_addr<=20'h0;
  71. end

  72. assign mcu_wereq=mcu_req_we ^ mcu_req_complete;

  73. //always@(posedge mcu_ale or negedge rst) begin
  74. //        if(!rst)
  75. //                mcu_reg_addr<=20'hz;
  76. //        else begin
  77. //                if(!mcu_wereq) begin
  78. //                        if(!mcu_cs)
  79. //                                mcu_reg_addr<={mcu_addr[19:16],mcu_ad[15:0]};
  80. //                end
  81. //        end
  82. //end
  83. //
  84. //always@(posedge mcu_we or negedge rst) begin
  85. //        if(!rst) begin
  86. //                mcu_req_we<=1'b0;
  87. //                mcu_reg_data<=16'hz;
  88. //        end else begin
  89. //                if(!mcu_wereq) begin
  90. //                        if(!mcu_cs) begin
  91. //                                mcu_reg_data<=mcu_ad;
  92. //                                mcu_req_we<=~mcu_req_we;
  93. //                        end
  94. //                end
  95. //        end
  96. //end

  97. // ******************************************************************
  98. //                                                MCU Write Test
  99. // ******************************************************************
  100. reg [26:0] mcu_div;
  101. reg [1:0] color;

  102. initial begin
  103.         mcu_div<=27'h0;
  104.         color<=2'h0;
  105. end

  106. always@(posedge clk or negedge rst) begin
  107.         if(!rst) begin
  108.                 mcu_div<=18'h0;
  109.                 mcu_reg_addr<=20'h0;
  110.                 mcu_reg_data<=16'hFFFF;
  111.                 mcu_req_we<=1'b0;
  112.                 color<=2'h0;
  113.         end else begin
  114.                 mcu_div<=mcu_div+1;
  115.                 if(mcu_div==18'd8) begin
  116.                         mcu_req_we<=~mcu_req_we;
  117.                 end else if(mcu_div==18'd1018) begin
  118.                         mcu_div<=18'h0;
  119.                         mcu_reg_addr<=mcu_reg_addr+1;
  120.                         if(mcu_reg_addr==20'd130559) begin        //480*272=130560
  121.                                 mcu_reg_addr<=20'h0;
  122.                                 color<=color+1;
  123.                                 case(color)
  124.                                         0:        mcu_reg_data<=16'hF800;
  125.                                         1:        mcu_reg_data<=16'h07E0;
  126.                                         2:        mcu_reg_data<=16'h001F;
  127.                                         3:        mcu_reg_data<=16'hFFFF;
  128.                                 endcase
  129.                         end
  130.                 end
  131.         end
  132. end





  133. /********************************************************************
  134.                                                 SRAM INTERFACE
  135. ********************************************************************/

  136. reg [2:0] sram_s;

  137. initial begin
  138.         {mcu_req_complete,rgb_req_complete}<=2'b00;
  139.         {sram_cs,sram_we,sram_re}<=3'b111;
  140.         sram_data<=16'hz;
  141.         sram_addr<=20'hz;
  142.         sram_s<=3'h0;
  143. end
  144. //assign sram_cs=~rst;

  145. always@(posedge clk or negedge rst) begin
  146.         if(!rst) begin
  147.                 {mcu_req_complete,rgb_req_complete}<=2'b00;
  148.                 {sram_cs,sram_we,sram_re}<=3'b111;
  149.                 sram_data<=16'hz;
  150.                 sram_addr<=20'hz;
  151.                 sram_s<=3'h0;
  152.         end else begin
  153.                 if(sram_s==0) begin
  154.                         if(rgb_req) begin
  155.                         // RGB DATA Read
  156.                                 sram_s<=3'h1;
  157.                                 sram_addr<=rgb_addr;
  158.                                 sram_data<=16'hz;
  159.                                 {sram_re,sram_cs}<=2'b00;
  160.                         end else if(mcu_wereq) begin
  161.                         // MCU DATA Write
  162.                                 sram_s<=3'h4;
  163.                                 sram_addr<=mcu_reg_addr[18:0];
  164.                                 sram_data<=mcu_reg_data;
  165.                                 {sram_we,sram_cs}<=2'b00;
  166.                         end
  167.                 end else begin
  168.                         // sram_s != 0
  169.                         sram_s<=sram_s+1;
  170.                         case(sram_s)
  171.                                 1:                        rgb_req_complete<=~rgb_req_complete;
  172.                                 2:                begin
  173.                                                         rgb_data<=sram_data;
  174.                                                         tp<=sram_data[3:0];
  175.                                                         {sram_re,sram_cs}<=2'b11;
  176.                                                         sram_s<=3'h0;
  177.                                                 end
  178.                                 4:                        mcu_req_complete<=~mcu_req_complete;
  179. //                                5:                        sram_we<=1'b1;
  180.                                 5:                begin
  181.                                                         sram_data<=16'hz;
  182.                                                         {sram_we,sram_cs}<=2'b11;
  183.                                                         sram_s<=3'h0;
  184.                                                 end
  185.                         endcase
  186.                 end        // end of if(sram_s==0)
  187.         end
  188. end






  189. /********************************************************************
  190.                                                 RGB INTERFACE
  191.                                 [ 523(480+43) * 284(272+12) ]
  192. ********************************************************************/


  193. wire rgb_req;
  194. reg  rgb_s;

  195. initial begin
  196.         rgb_s<=1'b0;
  197.        
  198.         rgb_clk<=1'b0;
  199.         rgb_hsync<=1'b0;
  200.         rgb_vsync<=1'b0;
  201.        
  202.         rgb_data<=16'hx;
  203.         rgb_req_re<=1'b0;
  204.         rgb_addr<=18'h3FFFF;
  205.        
  206.         clkcnt<=4'h0;
  207.         hcnt<=14'h0;
  208.         vcnt<=22'h0;
  209.        
  210.         rgb_r<=8'h0;
  211.         rgb_g<=8'h0;
  212.         rgb_b<=8'h0;
  213. end

  214. assign rgb_req=rgb_req_re ^ rgb_req_complete;

  215. always@(posedge clk or negedge rst) begin
  216.         if(!rst) begin
  217.                 clkcnt<=4'h0;
  218.                 hcnt<=14'h0;
  219.                 vcnt<=22'h0;
  220.         end else begin
  221.                 clkcnt<=clkcnt+1;
  222.                 hcnt<=hcnt+1;
  223.                 vcnt<=vcnt+1;
  224.                 if(hcnt==14'd8367)                //523*16=8368
  225.                         hcnt<=14'h0;
  226.                 if(vcnt==22'd2376511)        //8368*284=2376512
  227.                         vcnt<=22'h0;
  228.         end
  229. end

  230. reg [9:0] count;
  231. //RGB_CLK
  232. always@(posedge clk or negedge rst) begin
  233.         if(!rst) begin
  234.                 rgb_s<=1'b0;
  235.                 rgb_clk<=1'b0;
  236.                 rgb_addr<=18'h3FFFF;
  237.                 count<=10'd0;
  238.         end else begin
  239.                 case(clkcnt)
  240.                         0:        begin
  241.                                         rgb_s<=1'b0;
  242.                                         if(!rgb_vsync) begin
  243.                                                 rgb_addr<=18'h3FFFF;
  244.                                         end else if(rgb_hsync) begin
  245.                                                 count<=count+1;
  246.                                                 if(count<10'd480) begin
  247.                                                         rgb_s<=1'b1;
  248.                                                         rgb_addr<=rgb_addr+1;
  249.                                                 end
  250.                                         end else begin
  251.                                                 count<=10'd0;
  252.                                         end
  253.                                 end
  254.                         2:        begin
  255.                                         if(rgb_s)
  256.                                                 rgb_req_re<=~rgb_req_re;
  257.                                         rgb_s<=1'b0;
  258.                                 end
  259.                         7:                rgb_clk<=~rgb_clk;
  260.                         12:                {rgb_r[7:3],rgb_g[7:2],rgb_b[7:3]}=rgb_data[15:0];
  261.                         15:        begin
  262.                                         rgb_clk<=~rgb_clk;
  263.                                 end
  264.                 endcase
  265.         end
  266. end
  267. //RGB_HSYNC
  268. always@(posedge clk or negedge rst)begin
  269.         if(!rst) begin
  270.                 rgb_hsync<=1'b0;
  271.         end else begin
  272.                 if(hcnt<14'd674)                        //42*16=672 + 2 = 674
  273.                         rgb_hsync<=1'b0;
  274.                 else
  275.                         rgb_hsync<=1'b1;
  276.         end
  277. end
  278. //RGB_VSYNC
  279. always@(posedge clk or negedge rst)begin
  280.         if(!rst) begin
  281.                 rgb_vsync<=1'b0;
  282.         end else begin
  283.                 if(vcnt<22'd100418)                        //8368*12=100416 + 2 = 100418
  284.                         rgb_vsync<=1'b0;
  285.                 else
  286.                         rgb_vsync<=1'b1;
  287.         end
  288. end


  289. endmodule
复制代码

出0入0汤圆

发表于 2012-3-29 13:40:51 | 显示全部楼层
继续关注, 似乎已经点亮了

出0入0汤圆

发表于 2012-3-29 22:22:57 | 显示全部楼层
继续努力,到时出个套件给大家玩玩。

出0入0汤圆

发表于 2012-4-23 19:59:48 | 显示全部楼层
期待哈,

出0入0汤圆

发表于 2012-4-24 20:16:42 | 显示全部楼层
板子  出套件不咯  出就发个话??

出0入0汤圆

发表于 2012-4-24 20:26:13 | 显示全部楼层
漂亮




出0入0汤圆

发表于 2012-4-24 20:50:51 | 显示全部楼层
不错!!

出0入0汤圆

发表于 2012-4-25 21:22:56 | 显示全部楼层
恩,看着挺好看的

出0入0汤圆

发表于 2012-4-25 21:40:28 | 显示全部楼层
同问有套间么?

出0入0汤圆

发表于 2012-4-26 08:58:37 | 显示全部楼层
想 拥有一块  楼主怎么不见了啊???

出0入0汤圆

发表于 2012-4-26 09:11:40 | 显示全部楼层
同问有套件么?

出0入0汤圆

发表于 2012-4-26 09:44:13 | 显示全部楼层
关注等套件

出0入0汤圆

发表于 2012-4-26 21:51:27 | 显示全部楼层
月初完成了CPLD+SRAM+TFTLCD(480*272),另用一片EP2C8做25MHz的连续彩条数据写入,测试了10几天,还比较稳定。

现在用TI的CortexM3芯片LM3S5956做一些底层的图形显示算法,发现这个芯片不引出内部总线,只能用IO做总线模拟,内核50Mhz的情况下IO口速度居然只有2.xMhz,效率太低下了,正考虑是不是要用ST的M3芯片。

不知道楼主现在进度怎样了?
用示波器测试过STM32对外的最大连续写入速度没有?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 11:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表