欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    初学FPGA, 怎么从硬件上理解?.doc

    • 资源ID:3394101       资源大小:20.50KB        全文页数:5页
    • 资源格式: DOC        下载积分:2
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要2
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    初学FPGA, 怎么从硬件上理解?.doc

    初学FPGA, 怎么从硬件上理解?先理解组合逻辑和时序逻辑,后面就好说了,这里先讲讲狭义的组合逻辑和时序逻辑,时序逻辑一般指的是D触发器,组合逻辑指的是:与门 或门 非门,比较器,选择器,编码器,译码器,加法器,当然还有两类比较特殊的就是三态门和RAM,时序逻辑D触发器需要时钟来驱动的,也就是必须要有时钟才会 动作,而组合逻辑不需要时钟驱动,在时序图上的表现就是时序逻辑的输出比输入晚一个时钟周期,而组合逻辑输入和输出都是在同一个时钟周期,所有的数字电路 都是由组合逻辑和时序逻辑构成,大到CPU,小到电子表芯片,然后我们看看上面的组合逻辑和时序逻辑怎么来用硬件描述语言来描述。1:与门assign c = ab;always(*)c=ab2:或门assign c = a|b;always(*)c=a|b3:非门assign c = a;always(*)c=a4:比较器assign c = (a=b)?1b1:1b0;always(*)if(a=b)c=1b1;elsec=1b0;5:选择器assign c = (a=b)?d:e;always(*)if(a=b)c=d;elsec=e;6:译码器always(*)case(a)2b0;c=4b0001;2b1;c=4b0010;2b2;c=4b0010;2b3;c=4b1000;endcase7:编码器always(*)case(a)4b0001 :c=2d0;4b0010 :c=2d1;4b0010 :c=2d2;4b1000; c=2d3;endcase8:加法器assign c= a+b;时序逻辑D触发器alway(posedge clk or negedge rst_n)beginif(rst_n=1b0)q=1b0;elseq =d;end描 述完成上面的这些,我基本上可以用上面这些标准的电路和语言描述出90%的数字电路了,先从最简单的计数器开始吧,计数器在常见不过,我们先写一个模10 的计数器,省去模块端口定义和信号定位,以下就是核心代码了,为了让LZ可以看清楚具体的电路,可能刚刚看着代码LZ可能会有些难懂,不过没有关系,要学 会硬件的思维这个是必经之路我 们可以看到一个简单的模10计数器实际上是由4部分组成,一个比较器,一个加法器,一个选择器,和4个D触发器,所以一个计数器实际上是由上面最初介绍的 那几个基本单元组成,我打开了FPGA神器quartus,综合一些,改正了若干的语法错误,然后最终的综合的RTL电路如下电 路和代码配合的实在是太好了 代码描述了4部分的电路,而电路也表现出来了4部分的电路,我们可以看到 ADDER 加法器,LESS_THAN 比较器,MUX21 选择器 最后一个D触发器,这就是硬件思维,硬件思维就是认为所有的数字电路都是由基本的组合逻辑和时序逻辑的组件组合而成,写出来的代码都有对应的最小的电路组 件来对应,既然代码都写出来代码,那我们就来看看时序图,来验证一下 时序逻辑的输入和输出总是延迟一个时钟周期,组合逻辑的输入和输出在同一个时钟周期,开始搭建testbench,此处省略一万字,熟悉的波形终于出来了可能上面那个也周期内的图不一定看的清,就看第二幅图吧,我们可以看到在这 3行代码是同时执行的,是串行的,在cnt_cnr =d9的那一个时钟周期就执行完成,和C语言的执行方式其实是一样的,但是cnt_cur 的赋值就可以看到虽然是把cnt_nxt 赋值给cnt_cur,但是由于是时序逻辑所以总是要延迟一个时钟周期,好一个最简单的模10计数器就介绍完了,但是是不是所有的计数器都要写的这么复杂 能,不是,还有两种基本的写法,一种写法就是如下,把所有的组合逻辑都写在了一起,还有这种最最常见的写法就是不区分组合逻辑和时序逻辑,所有的都写在一个always块里面,就当成时序逻辑来写,这个只不上是上面两种电路的一种抽象一点的写法,但是基本的组合逻辑和时序逻辑都还是一样不信看看rtl 和上面的一模一样一 个基本的电路都是由基本的组合逻辑电路和D触发器组成,如果不能用着两个来组成,那你可能是弄错了,比方说有新手经常写一个延时电路,能用# 10么,#10可以是由选择器,还是与或非或者是D触发器来组成么,综合器能理解么,明显不行,所以在自己写一个代码的时候一定要想想他最后的电路是什 么,谈完了计数器,这个最最常用的电路,谈完了这个我想在谈谈verilog,对于verilog我的建议是,遇到组合逻辑用阻塞赋值,遇到时序逻辑用非 阻塞赋值,基本的语法就那么几条,always assign if else case ?: = = = | | !这个几个搞定了,应该所有的电路都可以描述了,其他的什么就不用去理会了,你写RTL是用不着的,乱用反而会用错,什么while , iniTIal ,这些都是仿真用的,写rtl根本用不到,至于如何上手比较快些,FPGA开发的流程无非就是 ,方案,代码,仿真,后端约束,上板验证,找一个项目吧这个流程都走一我相信上手起来应该不难比如说开发一个简单的UART,这个最常见的模块,或者一个 dds,或者sdram控制器,首先把方案做出来,就是把基本的电路和实现方法画到草稿上面或者电脑上面,考虑多方面,可靠性,可实现性,资源,能不能跑 到要的时钟频率,等等,接口的信号有哪些,时序是什么样子的,内部怎么控制,用状态机还是计数器,状态机的状态转移图是什么样,有哪些状态,状态迁移的条 件有哪些,会不会跑非,等等

    注意事项

    本文(初学FPGA, 怎么从硬件上理解?.doc)为本站会员(白大夫)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开