发 帖  
原厂入驻New
[讨论] 【高手问答】第17期:小梅哥和你一起深入学习 FPGA
2014-11-21 14:47:53  5882
分享
小梅哥和你一起深入学习FPGA

                                                                                                   高手问答第17期   
小编导读:
       本期高手问答(11.21~12.5)邀请到了《FPGA与大学EDA教学》、《FPGA在电子设计大赛中的应用》的作者小梅哥, 工,论坛注册名:小梅哥《小梅哥和你一起深入学习Fpga系列》目前正在各大论坛持续更新,广受好评。

梅工简介:
      小梅哥,原名梅雪松,现居于北京,擅长于FPGA逻辑设计。
      小梅哥曾在国内某fpga专业培训机构参加fpga技术学习。现正在进行fpga技术学习心得的整理和归纳,《小梅哥和你一起深入学习Fpga》目前正在各大论坛持续更新。
      现担任至芯科技工程师,负责至芯科技大学计划校内实训项目工程,在至芯科技担任FPGA工程师研发职位。由他主导编写的《FPGA与大学EDA教学》、《FPGA在电子设计大赛中的应用》系列教程即将发布;至芯科技基于altera公司最新系列器件MAX10的FPGA助学板主要设计者之一。

{95D9C87B-EDF0-4F26-88F1-DAE8634F8BC8}.jpg
    若是小伙伴有FPGA方面的问题,or more 。。。欢迎跟帖和梅工一起交流探讨

     同往期一样,在本帖子下面  跟帖并@小梅哥

     Are you ready to share ,to communicate ,even to question  ?

     为了营造更好的问答氛围,我们不欢迎一切与主题无关的讨论、灌水和无脑喷子。


互动奖励规则:
       凡是提问者,均有20个积分获得。

******************************************************************

社区高手招募
       不限专业领域、不限技术方向,只要你是一个有活力并乐于分享的开发者,只要你愿意把自己的经验收获分享给大家,帮助众多从业者共同学习、共同进步,我们就欢迎你来做客社区高手问答。
      联系方式:pengjiali@elecfans.com。快来联系小编吧!
**************************************************************************

往期回顾:

【高手问答】第16期——单片机编程魔法师之高级裸编程思想
2
2014-11-21 14:47:53   评论 分享淘帖
26 个讨论
支持FPGA版主 支持小梅哥!
2014-11-21 15:29:06 评论

举报

Line 86: Cannot find <tools_pkg> in library <utility>. Please ensure that the library was compiled, and that a library and a use clause are present in the VHDL file.Parsing package <mem_pkg>.
在网上down的代码,出现了上述问题,总是编译不过,求帮帮忙吧
2014-11-21 17:31:52 评论

举报

我现在是研究生,FPGA方向的,该怎么提高比较好呢?另外,FPGA可以通过硬件编程实现CPU,为什么还说单片机的处理事物比它强呢,况且它的速度还很快?还有想了解一下FPGA和单片各种应用的侧重点在哪里。
2014-11-21 17:34:31 评论

举报

输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型这句话是什么 意思,有例子说明一下吗?
2014-11-21 17:38:14 评论

举报

大彭 发表于 2014-11-21 17:34
我现在是研究生,FPGA方向的,该怎么提高比较好呢?另外,FPGA可以通过硬件编程实现CPU,为什么还说单片机 ...

首先,学习FPGA必须要有正确的方法,我看目前很同学在进行FPGA学习或使用的过程中,没有一个好的学习方法,不注重仿真测试,这也是学生群体最容易出现的问题。公司员工一般有老员工带,所以有正确的学习和开发流程,而大学生或研究生则受限于课时的安排,无法有条理的进行FPGA技术的学习。夏宇闻老师经常和我们说,仿真测试比逻辑设计更重要,只有你能熟练的应用仿真来测试你所设计的系统,才能更好的发现问题,节约开发时间。因此,要想真正的做好FPGA,仿真很关键。建议使用modelsim进行设计的仿真,quartus II软件自带的仿真工具功能太弱,无法进行复杂系统的仿真测试。
其次,FPGA常用的设计方式必须掌握,状态机和线性序列机是设计中应用最广泛的设计方式,如果做FPGA连这两种设计方式都还不是特别熟悉的话,请立即加强这两方面的学习和练习,直到完全掌握。
再者,Verilog/VHDL 不是C语言,他们的设计思想完全不同,C语言被编译过后是指令,而硬件描述语言被综合后是实实在在的电路。如果你在用FPGA进行系统开发的时候,还不能立即想到你所写的代码会被综合成什么电路,那你就还有很长的路要走。
FPGA其实只是一个工具,一个平台,在这个平台上你做什么事情,主要还是看你的发展方向。如果你做通信的,可以多研究通信系统与FPGA的实现,如果你做信号处理的,可以多研究算法在FPGA硬件结构上的实现以及创新解读。至芯科技有一个霍夫曼编码的课程,就是利用FPGA的独特硬件结构来实现算法的重构。使得FPGA做出来的霍夫曼编码器编码效率远远超过一般处理器和DSP。

至于你第二个问题,可能你对问题的理解稍有偏差,单片机因为指令系统的灵活性,因此在做控制的时候可以相当的灵活,而FPGA系统则因为其设计出来的系统硬件电路唯一性,导致灵活性比不上单片机。FPGA主要应用于高速数据传输、高速数据采集、以及一些IO扩展类应用。目前,随着SOC技术的不断发展,往后的趋势将是嵌入式和硬件逻辑协同工作。
2014-11-21 18:50:52 评论

举报

本帖最后由 HARRY007 于 2014-11-22 10:48 编辑

在always语句中,被赋值的reg型,一定会产生时序电路吗?@小梅哥
2014-11-22 10:46:45 评论

举报

导师是研究FPGA加速图像算法的,但我现在对于学习FPGA特别迷茫,现在在学习数字逻辑和VHDL,然后一边也在学习使用ISE和Vivado,但是感觉效果不是太好,请问从哪方面切入进去会更好一些?
2014-11-22 15:53:27 评论

举报

HARRY007 发表于 2014-11-22 10:46
在always语句中,被赋值的reg型,一定会产生时序电路吗?@小梅哥

不是的啊,always块中可以描述组合逻辑,也可以描述时序逻辑,关键看你的always块中的敏感列表,如always@(posedge clk),即以时钟上升沿或下降沿为触发信号的,会被综合成时序电路;而以电平为敏感信号的,如always@(clk),则会被综合为组合逻辑电路。希望我的回答对你能有所帮助,当然,如果有高手能够更好的回答这个问题,小梅哥也愿意多多学习。
2014-11-22 20:47:05 评论

举报

小梅哥 发表于 2014-11-22 20:47
不是的啊,always块中可以描述组合逻辑,也可以描述时序逻辑,关键看你的always块中的敏感列表,如always ...

谢谢小梅哥的回复~
2014-11-22 21:40:43 评论

举报

我有用过LabVIEW对FPGA进行过编程,当然用的是NI的CompactRIO,当时感觉对FPGA编程不怎么难;可是现在我在学Verilog语言的时候感觉很乱,怎么觉得FPGA这么难呢?我买了块FPGA的板子在学习,目前只能将别人的程序下载进去看现象,还不能自己进行编程;现在很困惑,小梅哥你刚开始学FPGA的时候应该也有类似的经历吧,你当时是怎么做的,能不能给像我这样的初学者一点建设性的意见呢?@小梅哥
2014-11-24 17:09:35 评论

举报

小梅哥,我现在找到的uart程序都是接收一帧数据后再将数据输出出去。但是我目前需要实现的功能是读取14帧数据后,经过计算,然后将计算得到的6帧数据输出。我将源程序改动之后,做仿真结果都正确可是下载到板子上就一直出现乱码,好纠结,您能指教一下吗?我的表述可能不是很清楚,能加您的qq详细聊吗?
@小梅哥
2014-11-26 09:27:54 评论

举报

雨泪 发表于 2014-11-26 09:27
小梅哥,我现在找到的uart程序都是接收一帧数据后再将数据输出出去。但是我目前需要实现的功能是读取14帧数 ...

可以的,QQ上给你问题解决后希望再回到论坛,把心得共享给大家。QQ:528369266
2014-11-26 11:28:23 评论

举报

刚入门学FPGA,准备找个这方面工作,以后有不懂之处还请您经常在线。
2014-11-26 23:18:22 评论

举报

@小梅哥我想问个分频问题,比如说想得到0.5HZ的频率,我的晶振是50MHZ,也就是20ns。那也就是说1/0.5=2S   2*10的9次方/20=1*10的8次方   二进制是101111101011110000100000000 是个27位数字,但是程序里是1011111010111100001000000  是25位,少了最后的两个00   为什么呢?
2014-11-27 08:01:16 评论

举报

haozix521 发表于 2014-11-27 08:01
@小梅哥我想问个分频问题,比如说想得到0.5HZ的频率,我的晶振是50MHZ,也就是20ns。那也就是说1/0.5=2S    ...

这个,麻烦您贴上您的这部分代码,然后我们再做分析。条件不充分,不敢贸然回答
2014-11-27 21:55:31 评论

举报

fj0904 发表于 2014-11-26 23:18
刚入门学FPGA,准备找个这方面工作,以后有不懂之处还请您经常在线。

好的,小梅哥愿意与大家一同学习、一同进步。有任何疑问可直接论坛“@”我,也可以发送邮件给我,邮箱:zxopenmxs@126.com。即时通讯为QQ:528369266
2014-11-27 21:58:44 评论

举报

小梅哥 发表于 2014-11-27 21:55
这个,麻烦您贴上您的这部分代码,然后我们再做分析。条件不充分,不敢贸然回答
...
  1. reg [14:0] counter;
  2. reg test_clk;
  3. assign outclk=test_clk;
  4. always @(posedge sysclk)
  5.   begin
  6.     if(counter==15'b110_0001_1010_1000)
  7.       begin
  8.        test_clk<=~test_clk;//1kHZ
  9.        counter<=15'b0;
  10.       end
  11.     else
  12.        counter<=counter+1'b1;
  13.   end
复制代码
这是一个可以产生1KHZ的程序,其中counter==15'b110_0001_1010_1000是15位,我用计算器计算出来的值是16位,110_0001_1010_10000  就是最后一位多了一个0   为什么和计算值不一样呢?
2014-11-29 08:00:54 评论

举报

haozix521 发表于 2014-11-29 08:00
这是一个可以产生1KHZ的程序,其中counter==15'b110_0001_1010_1000是15位,我用计算器计算出来的值是16 ...

我们不妨换算成周期来理解,1KHz的信号,其周期为1ms=1000us=1000_000ns。你的代码中,产生这个1KHz的信号是通过定时翻转输出时钟来实现的。而一个完整的1KHz信号应该包含两次翻转,例如:经过第一次翻转,test_clk由1变为0,再经过一次翻转,由0变为1,则完成一个周期。那么例如,每个周期为1000_000ns,那么,每翻转一次的时间就应该是一个周期的一半,即500_000ns。时钟频率为50M,即时钟周期为20ns,那么,500_000ns应该计数25_000次。即counter计数最大值应该为25_000-1,即24999。你的代码这里没有减一,所以无法得到非常精准的1KHz,这是问题。实际应该为15‘b110000110100111。即15'b110_0001_1010_1000 - 1
2014-11-29 11:39:42 评论

举报

小梅哥 发表于 2014-11-29 11:39
我们不妨换算成周期来理解,1KHz的信号,其周期为1ms=1000us=1000_000ns。你的代码中,产生这个1KHz的信 ...

讲的很清楚,也很明白,完全懂了。
2014-11-29 23:01:25 评论

举报

撰写讨论

你正在撰写讨论

如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
12下一页
发讨论
关闭

站长推荐 上一条 /7 下一条

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