FPGA原型验证

一、ASCI RTL代码转换成FPGA RTL

原则:
(1)stdcell进行替换(时钟、memeory)
通常:
保持原时钟树关系;
clk 相关stdcell操作,但都将时钟直接输出;
采用PLL的时钟采用Vivado 的MMCM替换;
mem采用fpga的ram或手写ram实现;
(2)如果有ddr采用vivado的ip进行替换,可以直接用phy & ctrl整体替换;
(3)系统的参考钟,可以采用fpga的差分时钟经过IBUF得到,采用全局时钟网络;
(4)PCIE模块,包括ctrl和phy两大部分,ctrl可调试 phy可采用vivado 的pcie phy替换;也可以采用fmc pcie phy子卡实物代替pcie phy,也就是将ctrl与phy交互的pipe接口接出去连接到子卡上,在通过子卡将传给ctrl的pipe数据输入;(1、ctrl的targt speed在fpga上测试时需要根据phy支持的速率进行限制固定;2、rc通过phy子板输出一个ep-rst给ctrl的perst_n;3、进行测试时,有时需要用i2c对phy先进行配置,将phy子板的参考钟切换成rc时钟,并配置对应的gen速率,寄存器,PCIE才能link工作
(5)pad可以不用关注,fpga可以自动识别pad;当外设连接采用的inout类型时,需要用iopad指定
(6)JATG接口用于调试,jtag接口没有tdi跟tdo交叉互接要求

二、宏定义无法识别(包含宏定义的模块无法加载)

通常synopsis的ip编译的顺序为define,文件,undef。但vivado fpga不能以此顺序进行编译,需要调整文件顺序。以下建议:
(1)不要在代码中进行宏定义,可能造成宏定义重复,宏值使用错误。将“模块化”宏定义写到一个文件中,添加此文件路径加入filelist,在模块所有文件最后添加undefine文件。宏定义仅会在define和undefine区间的文件进行有效。
(2)作用于整体的宏定义,单独在fpga vivado中进行定义。

三、pcie ph、ctrl、rc的连接(PCLK作为PHY输出的时钟)

关于phy的几个时钟:
(1)pipe_clk:phy的输出时钟,来自ctrl,很重要,跟速率有关,但进行FPGA调试时,根据FPGA原型替换的PHY和控制器的属性,确定能支持的速率
(2)ref_clk:phy与RC的参考钟,通常是同频同源(rc连差分时钟,phy连差分时钟的p端,通常为100m,可以变频,具体要查看PHY是否支持)
关于PHY的几个复位(根据使用的PHY决定)
(1)por_n:上电复位
RC与phy连接
(1)RC的RX连接PHY的TX,RC的TX连接PHY的RX(通常RC是多lane,根据需求连接PHY即可)
PHY与CTRL的连接
(1)时钟、复位
(2)pipe接口(参考以下链接文章)**

https://blog.csdn.net/zgg12345654321/article/details/133098104?spm=1001.2014.3001.5501

三、问题总结

(1)时序不过也可以正常下板子工作,仅限时序违例很小的情况
(2)如果约束不写input/output delay,就算时序通过,也可能下板子不通过
(3)综合可能对设计进行优化,影响设计功能(需要通过仿真综合网标或与后仿进行对比进行确认)
(4)时钟复位模块对fpga时序影响较大,在处理时需要格外注意,尤其同步复位释放,最好保持。
(5)fpga由于资源和约束的问题,无法保持原ASIC设计时钟关系,可能导致复位周期发生影响,需要在处理时注意,是否影响功能,合理处理。

四、vivado常用tcl

(1)添加文件夹:add_files -scan_for_includes {D:/vivado_prj/project/temp_prj/rtl/}
(2)添加文件:add_files -norecurse -scan_for_includes D:/vivado_prj/project/temp_prj/rtl/fifo.v
(3)添加约束文件: add_files -fileset constrs_1 -norecurse D:/vivado_prj/project/temp_prj/xdc/base.xdc
基本时序约束:
(1)创建时钟
(2)时钟属性约束
(3)管脚约束:管脚电压约束、管脚指定信号约束
其他约束,依据设计进行对应添加

五、关于时钟

IBUFG:即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。
IBUFGDS:是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。
BUFG:是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。
BUFGCE:是带有时钟使能端的全局缓冲。它有一个输入I、一个使能端CE和一个输出端O。只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。(clk_gating,通常clk gating直通即可,但某些ip或应用必须使用clk gating时,用此替换)
BUFGMUX:是全局时钟选择缓冲,它有I0和I1两个输入,一个控制端S,一个输出端O。当S为低电平时输出时钟为I0,反之为I1。需要指出的是BUFGMUX的应用十分灵活,I0和I1两个输入时钟甚至可以为异步关系。
BUFGP:相当于IBUG加上BUFG。

六、 FPGA 资源

Slice逻辑资源
Slice Logic Distribution
register寄存器
Memory存储器
DSP资源
IO和GT
Clocking时钟
Primitives原语
Black Boxes黑盒子
Instantiated NetLists实例化网络
硬核
DCP:网表+xdc
ECO:check_point

(1)IOB,Input output BLOCK,不同block的电压一要求一致,每个block有固定电压
(2)CLB = LUT相当于真值表(rom),N输入M输出 (实现组合逻辑)+ 数据选择链 + 寄存器(实现时序逻辑) + 进位链(实现加法);
(3)Block RAM(BRAM,可配置成rom、ram、fifo等存储模块)
(4)互连线资源(布线资源)
(5)底层内嵌功能单元(DCM/PLL/DLL/DSP等)
(6)内嵌专用硬核(pcie/GTX高速收发器)
(7)DSP

七、工具

做FPGA原型验证,不仅需要vivado软件(如果采用Xilinx软件的话),还需要 Synplify综合工具(第三方软件),综合时序效果更好,但版本有差异,版本越高,语法综合结果更符合预期(低版本对语法有争议的语句,可能出现优化错误情况,需要注意)。

reference:参考1http://xilinx.eetrend.com/d6-xilinx/article/2018-10/13736.html
参考2https://blog.csdn.net/weixin_30496431/article/details/97432160?utm_source=app&app_version=5.5.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
参考3https://zhuanlan.zhihu.com/p/106153830
参考4https://zhuanlan.zhihu.com/p/110043173
参考5https://blog.csdn.net/zhoutaopower/article/details/103523935 (fpga时钟)
参考6https://cloud.tencent.com/developer/article/1624688?from=article.detail.1146373 (fpga资源)
参考7—ug949https://docs.xilinx.com/v/u/2015.3-English/ug949-vivado-design-methodology

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值