FPGA学习笔记

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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换过来

强烈推荐知网和官网,只有这个两个不是高大上的设计都够了

相关文档
最新文档