tag 标签: altera

相关博文
  • 热度 2
    2024-10-29 10:34
    145 次阅读|
    0 个评论
    当前使用的QPP版本为23.4,工程在经过多次编译后,发现工程文件夹变得逐渐宏大,几天的时间,发现整个工程大小超过了2G字节。和以前老版本一样,工程建立后经过编译都会生成几个文件夹,其中有个文件夹用来存储数据库,之前版本产生的文件夹名称为”DB“。而最新的QPP会有一个名为DNI的文件夹来替换DB文件夹,存储数据库。 每次编译后,经过仔细研究,发现工程目录变大的根本原因就是DNI会逐渐变大。在Intel的论坛咨询,给出的回复是这是QPP23.3与23.4一个已知的问题,目前无法解决,可能会在未来版本中解决。当前可以通过定期手动方式删除DNI目录下的Sandbox文件夹。 查看DNI文件夹,发现果然在DNI下还有几个文件夹,而大部分容量大小都产生与整个Sandbox文件夹。 下述链接给出了该问题的答案。 https://www.intel.com/content/www/us/en/support/programmable/articles/000098118.html 手动删除,也可以通过TCL脚本来实现,创建一个TCL脚本文件,将下述命令放置在脚本文件中,用实际工程名替换”project_name“ project_open dni::delete_stale_sandboxes project_close 需要清除的时候,执行上述脚本。可以直接在命令行中通过命令“quartus_sh -t ”,或者在Quartus软件中TCL控制台执行此文件。
  • 热度 1
    2024-10-14 14:10
    382 次阅读|
    0 个评论
    概述 Altera被Intel收购后,开发软件改名叫“Quartus Prime”,且分两个分支,一个叫Standard(即标准版),另一个叫Pro(即专业版)。官网下载基于Cyclone 10 GX的PCIe参考设计,需要使用专业版,这些参考设计和资料如图1所示。 图1:从官网下载到的资料与参考设计 依据提示,双击图1中的.par文件,Quartus就会启动并打开该项目,如图2所示。不过问题是双击后自动启动的Quartus的是当前电脑中安装的标准版。标准版不支持10代GX器件,所以这样打开是行不通的 。 图2:根据提示“双击”.par文件自动打开,但是启动的却是Quartus Prime Standard版本 注:为何双击自动启动标准版,可能是因为标准版先安装,专业版后安装。暂时未找到办法解决这个问题。 尝试第二种方式 如图3所示,在Intel官方网站下载AVST参考设计的页面介绍说还可以通过第二种方法来打开.par文件。 图3:官网提供第二种打开方式介绍 图4:创建新工程界面 如图4所示,启动Quartus Prime Pro 23.4软件后,从File菜单里找到并执行“New Project Wizard…”菜单命令,即可打开图4所示的界面。由于官方网站的介绍的是基于之前Quartus 16.0版本,所以可以看出图3和图4界面差异。图4中的“Empty Project”是用户正常创建新工程的选项,本操作是打开已下载的参考设计,所以选择图4中下方的“Design Example”,如图5所示,选择或直接指定项目工作目录后点击“Next”按钮进入下一步。 图5:选择“Design Example”选项并指定工作目录 进入下一步后,发现默认情况下由于软件库路径应该是指向Quartus的安装目录,所以此时是发现不了已经下载好的参考设计的,而且如图6所示,器件“Family”选项里只有Agilex,Arria 10,和Stratix 10这3种选择,并无Cyclone 10 GX。这一页面可以不管,只是需要在选择器件家族后,在图6下方红框中列出的开发板中任意指定一块,具体做法就是鼠标单击高亮选择即可。 进入下一页面后,如图7所示,这是查找并选择一个已被验证过的参考设计,共有4组选项,提供了4组下拉框,如下所示,进入下一步之前,都需要为参考设计进行明确指定这四个选项。 Load from,即参考设计来自何处 Family,器件家族 Intel Quartus Prime version,Quartus的版本 Development kit,开发板 单击“More Settings…”按钮,打开更多设置选项界面,如图8所示。在这里用户可以添加已经下载好的参考设计存放的路径,让该路径成为Quartus搜索参考设计的路径。添加成功后,点击“OK”退出更多设置选项界面,回到图7界面,此时发现器件家族下拉框中自动识别出了Cyclone 10 GX,如图9所示。此时如果直接点击“Next”按钮,无法进入下一步,如图10所示,会弹出禁止消息窗口,即要求用户将上述四个选项进行明确设定。 图6:指定对应的目标器件后,并指定一块开发板块再点击“Next”按钮进入下一页面 图7:打开更多设置选项,添加参考设计搜索路径 图8:更多设置选项界面,添加参考设计存放目录为搜索路径 图9:指定参考设计存放目录并退出选项设置界面后,器件家族里自动识别到了Cyclone 10 GX 图10:四个选项未明确设定前无法进入下一步 图11:四个选项明确设定并选择合适的设计模板后,可以单击“Next”按钮进入下一步 如图11所示,四个选项相当于选择过滤器,每一个选择进行明确指定后,都将影响其它选项。比如,如10中,“Load from”选项同时包含了“预先安装”和“用户下载”,所以在开发板下拉框中,就可以看到更多的可选开发板。而图11给其明确为用户下载,所以开发板下拉框此时就只有Cyclone 10 GX的开发板。 按照图11的设定后,选择第一个设计模板,即AVST参考设计,单击“Next”按钮进入下一步,然后点击“Finish”按钮完成该参考设计的加载。 更简单的打开方式 在概述中介绍了双击.par文件无法正确打开AVST参考设计,而上一节介绍的方法虽然可以打开参考设计,却也显得繁琐。 于是依据上述“双击.par”即可打开参考设计的描述,先启动Quartus Prime Pro 23.4,然后在File菜单里直接使用“Open Example Project”命令,具体过程和上述一样。 此外还可以使用“Open Project”命令直接打开设计模板,如图12所示,之前遇到的问题都是被陌生的.par文件以及电脑安装的多版本Quartus混淆而至。 图12:使用Open Project命令直接打开设计模板(参考设计) 注:.par文件不是.qar文件,即.par文件不是象.qar文件那样来自命令Archive Project,所以无法使用Restore Archived Poject命令来解压打开。
  • 热度 4
    2024-7-14 12:25
    906 次阅读|
    0 个评论
    概述 SiPM测试系统的信号处理板使用了ADI的单片4通道的高速差分ADC信号,所以FPGA需要通过LVDS接口来收取差分高速ADC送出的差分串行数据。 本文讨论FPGA如何例化LVDS模块,以及几种用来收取外部ADC采样后送来的高速差分串行数据。 10代器件LVDS实例化界面 在Intel的10代器件中有Arria、Cyclone、MAX以及Stratix几种,我们使用的是Cyclone系列10代GX产品。 图1:LVDS模块例化界面 如图1所示为LVDS例化界面,具体使用方法可以参考1“LVDS SERDES Intel FPGA IP User Guide”。这里给出LVDS SERDES通道结构框图,如图2所示。图2下半部分展示的RX通道是本文着重要关注的部分。 图2:Cyclone 10 GX系列器件LVDS Serdes通道结构框图 高速差分ADC数据引入FPGA的方法 高速差分ADC采样后串行数据、时钟以及帧同步总线接入FPGA的方法大致分为以下几种,不同的方法使用的场合有些微差别。 方法一:每个ADC单独将DCO和FRAME接入FPGA,此时不需要RX PLL,DCO必须使用专用时钟引脚。 方法二:每个ADC的FRAME接入FPGA,FRAME必须接专用时钟引脚,使用PLL通过FRAME在内部产生串行高速时钟。 方法三:如果预期到每个ADC之间布线延时差异足够小,此时所有ADC芯片可以使用同一组DCO和FRAME。 方法四:如果无法预估各ADC之间延时差异,又不想使用方法一和方法二,此时可以使用软CDR在初始阶段生成训练码。需要将ADC的SPI接口连接到FPGA。 根据不同的使用场景,又存在下述几种划分: 场景1:类似上述方法一 举个最简单的例子,当FPGA仅处理一个ADC时,FPGA单个bank就可以处理,ADC的所有必要和非必要的信号都可以连接到FPGA。如此,就可以确保安全可靠地接收ADC的采样数据。 此场景的其它例子,比如FPGA需要处理多个ADC的时候,此时可能分为不同情况,属于本场景的情况是FPGA有足够的bank来处理所有ADC,即每个BANK仅处理一个ADC。此时可以按照单个ADC的方法处理。单个bank如果LVDS端口足够,也可以处理多个ADC,但是单个bank仅接一路DCO到时钟引脚。 场景2:多个ADC需要处理,LVDS端口不足 此时为了省略出足够的LVDS端口给串行数据,可以多个ADC共享同一个DCO时钟,此时也省时钟引脚与PLL,有时候可能是时钟引脚或内部PLL不够。 场景3:多个ADC需要处理,时钟引脚不足 此时FPGA没有足够的时钟引脚接收来自ADC的DCO或FRAME,此时可以将DCO接入到普通的LVDS差分对端口,用本地时钟作为LVDS参考时钟,DCO当普通数据,然后根据DCO跳变去取ADC数据。 场景4:多个ADC需要处理,时钟引脚不足的同时,LVDS端口也不足 此时,DCO完全可以连接到FPGA,当异步处理,通过过采样,本地恢复DCO。 以上四种使用场景,风险从场景1到场景4依次递增。 参考 LVDS SERDES Intel FPGA IP User Guide: Intel Arria 10 and Intel Cyclone 10 Devvices.
  • 热度 2
    2024-7-7 13:28
    652 次阅读|
    0 个评论
    概述 我们知道了ALTERA器件的IOE里有DDR寄存器,而且ALTERA提供了DDIO模块供用户可以自动利用这些DDR寄存器。之前我们也探讨了不使用LVDS模块设计高速串行ADC接口原因,本文我们来具体讨论下使用IOE的DDR寄存器设计高速串行ADC接口。 近期有项目需要串行ADC,比如AD9633,替换前期使用并行ADC,比如AD9218. 如果使用ALTEAR的FPGA,可以直接使用厂家提高的LVDS模块来接收ADC的LVDS输出。由于FPGA本身的限制,以及某些需要众多ADC同道应用场合,FPGA无法胜任如此场合,如此才无法直接使用LVDS模块,可以使用迂回方式,即DDIO+移位寄存器来接收高速串行ADC的输出。 DDIO加移位寄存器架构 这里不再介绍什么是DDIO和移位寄存器(shift register),大家可以在ALTERA的开发集成环境Quartus II里找到这两个MegaFunction。 我们知道所谓的高速串行ADC一般包含多个通道,而且符合标准的LVDS接口要求,所以可以直接连接到FPGA的LVDS接口上。一般我们直接在FPGA内实例化LVDS模块来接收ADC的采样数据即可,这在ADC分辨率不高于10bit以及ADC的通道数不多的情况下是非常常见的设计思路。但是基于之前我们分析的原因,我们需要在FPGA内部利用DDIO加shift register来设计该接口,如图1所示。 图1:DDIO加移位寄存器构成的LVDS接收接口设计 如图1所示,这种架构,每个通道需要一个DDIO加两个shift register函数以及PLL来产生快速时钟和慢速时钟(图1所示是一个8bit例子)。我们知道LTM9010当采样频率在100MHz@14bit时,其转换数字输出数据率是1400Mbps,如果采用2-Lane工作模式,那么图1所示的“datain”的速率是700Mbps,那么PLL产生的快速时钟只需350MHz即可,这在现在流行的FPGA中是可以很轻易达成的。 实例分析 这里只是针对DDIO-in的例子来研究ADC输入接口的实现,根据图1,我们来看看一个非常简单8-bit分辨率ADC的接口实现。 根据前面分析,我们知道DDR输入寄存器接收数据并将数据分离成奇数位和偶数位。那么如图1中的数据位0、2、4和6被连接到一个移位寄存器,而数据位1、3、5和7被连接到另一个移位寄存器。这两个移位寄存器就是所谓的软SerDes,用于解串数据。我们还需要一个寄存器将移位寄存器输出的并行数据同步驱动到下一级逻辑。如图2所示,包括了实现LVDS串行接收buffer所有必需的模块。 图2:完整的LVDS接收器模块 图3:具体实现 分析及结论 探讨了FPGA内部利用DDIO加移位寄存器架构设计高速串行ADC接口的可能性,最后通过一个实例进行具体分析。 这里我们需要考虑一个问题就是我们前面提到了,我们之所以采用这种方案,是因为ADC的通道数众多,所以需要考虑众多ADC通道之间是否需要同步以及各个ADC通道处理的时候高速时钟和低速时钟是否可以共享的问题。 参考 Arria II GX Device Handbook AN 167 ALTDDIO Megafunction User Guide
  • 热度 5
    2024-5-12 09:19
    589 次阅读|
    0 个评论
    ALTERA Cyclone 10器件的使用-4:模块复用及当前使用所遇到的问题 概述 之前学习了基于Arria10的模块复用教程,并依据该教程在基于Cyclone10GX的测试板上将之前的项目更改为单核模块,并进行了导出和导入操作。通过上述过程,模块复用得到验证,可以应用于我们的项目。本文记录在此过程中遇到的一些问题,作为最近一段时间设计于测试的总结。 设计输入 一直以来笔者习惯于ALTERA的原理图输入方式,至少在顶层均采用模块输入,这样有利于本人对应整个工程的掌控。自从转入Quartus Prime Pro以后,发现QPP无法进行原理图的操作,但是还是可以对以前的原理图文件进行识别,而且能够对其进行编译。 再次之前我们的QPP版本升级到22.4,不过团队中合作伙伴在开发Cyclone10GX使用其PLL于Tranceiver模块的时候遇到问题,在升级到23.4的时候,问题解决,所以团队中不同的人使用了不同的版本。这次在使用模块复用功能后,通过之前发布的教程我们知道,双方需要统一器件、统一Quartus软件版本,否则无法完成QDB文件的导入。 而在升级到QPP23.4后发现Intel进一步对原理图使用进行了限制,这个版本是彻底限死的原理图,因为QPP23.4根本不支持识别原理图,Quartus在编译的时候,如果发现原理图,都会出现如图1所示的错误。 图1:Quartus编译遇到原理图输入时给出的错误提示 QDB文件导出问题 笔者作为单核开发者,之前使用QPP22.4的时候,导出QDB文件时可以选择导出综合后网表文件,也可以选择导出最终网表文件。更新到QPP23.4后,发现选择导出综合后网表时会导致Quartus软件莫名其妙停止操作,并弹出图2所示的错误提示窗口。 图2:QPP23.4导出综合后网表文件时遇到的问题 JTAG识别Cyclone 10GX器件问题 首先一个问题(之前有博文介绍此问题)是JTAG下载电缆(USB Blaster与USB Blaster II)都有此问题,即电缆无法识别JTAG链路,原因是C10GX的JTAG电压(VCCPGM)为1.8V,而手上老旧下载电缆最低支持的I/O电压是3.3V。从市场上购买支持低压的下载电缆后,解决此问题。(需要注意的是,所谓支持的低压,最好是低至1.5V。因为买的两种号称支持到1.8V也无法解决问题,我们分析是由于板子的1.8V实际量出来的是1.78V左右。) 图3:支持低压JTAG口下载电缆 2.解决问题1后,JTAG自动探测的时候偶发识别C10GX器件为UNKNOWN(如图4所示),此时似乎能下载程序,但是无法进行SignalTap调试。 图4:遇到探测到UNKNOWN器件问题 经过排查,上述UNKNOWN事件,一种情况是使用了电脑上低版本Quartus的下载软件,另一种情况是电脑里的JTAGSever指定的可执行路径为低版本,图5为正确的JTAGSever可执行路径指定,即指定为QPP23.4版本。 图5:电脑中有多版本Quartus安装时,确认JTAG Sever可执行路径 延时线锁定问题 延时线与寄存器锁定在同一个ALM的时候,Fit中的Place出现下述错误,如图6所示。 图6:Quartus在place过程当中给出的错误信息 上述第一条错误信息,详列如下: Error( 170208 ): Cannot place 4 nodes into a single ALM Info( 170017 ): Cannot place nodes in a single ALM -- the ALM would be illegal because ALM pins can not be routed Info( 170072 ): List of 4 nodes in the ALM Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|mycarry_in|cout" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102 came from < none Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .mycarry|s" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102 came from < none Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .myffa|myff" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102; Sublocation: 4 came from User Location Constraints Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .myffb|myff" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102; Sublocation: 5 came from User Location Constraints 上述第二条错误信息,详列如下: Error( 170208 ): Cannot place 6 nodes into a single ALM Info( 170017 ): Cannot place nodes in a single ALM -- the ALM would be illegal because ALM pins can not be routed Info( 170072 ): List of 6 nodes in the ALM Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .mycarry|s" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102 came from < none Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .myffa|myff" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102; Sublocation: 7 came from User Location Constraints Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .myffb|myff" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102; Sublocation: 8 came from User Location Constraints Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .mycarry|s" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102 came from < none Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .myffa|myff" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102; Sublocation: 10 came from User Location Constraints Info( 170000 ): Node "u_SEP_2BLK_CORE|u_TDC_3Chs_Core|u1_tdc1ch_cc_dualregdualtdl|u_TDL_CC_DualReg_Topa|u_CarryChainDualRegInC10GX|gen .myffb|myff" Info( 170031 ): LE location constraint : Region lower - left corner: X25_Y102; Region upper - right corner: X25_Y102; Sublocation: 11 came from User Location Constraints 经过验证,出现上述锁定报错,是因为单延迟线使用了双寄存器阵列锁存,如果单寄存器阵列锁存就没问题。但是在建立这个工程之前,一个简单测试工程已经验证过了可以使用双寄存器阵列锁存延时线的TAP输出。为何现在出现上述错误信息呢? 经过回头查看原来工程,首先原来测试工程是QPP22.4版本建立,当前工程是QPP23.4,是否版本原因?经过分析,应该不是。随后在QPP22.4原始测试工程上做了一个简单测试,如下图所示,之前测试工程中将2选1选择器的选择型号固定为“低”,当前工程SEL端口是可控的,如图7右侧所示,修改测试工程如图7右侧所示,那么编译原测试工程后,会出现一样的报错问题。 图7:TDC输入HIT经过2选1的MUX模块 备注1:QDB导出问题解决方法 图2所示问题,笔者在Intel可编程论坛进行了提交,迅速得到了回应,如图8所示。根据他提供的方法,确实将此问题解决了。 图8:Intel论坛对QPP23.4导出综合网表QDB出现问题的解决方法 备注2:模块复用下逻辑约束转移 所谓逻辑约束,在这里特指TDL延迟线的物理位置约束。在项目设计时使用逻辑模块复用功能,那么设计者一侧施加的物理位置约束,是否能够同样导出并传递给使用者一侧呢?事实验证,这是可以的,如图9、图10所示。 图9:设计者一侧6通道TDL位置进行了约束 图10:在使用者一侧导入后,6通道TDL物理位置经过锁定后未发生变化
相关资源