搜索
bottom↓
回复: 30

接触FPGA不久,新人求助。

[复制链接]

出0入0汤圆

发表于 2013-1-23 20:08:27 | 显示全部楼层 |阅读模式
这是我的1602程序。打红色的地方存在的时候,液晶不能初始化,但是引脚的电压是对的,即电压是0x38.
删掉了才可以初始化,这是为什么呀、、


module LCD_DRIVER(sys_clk, rs, en, io_out);
input sys_clk;
output rs, en;
output[7:0]io_out;

wire en;

reg rs;
reg[7:0]io_out;

reg[7:0]buffer;

reg lcd_clk;
reg[15:0]sys_counter;
reg en_sel;
reg[7:0]state;
reg[15:0]lcd_counter;

reg[7:0]action;

parameter Idel = 8'b0000_0000;
parameter START_DISMODE = 8'b0000_0001;
parameter CLOSE_DIS = 8'b0000_0010;
parameter CLR_DIS = 8'b0000_0100;
parameter CURSOR_MOVEMODE = 8'b0000_1000;
parameter CURSOR_DISMODE = 8'b0001_0000;
parameter WRITE_DATA = 8'b0010_0000;
parameter WRITE_COMMAND = 8'b0100_0000;

initial begin
        action = START_DISMODE;
end

always@(posedge sys_clk)begin
        sys_counter = sys_counter + 1;
        if(sys_counter == 50_000)begin
                sys_counter = 0;
        end
end

always@(posedge sys_clk)begin
        if(sys_counter<25_000)
                lcd_clk = 1;
        else
                lcd_clk = 0;
end

always@(posedge lcd_clk)begin
        case(state)
                START_DISMODE:begin
                        rs <= 0;
                        io_out <= 8'h38;
                        en_sel <= 1;
                        state <= Idel;
                end
                Idel:begin
                        en_sel <= 0;
                        state <= action;
                end
                default:        state <= action;
        endcase
end

always@(posedge lcd_clk)begin
        if(action!=Idel)
                action<=Idel;
end



assign en = en_sel?lcd_clk:1'b0;

endmodule

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

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

出0入22汤圆

发表于 2013-1-23 21:01:52 | 显示全部楼层
撸主,我觉得你不应该一上来就用fpga来玩mcu应该玩的事情。

出0入0汤圆

发表于 2013-1-23 21:14:30 | 显示全部楼层
顶LS and 标题不合格!

出0入0汤圆

发表于 2013-1-23 21:45:54 | 显示全部楼层
头像Mm不错

出0入0汤圆

发表于 2013-1-24 00:08:55 | 显示全部楼层
楼主把FPGA用到MCU的场合去了,你不要一来就贴程序,没人会一句一句看你程序,你最好把问题描述成文字,这样我们好帮你找问题

出0入0汤圆

 楼主| 发表于 2013-1-24 10:59:38 | 显示全部楼层
zxq6 发表于 2013-1-23 21:01
撸主,我觉得你不应该一上来就用fpga来玩mcu应该玩的事情。

师兄,该玩儿些什么呢?
我迷茫了

出0入0汤圆

 楼主| 发表于 2013-1-24 11:00:09 | 显示全部楼层
lj_swust 发表于 2013-1-24 00:08
楼主把FPGA用到MCU的场合去了,你不要一来就贴程序,没人会一句一句看你程序,你最好把问题描述成文字,这 ...

额,我看那些用文字描述的贴子,后面的那些人都喊贴程序呀~~

出0入0汤圆

 楼主| 发表于 2013-1-24 11:00:29 | 显示全部楼层
Fourier00 发表于 2013-1-23 21:45
头像Mm不错

这是我妹妹

出0入0汤圆

 楼主| 发表于 2013-1-24 11:01:42 | 显示全部楼层
jlhgold 发表于 2013-1-23 21:14
顶LS and 标题不合格!

额,标题应该怎么写啊~
时间地点人物..?...O(∩_∩)O~

出0入0汤圆

 楼主| 发表于 2013-1-24 11:41:38 | 显示全部楼层
各位大神,initial语句块,只在仿真的时候有用,实际跑板子的时候不用的吗?
为什么有时候我用initiall给某排管脚电压赋值是对的呢?

出0入0汤圆

发表于 2013-1-24 22:36:46 | 显示全部楼层
FPGA和MCU不一样,你这程序就是MCU的思想。太多不规范的地方,有的if没有else,可能会产生锁存器,还有时钟满天飞。
你要首先了解什么是FPGA

出0入0汤圆

发表于 2013-1-24 23:31:40 | 显示全部楼层
minchina 发表于 2013-1-24 11:41
各位大神,initial语句块,只在仿真的时候有用,实际跑板子的时候不用的吗?
为什么有时候我用initiall给某 ...

initial语句块是不可综合的,不能生成实际电路。
FPGA作为一种系统级的芯片想当MCU玩也可以,灵活正是FPGA的特色。
不知道撸主用的谁家的芯片,用软核+通用外设IP+C语言1602驱动就和MCU驱动1602没有区别了.

出0入0汤圆

发表于 2013-1-25 01:16:49 | 显示全部楼层
感觉你写的太乱了,懒得看都

出0入0汤圆

 楼主| 发表于 2013-1-25 10:32:05 | 显示全部楼层
zhaoxin5002 发表于 2013-1-25 01:16
感觉你写的太乱了,懒得看都

额,不好意思,大神,在下FPGA新手,而且注释不能写中文、

出0入0汤圆

 楼主| 发表于 2013-1-25 10:34:28 | 显示全部楼层
pocker5200 发表于 2013-1-24 23:31
initial语句块是不可综合的,不能生成实际电路。
FPGA作为一种系统级的芯片想当MCU玩也可以,灵活正是FPG ...

但有时候我发现initial还是有起作用啊

reg init_sel;
initial begin
        init_sel = 0;
end

我后面的语句是对init_sel信号进行判断,以执行设备初始化时序。

init_sel=0时,进行初始化。

我没有添加nitial_sel语句块时,无法进行正常的初始化。
我添加initial语句块,用init_sel = 1或者其他不为0的数,同样无法正常初始化。
只有用init_sel=0时,才能正常初始化、

出0入0汤圆

发表于 2013-1-25 10:57:44 | 显示全部楼层
那不是initial语句块起作用,而是综合器默认设置为0,我说的是实际下载到片子里运行的时候。
initial语句只有仿真的时候才用到,想用实际电路跑就得用可综合语句写。

出0入0汤圆

 楼主| 发表于 2013-1-25 11:15:36 | 显示全部楼层
pocker5200 发表于 2013-1-25 10:57
那不是initial语句块起作用,而是综合器默认设置为0,我说的是实际下载到片子里运行的时候。
initial语句只 ...

我真是越来越糊涂了....

我也感觉initial应该不会被执行

但是我用1602来显示数值

initial begin
    buffer = 8'h38;               //buffer为写入1602的数据
end

我确实看到1602上显示8、

initial begin
    buffer = 8'h37;               //buffer为写入1602的数据
end

确确实实也看着变为7了、、

出0入0汤圆

发表于 2013-1-25 11:41:39 | 显示全部楼层
红字部分相当于,把action改成IDLE……先买一本国外的verilog教材看吧,基础打牢了这些就都不是问题了。

出0入0汤圆

发表于 2013-1-27 17:20:05 | 显示全部楼层
给你个忠告:用现成的代码,省下时间写点有意义的。

出0入0汤圆

 楼主| 发表于 2013-1-27 17:59:49 | 显示全部楼层
zhaoxin5002 发表于 2013-1-27 17:20
给你个忠告:用现成的代码,省下时间写点有意义的。

写代码不是要多练嘛?

出0入0汤圆

发表于 2013-1-27 18:05:34 | 显示全部楼层
minchina 发表于 2013-1-27 17:59
写代码不是要多练嘛?

别当死学生,多看点别人代码

出0入0汤圆

 楼主| 发表于 2013-1-27 18:19:52 | 显示全部楼层
zhaoxin5002 发表于 2013-1-27 18:05
别当死学生,多看点别人代码

我看啊,但是不自己写的话,始终锻炼不出来属于自己的思维。
别人的最多只能借鉴。

出0入0汤圆

 楼主| 发表于 2013-1-27 18:52:40 | 显示全部楼层
zhaoxin5002 发表于 2013-1-27 18:05
别当死学生,多看点别人代码

不形成自己的思维、编程模式,永远都只是新手。多看别人的代码是必要的,我在一楼贴出的代码就是参考别人写的简单状态机(没写全,因为没有必要,问题不是出在那里,删减了)。
代码方面,C语言模式已经根深蒂固在我的思维里面。所以转换为硬件描述语言或许会花点时间。我前些时候已经写好了1602的驱动了,fpga的,自己的。
用自己的驱动,这就是我的风格。

出0入0汤圆

发表于 2013-1-27 19:41:59 | 显示全部楼层
minchina 发表于 2013-1-27 18:52
不形成自己的思维、编程模式,永远都只是新手。多看别人的代码是必要的,我在一楼贴出的代码就是参考别人 ...

学习的目的不是跑来锻炼思维来了,最终目的还是把知识转为效益,毕竟我们只涉及应用层面。永远记得务实,像驱动1602这种能事还要形成思维也就能出现在课堂上,你看看当初教过你的教授们,一辈子的教学成果也打不进市场。  有这时间还不如去论坛下几个完整的案例好好研究研究。


代码写不完,有成型的尽量用成型的,闭门造车出门不合辙,多看看大师级写的程序,另外如果不是很高端,执行效率都是次要的。

出0入0汤圆

 楼主| 发表于 2013-1-27 19:59:43 | 显示全部楼层
zhaoxin5002 发表于 2013-1-27 19:41
学习的目的不是跑来锻炼思维来了,最终目的还是把知识转为效益,毕竟我们只涉及应用层面。永远记得务实, ...

什么叫做了一辈子的科研,也进不了市场哦?

很多教授年轻的时候都在市场混过,比如我的导师,以前开过公司,研究所,老了过后才来学校养老的。

既然你都知道是学习了,那就是为了锻炼思维!

做项目才是为了应用!

1602是很简单,但是FPGA不简单,我是了解FPGA的思维,不是了解1602的思维。

什么是有现成就用现成的哦,如果是这样的话,于振南为什么还要写znfat,明明都已经有fatfs了。

谁说要闭门造车?

是观之,在取之精华,融入自己的思维。我开发arm的时候,就算是做大项目,我也很少会移植ucos之类的。我多半都是自己写状态机,或者是用我自己写的os,执行效率还更高些。

案例我有的是,基础没打牢,还不敢吃太快。所谓走还没学会,就想学跑了。

这就像是C语言都还没学好,就想学ARM了。

出现看不懂的情况只会更多。

出0入0汤圆

发表于 2013-1-27 20:18:11 | 显示全部楼层
淡定,我只是觉得你在已成熟的东西上再耗时间优化不必要(除非精仪航天)。这个行业太深了,你永远学不完。如果你只相当程序员的话另当别论


有现成就用现成,最后的目的是应用,你也不可能精通

出0入0汤圆

 楼主| 发表于 2013-1-27 20:51:30 | 显示全部楼层
zhaoxin5002 发表于 2013-1-27 20:18
淡定,我只是觉得你在已成熟的东西上再耗时间优化不必要(除非精仪航天)。这个行业太深了,你永远学不完。 ...

~我还只是个学生而已、有必要打牢基础、

出0入0汤圆

发表于 2013-1-27 21:08:55 | 显示全部楼层
minchina 发表于 2013-1-27 20:51
~我还只是个学生而已、有必要打牢基础、

我也是自动化过来人,听我的吧务实些,其实你说的很多都是我以前的误区,当时我也不明白,别人怎么说也觉得他们不对,现在想想 跟你讲你也不会听。很多事儿必须亲身经历才肯相信,还得自己悟,毕业了你就全清楚了,看好你

出0入0汤圆

发表于 2013-1-31 15:43:09 | 显示全部楼层
建议还是先多看点资料吧,不急着上手,你还年轻,时间还很多!

出0入0汤圆

发表于 2013-2-2 15:16:38 | 显示全部楼层
楼主我没看懂,在没个lcd_clk的时候,action都被清成idel,那么在状态机里,同样的时钟控制,又如何进得了startdis呢?所有的Always都是并行的吧,那第一个lcd_clk来了,不管action初始化成什么样,都被清成idel,然后状态机是不是就进idel吧idel传给state,那就永远是idel了……请楼主明示,我也不太懂

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 07:23

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

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