3465|3

24

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

急求verilog VGA 驱动程序 [复制链接]

急求verilog   VGA 驱动程序!!!






谢谢!!!!!!!!!!!!!
!!!!!!!!!!!!
此帖出自FPGA/CPLD论坛

最新回复

我的是VHDL的,呵呵,跟人家要的不对头  详情 回复 发表于 2009-10-22 14:43
点赞 关注
 

回复
举报

151

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
module lcd(reset,clk,flag,incode1,incode2,rs,rw,en,lcd_out);
input clk,reset; //40ns
input [7:0] incode1,incode2;
input flag;
output rs,rw,en;
output [7:0] lcd_out;
reg [7:0] lcd_out;
reg rs,rw,en;
reg [3:0] state;
reg [19:0] num;
reg [4:0] addr;
parameter idle=4'b0000,s0=4'b0001,s1=4'b0011,
          s2=4'b0010,s3=4'b0110,s4=4'b0111,
          s5=4'b0101,s6=4'b0100,s7=4'b1100,
          s8=4'b1101,s9=4'b1111,s10=4'b1110;
function [7:0] romout;
input [3:0] addr;
case(addr)
0: romout=8'h20; //blank
1: romout=8'h69;//i
2: romout=8'h73;//s
3: romout=8'h20; //blank
4: romout=8'h6F;//o
5: romout=8'h70;//p
6: romout=8'h65;//e
7: romout=8'h6E;//n
8: romout=8'h21;//!
9: romout=8'h73;//s
10: romout=8'h68;//h
11: romout=8'h6F;//o
12: romout=8'h72;//r
13: romout=8'h74;//t
default:romout=8'h21;//!
endcase
endfunction
//reg flag;
//reg [7:0] incode1,incode2;
[email=always@(posedge]always@(posedge[/email] clk or posedge reset)
begin
   // flag<=1'b0;incode1<=8'h31;incode2<=8'h32;
    if(reset) begin num<=0;addr<=0;state<=idle;end
    else begin
         case(state)
          idle: begin
                num<=num+20'b1;addr<=0;
                rs<=0;rw<=0;en<=1;
                if(num<500000) begin num<=0;state<=s0;end
                end
          s0: begin
                num<=num+20'b1;
                if(num<3) begin rs<=0;rw<=0;en<=1;end
                else if(num<6) lcd_out<=8'h38;
                else if(num<30) en<=0;
                else if(num<31) begin num<=0;state<=s1;end
              end
          s1: begin
                num<=num+20'b1;
                if(num<3) begin rs<=0;rw<=0;en<=1;end
                else if(num<6) lcd_out<=8'h01;
                else if(num<30) en<=0;
                else if(num<31) begin num<=0;state<=s2;end
              end
          s2: begin
                num<=num+20'b1;
                if(num<3) begin rs<=0;rw<=0;en<=1;end
                else if(num<6) lcd_out<=8'h0c;
                else if(num<30) en<=0;
                else if(num<31) begin num<=0;state<=s3;end
              end
          s3: begin
                num<=num+20'b1;
                if(num<3) begin rs<=0;rw<=0;en<=1;end
                else if(num<6) lcd_out<=8'h06;
                else if(num<30) en<=0;
                else if(num<31) begin num<=0;state<=s4;end
              end
           s4: begin //write the address
                num<=num+20'b1;
                if(num<3) begin rs<=0;rw<=0;en<=1;end
                else if(num<6) lcd_out<=8'h82;
                else if(num<30) en<=0;
                else if(num<31) begin num<=0;state<=s5;end
              end
          s5: begin //write R
                num<=num+20'b1;
                if(num<3) begin rs<=1;rw<=0;en<=1;end
                else if(num<6) lcd_out<=8'h52;
                else if(num<30) en<=0;
                else if(num<31) begin num<=0;state<=s6;end
              end
          s6: begin //write the number of 10
                num<=num+20'b1;
                if(num<3) begin rs<=1;rw<=0;en<=1;end
                else if(num<6) begin lcd_out<=incode1; end
                else if(num<30) en<=0;
                else if(num<31) begin num<=0; state<=s7;end
              end
         s7: begin //write the number of 1
                num<=num+20'b1;
                if(num<3) begin rs<=1;rw<=0;en<=1;end
                else if(num<6) begin lcd_out<=incode2; end
                else if(num<30) en<=0;
                else if(num<31) begin num<=0; state<=s8;end
              end
          s8: begin //write data
                num<=num+20'b1;
                if(num<3) begin rs<=1;rw<=0;en<=1;end
                else if(num<6) begin lcd_out<=romout(addr);end
                else if(num<30) en<=0;
                else if(num<31) begin num<=0; addr<=addr+4'b1;
                                      if(flag) begin if(addr==8) state<=s9;end
                                      else begin if(addr==3) addr<=4'd9;
                                                 else if(addr==14) state<=s9;
                                           end
                                 end
              end
          s9: begin //write A
                num<=num+20'b1;
                if(num==600) begin num<=0;state<=idle;end
              end
          default :state<=idle;
          endcase
         end
end
endmodule
此帖出自FPGA/CPLD论坛
 
 

回复

2131

帖子

0

TA的资源

至上芯片

板凳
 
你找一下Sea_eeworld!
此帖出自FPGA/CPLD论坛
个人签名处处留心皆学问!
 
 
 

回复

107

帖子

0

TA的资源

纯净的硅(高级)

4
 

回复 板凳 daicheng 的帖子

我的是VHDL的,呵呵,跟人家要的不对头
此帖出自FPGA/CPLD论坛
个人签名快乐是一天,不快乐也是一天,为什么不天天快乐呢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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