FPGA知识点(不断增加......)

这篇具有很好参考价值的文章主要介绍了FPGA知识点(不断增加......)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.FIFO深度计算

1.1读写同时进行的FIFO

  对于读写同时进行的FIFO,有一个简便计算深度的公式:
  FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate) (其中Burst_length可以认为是连续两个cycle可以写入的数据量)
  如:同步fifo,100个cycle可以写入80个数据,10个cycle可以读出8个数据,fifo的深度为:160-160×1×(8/10) = 32

1.2fA > fB 读写之间没有空闲周期或延迟周期相同

  例题如下:
  写速率fA = 80MHz,读速率fB = 50MHz,突发长度Burst Length = 120,读写之间没有空闲周期,是连续读写一个突发长度。
  题解:
  写一个数据需要的时间 = 1 / 80MHz = 12.5ns,写一个突发需要的时间 = 120 * 12.5ns = 1500ns,读一个数据需要的时间 = 1 / 50MHz = 20ns,每1500ns,120个数据被写入FIFO,但读一个数据需要20ns的时间。可以计算出,1500ns内读出多少个数据,1500 / 20 = 75。剩下的没有读出,就存在FIFO中,则需要120 - 75 = 45。
  所以这种情况下,需要的FIFO最小深度为45。
  当然,如果在没有空闲周期或延迟周期相同的情况下,读速率大于等于写速率,那么FIFO的深度为1就行了。

1.3fA > fB读写都有不同的空闲周期(IDLE Cycles)例题如下:

  写速率fA = 80MHz,读速率fB = 50MHz,突发长度Burst Length = 120,两个连续写入之间的空闲周期为 = 1,两个连续读取之间的空闲周期为 = 3。
  题解:
  写一个数据需要的时间 = 2 * (1 / 80MHz) = 25ns,写一个突发需要的时间 = 120 * 25ns = 3000ns,读一个数据需要的时间 = 4 * (1 / 50MHz) = 80ns,每3000ns,120个数据被写入FIFO,但读一个数据需要80ns的时间。可以计算出,3000ns内读出多少个数据,3000 / 80 = 37.5。剩下的没有读出,就存在FIFO中,则需要120 - 37.5 = 82.5。
  所以这种情况下,需要的FIFO最小深度为83。
  另一种情况是读写使能百分比,与这种情况基本相同。比如写使能占空比为50%,可以理解为两个周期写一次数据,读使能同理。
  那么,对于在读写都有不同的空闲周期的情况下,读速率大于等于写速率,计算方法也是类似。可以按照这类方法一步一步计算即可。

1.4总结

  这些题目要注意突发长度,理解好突发长度后,直接套用计算步骤即可。

2.latch使用的逻辑门数量

  5个,分别是四个与非门,一个非门

3.时序帮助

  时钟速率主要影响的是建立时间 Setup Timing,保持时间 Hold Timing 主要和路径延迟有关,保持时间希望组合逻辑路径延迟越大越好,较高的工作电压会减少组合逻辑的延迟,所以希望对 Hold Timing 有帮助的是较低的工作电压,组合逻辑路径延迟更大一点

4.缩写简称

   STA :Static Timing Analysis ,静态时序分析
   DTA :Dynamic Timing Analysis ,动态时序分析
   ROM:Read Only Memory,只读存储器
   RAM:Random Access Memory,随机存取存储器
   SRAM:Static Random-Access Memory,静态随机存取存储器
   DRAM:Dynamic Random Access Memory,动态随机存储器
   SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器
   EEPROM:Electrically Erasable Programmable Read Only Memory,电可擦除可编程只读存储器
   DDR:Double Data Synchronous Dynamic Random Access Memory,双倍速率同步动态随机存储器
   FLASH: Flash Memory,闪存
   AMBA : Advanced Microcontroller Bus Architecture,高级微控制器总线体系结构
   AHB : Advanced High-performance Bus 高级高性能总线
   ASB : Advanced System Bus 高级系统总线
   APB : Advanced Peripheral Bus 高级外围总线

5.验证

  fork-join 是并行执行的,所以里面的延时就取决于最大的延时

6.不能在module中独立存在的语句块

  forever 通常是包含在 initial begin end 中,用来生成时钟,无法单独存在

7.STA和DTA的个人理解

  静态时序分析(STA):比如vivado的综合或者布线后的report timing summary,遍历电路存在的所有时序路径,根据给定工作条件(PVT)下的时序库.lib 文件计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足约束要求, 根据最大路径延时和最小路径延时找出违背时序约束的错误。
  动态时序分析(DTA):可以称作动态时序仿真,对RTL电路的功能性仿真,需要自己编写testbench进行测试。

8.FPGA开发流程

  系统规划
  RTL设计
  功能仿真
  综合、编译、布局布线
  时序仿真
  板级验证

9.setup time和hold time

  在时钟有效沿到来之前,数据必须维持一段时间保持不变,这段时间就是建立时间 Tsetup
  在时钟有效沿到来之后,数据必须维持一段时间保持不变,这段时间就是保持时间 Thold
  一些需要知道的名词定义
  1.走线延迟:数字逻辑电路中,任何输出信号到输入信号之间都有一定的线路延迟,把这种线路延迟叫做走线延迟。
  2.组合延迟Tcomb:当进行门电路逻辑运算时产生的延迟。——一般为最长的延迟路径
  3.寄存器延迟Tco:寄存器内部的延迟,或者说posedge上升沿到寄存器clk端到输出Q端的延迟。
  4.时钟延迟Tclk:时钟信号从时钟源端口出发,到源寄存器时钟端口的延迟。
  5.数据延迟Tdata:数据从源寄存器Q端到目的寄存器D端的时间。—— Tco + Tcmob
  6.Tskew : 时钟偏斜或说时钟偏移,是指时钟信号到达数字电路各部分所用时间的差异。
  7.Tjitter : 时钟抖动,是同一时钟的两个时钟周期之间的差值。
  8.Th:保持时间
  9.Tsu:建立时间。
  关于保持时间和建立时间的计算方法
  对于建立时间有:T(T为时钟周期) + Tskew = Tco + Tcmob + Tsu + A(A为建立时间容限>0)。所以有T + Tskew - Tco - Tcmob > Tsu。
  关于保持时间有:Tco + Tcmob = Th + Tskew + B(B为保持时间容限>0)。所以有Tco + Tcmob - Tskew > Th。
  关于时钟抖动和时钟偏移的解决方法
  减小时钟抖动的方法:
  受时钟自身的影响,不受布线的影响,因此通过控制系统温度变化、减少机械振动、减少电源、地等来减少,选用好的时钟源。
  减小时钟偏移的方法:
  时钟偏移是由于布线长度或者不同负载(组合逻辑)引起的,因此可使用低输出阻抗的时钟驱动,如果驱动能力不够可用同型号电源并联、采用树形结构、低阻抗时钟分布线、远程匹配多驱动来解决。——采用全局时钟
  补充:
  一般地,我们在进行分频操作的时候,采用PLL来完成,尽量避免对时钟进行逻辑操作,否则容易出现时钟偏移、抖动,甚至出现时钟毛刺的情况。

10.function 和 task

  function的定义如下

function <返回值的类型或范围>(函数名);
                <端口说明语句>
                <变量类型说明语句>
                beign
                <语句>
                end
endfunction

  function 定义时的注意事项:
    函数的定义不能包含有任何的时间控制语句,即任何用#、@、或wait来标识的语句。
    函数不能启动任务。
    定义函数时至少要有一个输入参量。
    在函数的定义中必须由一条赋值语句给函数中的一个变量赋以函数的结果值,该内部变量具有和函数名相同的名字。
    定义中声明的所有局部变量寄存器都是静态的,即function中的局部寄存器在function的多个调用直接保持它们的值
  function 调用:
    function 的调用可以出现在always以及assign语句中
  function 例子:

function integer clogb2;
    input integer depth;
        for (clogb2=0; depth>0; clogb2=clogb2+1)
            depth = depth >> 1;
endfunction

  task的定义如下

task <任务名>;
     <端口及数据类型声明语句>
     <变量声明>
     <语句1>
     <语句2>
     .....
     <语句n>
endtask

  task定义的注意事项:
    在第一行“task”语句中不能列出端口名列表。
    任务中可以有延时语句、敏感事件控制语句等事件控制语句。
    任务可以没有或可以有一个或多个输入、输出和双向端口。
    任务可以没有返回值,也可以通过输出端口或双向端口返回一个或多个返回值。
    任务可以调用其它的任务或函数,也可以调用该任务本身。
    任务定义结构内不允许出现过程块(initial或always过程块)。
    任务定义结构内可以出现disable终止语句,这条语句的执行将中断正在执行的任务。在任务被中断后,程序流程将返回到调用任务的地方继续向下执行。该语句不可综合。
  task的调用方式:
    <任务名>(端口1,端口2,…,端口n);

11.关于跨时钟域的一些题解

  对于多比特传输,异步fifo是一种解决方案
  对于由快时钟域到慢时钟域的脉冲传递,需要在快时钟域下检测单bit脉冲,然后做一个脉冲展宽,即当检测到单bit脉冲后,对寄存器x写1。然后再慢时钟下同步寄存器x的值,当慢时钟域下明确同步到寄存器x的值后,可以反馈给快时钟域,用于对寄存器x写0,表示一次传递完成。
  对于由慢时钟域到快时钟域的脉冲传递,可以使用两级触发器同步解决。
  对于电平信号,均可用两级触发器打拍来解决。

12.对于切换时钟的题解

  参见文章:设计一个Glitch Free的时钟切换电路

13.环形计数器的改进方法

  采用约翰逊计数器,可以利用更多的状态,即计数次数增加

14.异步复位同步释放的优点

  异步复位最大的问题是不管产生或撤销复位信号,都是一个异步过程,产生复位信号不存在问题,但是撤销时就出现了问题,如果异步复位在触发器时钟有效沿附近释放,触发器的输出就会进入亚稳态,因此导致SOC的复位状态丢失。因此,需要对复位信号进行两级触发器缓冲,有效消除亚稳态。
  具体代码如下:

module asyn_reset(
	clk	    ,
	rst_n	,
	rst_s2
);
input clk	;
input rst_n	;
output reg rst_s2;

reg rst_s1;
always @ (posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		rst_s1 <= 1'b0;
		rst_s2 <= 1'b0;
	end
	else begin
	   rst_s1 <= 1'b1	;
	   rst_s2 <= rst_s1	;
	end
end

endmodule

15.关于verilog设计中的低功耗

  低功耗的方法:
  1.对于时序逻辑下的寄存器,不加复位逻辑,只加有效值信号判断,这样可以省下复位电路的布线面积。
  2.手动插入时钟门控,在模块不会运作的时钟周期,加入控制信号,关掉时钟,减小动态消耗。
  3.休眠掉电。
  4.减少没有意义的高低电平切换,避免没有必要的动态消耗。

16.什么是亚稳态?

  输入信号在时钟有效沿的建立时间和保持时间之间变化,导致其不满足触发器建立保持时间的时序要求,使得输出有一段时间的不确定状态,这就是亚稳态。

17.格雷码与二进制码的互相转换

  假设二进制和格雷码各个位分别使用如下字符表示:
  n 位的二进制:Bn, Bn-1, Bn-2…B2, B1 , B0;
  n 位的格雷码:Gn, Gn-1, Gn-2…G2, G1, G0;
  则,转换公式为:2-g : Gn = Bn , Gi-1 = Bi ^ Bi-1 (i = 1 , 2 , … ,n) ; g-2 : Bn = Gn , Bi-1 = Gi ^ Bi-1 (i = 1 , 2 , … ,n) 。

18.竞争和冒险

  产生原因:竞争和冒险都是由于存在电路延迟引起的,同时冒险是由竞争造成的,而竞争是因为电路中的时延不同,但是有竞争的时候不一定会出现冒险。
  解决方法:1.增加冗余项 2.增加选通信号 3.增加滤波电容 4.采用可靠型编码

19.分布式RAM和Block RAM

  这里先介绍一下FPGA的基本组成:CLB(可配置逻辑块)、IOB、BRAM、完整的时钟管理模块、内嵌的底层功能单元和嵌入式专用硬核、丰富的布线资源。其中CLB由两个Slice组成,由于Slice有SliceL(Logic)和SliceM(Memory)之分,因此CLB可分为CLBLL和CLBLM两类。而SliceL和SliceM内部都包含4个6输入查找表(LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop)。那么,SliceM中的LUT资源就是分布式RAM的组成部分。
  下面介绍两者的主要区别
  Block RAM由一定数量固定大小的存储块构成的,使用Block RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。如Xilinx公司的结构中每个BRAM有36Kbit的容量,既可以作为一个36Kbit的存储器使用,也可以拆分为两个独立的18Kbit存储器使用。反过来相邻两个BRAM可以结合起来实现72Kbit存储器,而且不消耗额外的逻辑资源。
  分布式RAM的特点是可以实现BRAM不能实现的异步访问,不过使用分布式RAM实现大规模的存储器会占用大量的LUT,可用来实现逻辑的查找表就会减少。在查找表资源足够的情况下,利用查找表为电路实现存储器,既可以实现芯片内部存储,又能提高资源利用率。不过建议仅在需要小规模存储器时,使用这种分布式RAM。

20.时序约束的基本路径

  1.FPGA内部寄存器之间的时序路径,简称reg2reg;
  2.输入引脚到FPGA内部寄存器的时序路径,简称pin2reg;
  3.FPGA内部寄存器到输出引脚的时序路径,简称reg2pin;
  4.输入引脚到输出引脚之间的时序路径(不通过寄存器),简称pin2pin。

21.时序约束的基本步骤

  1.时钟约束(主时钟、虚拟时钟、衍生时钟);
  2.输入/输出接口约束(系统同步、源同步);
  3.时钟分组和跨时钟约束(异步);
  4.时序例外约束(多周期路径、虚假路径)。

22.突发传输与普通流水线传输有何区别

  表面上来看,没什么区别。理论上都是N+1个Cycle。但是这是针对一拍可以回数的紧耦合SRAM而言的,如果访问的是DDR呢?
  如果是突发传输,你只需要下发一次命令,DDR Controller可以帮你计算好,你总共需要读多少数据,比如每一拍是32Bit,突发长度是4,DDR控制器只要对DDR发一次命令即可,一次性读回128Bit的数据。如果是Single transfer,DDR Controller可不知道你下一笔传输的地址和这笔传输的地址只差了0x4,DDR Controller完全可能把你的第一次single transfer下发出去,然后又下发第二次,然后又下发第三次,然后…由于DDR的读取时序没有那么简单,不是完全的流水式的,因此这中间就可以阻塞很多个周期。所以!突发传输和流水线的Single transfer是不一样的!能用突发传输就用突发传输,不要用多次Single Transfer。

23.spi的相位和极性

  CPOL为1,第一个跳变沿为下降沿,CPOL为0 ,第一个跳变沿为上升沿。
  CPHA为1,取第二个跳变沿采样,CPHA为0,取第一个跳变沿采样。

24.低功耗设计的方法

  1.时钟门控。 2.电源关断技术。 3.Multi VDD(多电压域):根据不同模块的性能要求不同而采用不同的电源供电。4.Multi Vt(多阈值电压):使用多阙值工艺可以在时序和漏电流之间进行一些折中。5.状态机编码:格雷码,可以减少翻转的位数。文章来源地址https://www.toymoban.com/news/detail-537101.html

到了这里,关于FPGA知识点(不断增加......)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 平时积累的FPGA知识点(6)

    平时在FPGA群聊等积累的FPGA知识点,第六期: 原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes,用IP的话,IP会自带约束。 解释:如果是7系列FPGA就要约束,之后的就不用。 解释:上次闪退的时候破坏了run文件夹里的内容,把这个文件夹删除了之后就可以正常

    2024年02月20日
    浏览(32)
  • 平时积累的FPGA知识点(7)

    平时在FPGA群聊等积累的FPGA知识点,第七期: 解释:ug949 解释:无法单独指定IP的使用方式。 解释:是的,这一条命令对所有层次的子模块都起作用 解释:因为用report_high_fanout_net报告的net个数太少,把选项-max的值放大,同时添加选项fanout_greater_than 或者fanout_lesser_than 解释:

    2024年02月20日
    浏览(47)
  • FPGA学习笔记-知识点3-Verilog语法1

    按其功能可分为以下几类: 1) 算术运算符(+,-,×,/,%) 2) 赋值运算符(=,=) 3) 关系运算符(,,=,=) 4) 逻辑运算符(,||,!) 5) 条件运算符( ? :) 6) 位运算符(,|,^,,^) 7) 移位运算符(,) 8) 拼接运算符({ }) 9) 其它 按其所带操作数的个数运算符可分为三种: 1) 单目运算符(unary operator):可以带一个

    2024年02月06日
    浏览(45)
  • ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信

    目录 一:串口通信简介 二:三种常见的数据通信方式—RS232串口通信 2.1 实验任务 2.2 串口接收模块的设计 2.2.1 代码设计 2.3 串口发送模块的设计 2.3.1 代码设计 2.4 顶层模块编写 2.4.1 代码设计 2.4.2 仿真验证代码 2.4.3 仿真结果 2.4.4 板上验证        通信方式一般分为 串行

    2024年02月03日
    浏览(37)
  • 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等

    答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 答: 不要在计算属性中进行异步请求或者更改DOM 不要直接修改computed的值 区别: 计算属性值基于其响应式依赖被缓存,意思就是只要他之前的依赖不发生变化,那么调用他只会返回之前缓

    2024年02月11日
    浏览(39)
  • Android 开发必备知识点及面试题汇总(Android+Java+算法+性能优化+四大组件……),腾讯安卓开发面试

    5.请介绍下 AsyncTask的内部实现,适用的场景是 AsyncTask 内部也是 Handler 机制来完成的,只不过 Android 提供了执行框架来提供线程池来 执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务, 比如 HTTP 请求,大规模的下载和数据库的更改不

    2024年04月15日
    浏览(44)
  • 【字节面试】Fail-fast知识点相关知识点

    字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 什么是Fail-fast机制? Hashmap是否拥有Fail-fast机制? ConcurrentModificationException异常原因和解决方法是什么? 哪些你常

    2024年01月22日
    浏览(35)
  • 2023面试知识点一

    默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。老年代 ( Old ) = 2/3 的堆空间大小。其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 t

    2024年02月07日
    浏览(28)
  • vue面试知识点

    Unsplash class 和 style 使用动态属性,使用驼峰式写法 v-if 和 v-show v-if 不渲染不满足判断条件的模块, v-show 渲染但不显示,使用场景:是否多次切换或频繁更新条件状态 keep-alive 缓存组件,使用场景:频繁切换,不需要重复渲染 v-for 中添加唯一的 key 为了高效的更新虚拟 DOM,

    2024年02月11日
    浏览(35)
  • Java 面试知识点

    基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的 语法,集合的语法,io 的语法,虚拟机方面的语法。 和都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true,否

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包