FPGA学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
版权和解释权归十万个为什么为什么所有
有错和补充欢迎指正和添加
笔试面试篇
1、同步异步
#设计首先走全局时钟网络,只有一个时钟是最好的
#当需要多个时钟的时候用PLL生出时钟,PLL是FPGA里面的硬核,在Altera的SDC(约束文件)里面会有如下语句,可以用工具生成。
create_clock -name "clk_100m" -period 10.000ns [get_ports {clk_in_100mhz}]
create_clock -name "clkout" -period 10.000ns [get_ports {clkout}]
# Automatically constrain PLL and other generated clocks
这句是工具自动给你设置产生于哪个时钟,很有用,自己写的话麻烦
derive_pll_clocks -create_base_clocks
以上用一个时钟或者一个时钟派生出的具有因果关系的为同步逻辑
异步逻辑就是没有固定因果关系
2、异步的优缺点
#优点是及时反映,虽然设计原则的尽量遵循同步,但是现在很多研究异步,发论文可以考虑研究。
#缺点是不稳定,亚稳态是设计中需要避开的,不然亚稳态会传播到下面的逻辑下面下面的逻辑,从而毁掉电路
#但是异步是不可避免的,两个时钟不同的地方称之为跨时钟域
3、亚稳态
B的时钟刚好采到A时钟的边沿或者不满足建立时间
#FPGA设计中一般都是不满足建立时间
#解决方法,我说一个比较常用的“双跳技术”,注意此方法只能消除亚稳态使他为固定的0或者1,但是0或者1是不确定的。
4、跨时钟域处理方法
#单根信号一般是多打一拍
;快到慢用信号展宽,比较简单的展宽方法是A时钟再延迟一个周期与原来的A时钟相或。可能会出现冒险。再用A时钟打一拍可消除。
其他情况不讨论了
#多根信号
;可以合并成单根
;握手,以问答的方式,看准备好没有
;异步fifo,很重要,网上很多写法,我传个以前在有本书上抄的简单程序叫afifo.v
异步fifo,FPGA有IP可以直接用,就算自己设计一般也不用自己写这种太小的ram,ram 也要用IP。这个用IP可以节约资源,RAM的资源和FPGA逻辑的不一样不用白不用。
5、竞争和冒险
信号经过不同路线到达一个门的输入时间不一样叫竞争
产生毛刺叫冒险
解决方法:添加布尔式的消去相,这是什么鬼不懂;在芯片外加电容
6、Tco、Tsetup、Thold
这个自己看看记记算算,传了个时序篇的文档。网上的都差不多自己算算就行了,哦我有两个Altera两个xilinx的开发板光盘资料,慢慢放进置顶帖的网盘
7、时钟抖动与偏斜
抖动是两边都可能偏差,而且偏差在一个范围变化,取决于时钟源如晶振的质量,保持时间也加这个,建立时间也加
偏斜是一个时钟到达两个寄存器因为路径原因有时差造成的,一边偏而且固定值
同步系统最怕时钟偏斜
其他记忆性的东西问概念的就不写了,写代码的都不难和我们学校EDA课差不多,以前开贴讨论过就不写了
培训和学校实验学习篇
怎么用各种工具
具体工程中要注意什么
分析设计流程着手写代码
工具不在多在得心应手,感慨一下做IC学的工具太多,还难用
1、QII或者ISE用一样,建个流水灯,走个流程下来,下载到FPGA上
2、Modelsim各种库的添加,仿真;还可以和EDA工具联合起来直接仿真
3、在线逻辑分析仪(用FPGA资源搭建了一个真正的工具),界面看着和modelsim差不多但是这个实实在在上了板子抓取信号都是真实的
工程注意事项
1、规范的代码,取名字怎么取,Verilog语法那么简单,硬件描述语言,描述是关键字。要读得懂,别人也要认识。以前别人怎么取你就怎么取,看看Altera或者xilinx官网一些工程源码就知道怎么做了。
2、时序约束这些是必须的
3、STA静态时序分析是必须的流程,看看最坏路径,看看过不过
4、仿真是需要的,流程化,大型工程需要这些没办法
5、文件夹怎么分怎么放代码仿真代码参考文件,一次学好终身受益
6、怎么产生IP怎么用,用EDA自带SOC工具叫什么QYS类似的分析
具体设计流程
1、先查资料有方案,协议用哪些资源(方案设计最难,脑子糊里糊涂就难做出来)
2、方案具体就是到
分成哪些模块,确保每个小模块你会写,比如说计数器、fifo、状态机
每个模块有哪些输入输出接口
模块间输入输出接口互联
3、然后开写,接口input、output会了,名字取好了。小模块或者IP写好了,然后例化连接就是,然后在整个工程慢慢修改,加啊删啊改啊
4、测试程序,分析要仿真哪些信号,写testbench,可以多个。这里有一些方法,要观察数据规律。就不具体,自己也搓。
平时学习(平时只能做到这些了,自学苦逼)
1、买个开发板实验挨个挨个试一遍
2、写小模块从门电路到异步fifo,加仿真,夏文宇或者随便一本教程都有
3、在那个网上找视频看看,最好是官网的
代码本来还准备传一下,发现名字取得不忍直视,有没注释自己都不爱看
实验室搬砖搬不动篇
写百兆以太网接口,现在都还没写出来
下面方法根本不适合没有上面基础的
1、知网同方学校图书馆下论文找相关书籍,了解参考,分析用到了些什么东西
2、源码参考,在IPCORE网上,度娘这些地方找。最好的是在FPGA官网上找,有用户手册有视频,有各种代码。所以说会英语是多么重要
3、大致方案,用哪家,用什么大的协议
4、如果是FPGA的话,真的能用IP用IP,先实现这个东西,可测试
5、有其他需求,自己写把IP换过来
强烈推荐知网和官网,只有这个两个不是高大上的设计都够了