advanced fpga design
基础概念
------------------------------------------------------------------------------------------------------------------------
speed取决于三个因素:吞吐率(每个cycle可以处理的数据量),延迟(数据从输入到输出的cycle数),时序信息(时序器件的延时)时序收敛的(每个cycle的时间)。
- 高吞吐率的结构: pipeline,类似于汽车制造装配线线。very-high performance devices, 比如:CPU指令集,网络协议栈,编码引擎。
迭代展开(流水线展开)是一种好方法,以面积为代价提高吞吐率。
- 低延时结构:打断流水线,增加了关键路径的延时。
- 改善时序:1)加一级寄存器,但是这样会增加 latency,多了一个cycle的延时可能功能就不同了;2)并行结构(不太懂);3)逻辑打平(删除优先级编码);4)寄存器平衡(前后级寄存器间共同分担延时);5)路径重排; ----主要掌握1,3,其他的综合工具会做。
architecting aera
- 用流水线迭代
- 复杂的控制逻辑来达到逻辑复用的目的
- 高层次模块共享
- 在FPGA中:由于有很多现成的资源,比如BRAM,DSP。不恰当的复位使用可能会导致不能使用这些现成的单元而用其他的逻辑来实现,耗费大量面积。因此当面积是一个重要影响因素时,谨慎使用复位尤其是异步复位。
Power
- 时钟门控
- 减少输入的翻转次数
- 降低电压
- 降低频率的同时双沿触发(需要有这种资源)
clock domains
- phase control - use PLL or DLL 让内部时钟和外部时钟建立关系
- 用2个FF来同步,但是仅适用于1bit的信号同步
- asynchronous FIFO - Gray Code
- FPGA中避免适用门控时钟,如果必须使用,那么把所有的门控始终放到同一个模块内 (`ifdef `else `endif)
math functions
- 硬件除法器开始引出问题 1)转化为先乘后除2)迭代,相当于除法公式3)GoldSchmidt 方法
- 泰勒展开和麦克劳林展开(处理复杂的函数,sin,ln,ex)
- cordic专门计算sin,cos
reset circuits
- 异步复位,同步释放
- 不同的复位类型不要写在一个always块里面
- 需要内部信号产生异步复位电路要注意,因为组合电路会有冒险,产生非预期的复位信号(看卡诺图)
- 多时钟域的情况需要多个复位同步器
一些实用的例子,这些例子安排在各章,分别是对前面各章的一个总结和应用
------------------------------------------------------------------------------------------------------------------------
- chapter4 AES, 说明了各种流水线结构,讨论了性能(吞吐量,延时,时序)和面积的折中问题
- chapter7 I2S和DIF,说明了高层架构设计问题,以及多时钟域问题通信。
- chapter9 浮点数运算单元
- chapter13 安全散列算法,
------------------------------------------------------------------------------------------------------------------------
advanced simulation
- 层次化的验证平台
- automatic, self-check
- testcase相互不要联系,隔开来
- 使用MATLAB来产生激励和校验信息
- code-coverage
- 门级仿真来估计动态功耗
- Timescale precision must be chosen to balance simulation accuracy against run-time (simmulation time / run time )
coding for synthesis
- verilog 中的case 是有优先级的, parallel_case/full_case只是综合指令,可能会导致综合前后的电路不一样
- 数据通路部分和控制结构要分开来设计(因为数据通路部分通常是关键路径,并且面积较大)
- 层次结构清晰,接口明确
- 参数化设计,传递参数
- `ifdef FPGA 宏定义