请教各位高手,学习FPGA从入门到深入碰到一个坎,怎么迈过啊!
哎!算起来学习FPGA也有差不多半年多时间了,这个学习过程中从学习Verilog语言到模仿典型事例一路学习下来也还好(在模仿是也有对事例做一些改动,加入一些自己的想法)。只是感觉如果自己手里有个小项目想去把它实现还不知道怎么入手(比如怎么分模块,模块之间怎么衔接,最终又怎么实现)。所以想问下各位是否有过这种经历,这难道是个坎嘛?这个坎又该通过怎样的训练才能迈过呢?希望大家不吝赐教!帮小弟这个忙能迈过这个坎,万分感谢!!!!!! 说具体点!等待高手! 我学习使用FPGA三年了,也不知怎么迈过这个坎——进入深入高手,也等高手指点。 楼主,再忍耐吧!
很快就会看到另一扇通往不一样世界的门
再忍耐 回复【3楼】akuei2
楼主,再忍耐吧!
很快就会看到另一扇通往不一样世界的门
再忍耐
-----------------------------------------------------------------------
不是我不能忍耐,是我怕自己走了弯路,所以想听听各位大牛的建议。谢谢赐教 没有很深的行业/公司背景 自学是不可能把FPGA学懂的,语言/仿真只是皮毛. 回复【5楼】g47603690
没有很深的行业/公司背景 自学是不可能把fpga学懂的,语言/仿真只是皮毛.
-----------------------------------------------------------------------
是啊!所以现在在学校就先只有参加些电子设计比赛增加项目经验,希望实习时能找到公司。 回复【6楼】wanwzy
回复【5楼】g47603690
没有很深的行业/公司背景 自学是不可能把fpga学懂的,语言/仿真只是皮毛.
-----------------------------------------------------------------------
是啊!所以现在在学校就先只有参加些电子设计比赛增加项目经验,希望实习时能找到公司。
-----------------------------------------------------------------------
在学校,最好的学习和锻炼机会就是电子设计竞赛了
有压力,有目标,学习起来效率会很高的 回复【7楼】TeWu T5
回复【6楼】wanwzy
回复【5楼】g47603690
没有很深的行业/公司背景 自学是不可能把fpga学懂的,语言/仿真只是皮毛.
-----------------------------------------------------------------------
是啊!所以现在在学校就先只有参加些电子设计比赛增加项目经验,希望实习时能找到公司。
-----------------------------------------------------------------------
在学校,最好的学习和锻炼机会就是电子设计竞赛了
有压力,有目标,学习起来效率会很高的
-----------------------------------------------------------------------
呵呵,是啊!谢谢支持!最近正在准备“高教社&XILINX杯”2010年各省区大学生电子设计竞赛,加油拉!哈哈 语言不是皮毛.
语言是FPGA的灵魂!之所以不行就是语言没学好。
自己一行一行的写,生成模块。模块之间很好衔接,因为能按你的想法实现功能。用别人模块,就像拼积木,灵活性,功能都有限.自己用语言写,就像雕塑,想怎么玩就怎么玩,但得看你的语言基础,构思,经验. 提升自身逻辑设计能力! to 9楼,我觉得,以语言这种软件的思路去做FPGA,是不对的,必须以电路的思路去做。时刻清晰自己的电路怎么实现,不能脑子里只有一个时序,却要综合器去实现 回复【11楼】cfqxdgr
-----------------------------------------------------------------------
告诉你个秘密: 我会玩电子管。开发中最主要的成本是人工,我用语言一天完成的工作量可能你要10天.当然,如若你从事IC设计另当别论。
你的思想还停留在小规模积成电路时代. 不用这么觉得自己牛逼,你根本没理解我的意思。玩过电子管说明你资历老啊,我没经过那年代~我并没说让你用古老的方法用与非门搭这个东西,我是说虽然写的是HDL,但脑子里不要把它想成程序,而要明白自己写的是电路,要讲时序的~等模块比较多了,调起来就不是简单的连个线那么简单了 如果不下水,无论如何你也学不会游泳,如果不做项目,无论如何你都学不精FPGA 不好意思,你别误会,我不是说资历老,我没那么老.只是想说明硬件设计的语言化,没办法,思想跟不上技术也跟不上的,所以观点要改变. 没错,我这边主要是用Verilog,见过太多人觉得这门语言太好学了,一问就是“跟C一样”,忽略的HDL的本质是用语言去描述电路,目前的学生基本上都是接触过C之类的之后再接触HDL,所以潜意识里以软件的思路去学习FPGA,一年前有个就是出了这个问题,时序仿真通过了就乐的不行,上板又调了1个半月才真正算是基本没问题了 关注。 非常感谢cfqxdgr和40130064你们两位,说了很多自己的看法,我也学到了很多,希望有更多的人能谈谈自己感受。我想在是语言和电路两者应该都不是独立的,在我看来语言是为电路服务的,因为我们最终设计的还是电路。(如有说得不对的地方请各位高手指点) 回复【9楼】40130064
语言不是皮毛.
语言是fpga的灵魂!之所以不行就是语言没学好。
自己一行一行的写,生成模块。模块之间很好衔接,因为能按你的想法实现功能。用别人模块,就像拼积木,灵活性,功能都有限.自己用语言写,就像雕塑,想怎么玩就怎么玩,但得看你的语言基础,构思,经验.
-----------------------------------------------------------------------
我现在就是想往这方面努力(自己试着写代码),但是现在就是在构思和经验上感觉很匮乏,我想这可能需要一个过程吧!现在我想知道从“模仿调试别人的代码”到“自己写代码”这个过渡期,有什么比较好的具体的学习方法可以借鉴下吗?谢谢(特别是构思) 回复【17楼】tear086 .COM 缺氧
关注。
-----------------------------------------------------------------------
缺氧哥,呵呵,说说你的学习经验呀!你遇到过这个阶段吗? 回复【19楼】wanwzy
-----------------------------------------------------------------------
FPGA的话功能很多 .说下CPLD部分, 其它的只懂皮毛。
首先硬件语言要提升,就要追求速度最高化。
以下是我做的经验,只是给你参考下。
根据你对电路需要完成的功能向下分层设计,直到你能完成这部分功能,单独仿真,再组合。波形仿真一定要单独仿真!
也就是说你要对每部分的功能和波形完全了解。
用MCU控制一个带编码器直流电机定位。
1 通讯模块。
完成FPGA与MCU的数据交换。
2 正交编码加减计数器。
这个是反馈电机位置的数据。
3 位置差
目标位置减去当前正交编码加减计数器,等于0 在目标位置 大于0和小于0。
3 PWM占空比
停时占空比为0
匀速占空比,假设50% 。减速占空比,运行后,在电机位置离目标位置越近越近小。
5 PWM输出控制
控制电机速和方向
还有些其它功能模块 就不说了 只是说明方法。
说下PWM输出控制 我只会VHDL
功能: 根据dc和dir控制电机速度和方向 具体说下这模块怎么写的,其实这模块调LED光也行。
速度控制:PWM输信号的周期是255个cp 如果dc=123 占空比大概50% 占空比能在0-99%变化(大概 )这电路不要求0和100%两点
方向控制:dir=1时电流从A到B电机正转dir=0 电流从B到A电机正转
声明一下:这是个入门级的代码。能完成以上功能,语法很差,清零是悬空的,寄存器的话有些可能不要.
port(
dir : in std_logic; 方向信号来自位置差模块
en : in std_logic; 使能信 来自命令寄存器 值是MCU控制的
cp : in std_logic; 时钟信号方波
dc : in integer range 0 to 255; 占空比dc来自命令寄存器 值是MCU控制的
PWMA : out std_logic; 接电机正(不是直接有后级H桥)
PWMB : out std_logic 接电机负
);
end PUL;
architecture maxpld of PUL is
signal PWMspeed :integer range 0 to 255:=0;
begin
process (cp,dc,en ) cp,dc,en 有变化时向下执行
begin
if (en='1')then 当EN=1向下执行 否则 PWMA <='0';PWMB <='0';电机无电流
if (cp'event and cp='1') thencp上升沿向下执行 否则 结束
PWMspeed<=PWMspeed+1;检测到一个cp上升沿PWMspeed+1 PWMspeed会从0到255循环
if (PWMspeed>=dc) then如果PWMspeed>=dc PWMA <='0';PWMB <='0';
PWMA <='0';
PWMB <='0';
else 如果PWMspeed<dc
if (dir='1')then 方向=1 PWMA='1' PWMB <='0' 电流从A到B电机正转
PWMA <='1';
PWMB <='0';
else 方向=0 PWMA='0'PWMB <='1'电流从B到A电机正转
PWMB <='1';
PWMA <='0';
end if;
end if;
else
null;
end if;
else
PWMA <='0';
PWMB <='0';
end if;
end process;
end maxpld;
这是行为模型 很像MCU的C语言编程
这模块如果不用行为模型描述,一般人很难完成的。但话说过来,它的确是数字电路组合生成的。
用单片机能实现这功能,如果在等成本的话速度不会超过它。我们能做的只是对代码优化,EDA工具生成。
数据流模型 对个人数字逻辑要求较高,也是最接近数字电路的语言描述,只适应一些简单模块
结构化模型 其实就是把模块重复或多个组合 我是宁愿画图连线,简单,但灵活度大打折扣。
硬件语言没那么简单,它能使硬件产生一些神奇的多余的信号和延时,
高速时,波形仿真如果不加延时信号和初始值,在硬件运行是有差的。
现在你觉得硬件语言学得不错,待你再深入时,你会再次觉得你还刚入门,再要提高,就得做更多实例工程。 嗯,学习是享受,是一步一步的提升...
描述语言是FPGA的基本功~
不明白,我真的很无语~
40130064支持你。
嗯,本来不想说什么的,
但是看到众多回复,我表示压力很大
很多同学都把学习的出发点摆在另一点了..
学习跟工作谈不上关系,正的那么严重吗?
最重要是在学习中得到衍生物...
学习是一种修行,即使学习在工作上没有任何帮助。
但是学习一定在你人生有很大的帮助。
例子:喜欢踢足球,一定要当国足吗?
继续潜水 FPGA 是 半导体(数字)设计 的一种延续,如果没有学习过,或者从事过 半导体设计 很难直接跨过这个 坎。
hdl 语言是 半导体设计 的思想表达,但是前提也一样,如果你要知道 你要设计什么,你要满足什么。
当然了,多阅读 商业代码 可以提高 对 半导体设计 的认识,但是个人自学实质上的提高有限,要有一个比较好的指导人。
推荐一本书,CMOS 大规模集成电路设计, cmos vlsi design: Acircuits and Systems Perspective.
这本书基本涵盖了 半导体设计,特别是数字设计 的方方面面。
PS: 如果你能准确的给出 时钟 的感念,你基本上就跨过这个坎了。 回复【20楼】wanwzy
-----------------------------------------------------------------------
我是砖家,假牙,大家多多照顾。 回复【21楼】40130064
回复【19楼】wanwzy
-----------------------------------------------------------------------
fpga的话功能很多 .说下cpld部分, 其它的只懂皮毛。
首先硬件语言要提升,就要追求速度最高化。
以下是我做的经验,只是给你参考下。
根据你对电路需要完成的功能向下分层设计,直到你能完成这部分功能,单独仿真,再组合。波形仿真一定要单独仿真!
也就是说你要对每部分的功能和波形完全了解。
用mcu控制一个带编码器直流电机定位。
1 通讯模块。
完成fpga与mcu的数据交换。
2 正交编码加减计数器。
这个是反馈电机位置的数据。
3 位置差
目标位置减去当前正交编码加减计数器,等于0 在目标位置 大于0和小于0。
3 pwm占空比
停时占空比为0
匀速占空比,假设50% 。减速占空......
-----------------------------------------------------------------------
非常感谢40130064从一个项目的构思上举例给我说明了这个过程,很详细。其中有很多东西需要我慢慢去读懂理解,不过我已经有点启发了,再次感谢! 回复【22楼】akuei2
嗯,学习是享受,是一步一步的提升...
描述语言是fpga的基本功~
不明白,我真的很无语~
40130064支持你。
嗯,本来不想说什么的,
但是看到众多回复,我表示压力很大
很多同学都把学习的出发点摆在另一点了..
学习跟工作谈不上关系,正的那么严重吗?
最重要是在学习中得到衍生物...
学习是一种修行,即使学习在工作上没有任何帮助。
但是学习一定在你人生有很大的帮助。
例子:喜欢踢足球,一定要当国足吗?
继续潜水
-----------------------------------------------------------------------
这里提到了一个学习与工作的问题。我完全支持你的说法。我学FPGA完全是因为兴趣所致,兴趣更是我最大的原动力。我有很多遇到困难的时候,那时心情很烦躁,但是待平静下来了,问题解决了。当看到验证结果的那一刻感觉这一切都是值得的。(这也慢慢教会了我遇到困难应该如何淡定的去分析原因,解决问题)。所以我觉得这与以后的工作的关系不用看得太重了,毕竟工作就有那么多对口的吗?享受这个兴趣的过程更值得! 回复【23楼】zzsoft
fpga 是 半导体(数字)设计 的一种延续,如果没有学习过,或者从事过 半导体设计 很难直接跨过这个 坎。
hdl 语言是 半导体设计 的思想表达,但是前提也一样,如果你要知道 你要设计什么,你要满足什么。
当然了,多阅读 商业代码 可以提高 对 半导体设计 的认识,但是个人自学实质上的提高有限,要有一个比较好的指导人。
推荐一本书,cmos 大规模集成电路设计, cmos vlsi design: acircuits and systems perspective.
这本书基本涵盖了 半导体设计,特别是数字设计 的方方面面。
ps: 如果你能准确的给出 时钟 的感念,你基本上就跨过这个坎了。
-----------------------------------------------------------------------
谢谢你又从另一个角度解释了我的疑问,我会注意到的。 回复【24楼】tear086 .COM 缺氧
回复【20楼】wanwzy
-----------------------------------------------------------------------
我是砖家,假牙,大家多多照顾。
-----------------------------------------------------------------------
呵呵,缺氧哥,你也太谦虚了吧! (*^__^*) 嘻嘻……!
加油吧~年轻人~
我也一样在加油中 我觉得还是手底下有项目进阶比加快,我FPGA也是懂得皮毛,公司下一步可能开发FPGA平台,正在学习,CPLD比较熟悉,当年记得刚开始学习CPLD的时候,就是手底下有项目,而且任务比较近,我负责CPLD这部分的编程,只有1个月时间,然后就开始攻关,到了月底任务完成了,CPLD也入门了。楼上有几位说的很有道理,决不能用设计软件的思想作CPLD设计,最好能观察你写的模块综合后是什么电路,然后不断优化,最低要求,你也要知道Verilog代码块是并行的,实现就是逻辑门与寄存器。 学习 拜师学艺,多看别人的代码 学习 学习 关注 我说一句,理论深度不够。你花一年的时间做理论分析,写代码一个礼拜就够了~~ 回复【36楼】aguang7yue7
我说一句,理论深度不够。你花一年的时间做理论分析,写代码一个礼拜就够了~~
-----------------------------------------------------------------------
我也感觉还像有这方面的原因。请问你所说的理论分析是哪方面的呀?数电,模电?谢谢赐教 学习fpga,首先是熟悉硬件描述语言的表达方式,熟悉描述硬件的思路;至于如何划分模块,可以看一些芯片资料,可以了解模块是如何根据功能划分的;如果有机会,接触一个完成的工程,会很容易上手。
-----------------------------------------------------------
昊阳电工 www.sunnyhow.com 回复【38楼】sunnyhow
学习fpga,首先是熟悉硬件描述语言的表达方式,熟悉描述硬件的思路;至于如何划分模块,可以看一些芯片资料,可以了解模块是如何根据功能划分的;如果有机会,接触一个完成的工程,会很容易上手。
-----------------------------------------------------------
昊阳电工 www.sunnyhow.com
-----------------------------------------------------------------------
谢谢分享 回复【楼主位】wanwzy
-----------------------------------------------------------------------
HDL代码通常有称为RTL代码,如果你把什么是RTL搞明白,头脑里有清楚的概念,那么你就入门了。
剩下的,就是在你的应用专业里面苦耕,而这时,FPGA的知识,已经就显得不重要的,专业知识才是重要的。 回复【40楼】linux_pro
回复【楼主位】wanwzy
-----------------------------------------------------------------------
hdl代码通常有称为rtl代码,如果你把什么是rtl搞明白,头脑里有清楚的概念,那么你就入门了。
剩下的,就是在你的应用专业里面苦耕,而这时,fpga的知识,已经就显得不重要的,专业知识才是重要的。
-----------------------------------------------------------------------
RTL代码?这个名词我还真是第一次听说(大家别笑小弟啊!),既然现在提出来了,我也去百度一下看看啊! 很久没来看了。呵呵,给自己顶一贴,欢迎更多高手分享讨论! 看来就是必须要学好verilog语言呢。 回复【楼主位】wanwzy
哎!算起来学习fpga也有差不多半年多时间了,这个学习过程中从学习verilog语言到模仿典型事例一路学习下来也还好(在模仿是也有对事例做一些改动,加入一些自己的想法)。只是感觉如果自己手里有个小项目想去把它实现还不知道怎么入手(比如怎么分模块,模块之间怎么衔接,最终又怎么实现)。所以想问下各位是否有过这种经历,这难道是个坎嘛?这个坎又该通过怎样的训练才能迈过呢?希望大家不吝赐教!帮小弟这个忙能迈过这个坎,万分感谢!!!!!!
-----------------------------------------------------------------------
日思夜想之,问题一旦解决,自己回头悟悟,水平自然提升
自己思考是必须的,否则别人的经验指导对于你都是体外之物,无法消化吸收 回复【44楼】wang984
-----------------------------------------------------------------------
呵呵,这倒是。如果一个工程中的代码是自己写的,感觉收获确实很大。不仅是代码方面,包括电路结构,整个思路都更清晰了,也就成为自己的经验了。 受益匪浅 做个实在的项目,经验只能靠时间和实践去积累
页:
[1]