ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FPGA调试利器:用Vivado Schematic视图定位从RTL到布线后的疑难问题

FPGA调试利器:用Vivado Schematic视图定位从RTL到布线后的疑难问题 做FPGA开发这几年我最大的感受是仿真跑通只是第一步真正让人头疼的是上板后的问题定位。那种仿真波形全对、时序报告也没大红叉但实际功能就是不对的情况相信每个工程师都遇到过。这时候回到电路结构本身去看问题往往比继续盯着波形更高效。Vivado的Schematic视图就是这样一个被很多人忽视的调试利器它在RTL分析、综合、布局布线不同阶段呈现的内容完全不同能帮你快速发现代码结构问题、资源推断异常、甚至物理实现层面的隐患。这篇博文就围绕2024.1版本讲讲我实际使用Schematic视图定位设计问题的方法和心得。1. Schematic视图在Vivado设计流程中的定位1.1 三个阶段三种“真相”Vivado的Schematic视图不是一个单一的窗口而是跟设计的处理阶段绑定在一起的。很多初学者以为Schematic就是看原理图点开看一遍觉得眼花缭乱就关掉了这是对它的误解。实际上Schematic视图在三个关键阶段呈现的是完全不同的抽象层级分别对应设计的“想法”、“逻辑结构”和“物理实现”。RTL分析阶段Elaborated DesignSchematic展示的是你写的Verilog/VHDL代码经过语法分析和初步展开后的寄存器传输级结构。这个阶段的视图最接近代码逻辑能清楚看到模块间的端口连接、信号位宽、寄存器排列。综合之后Synthesized DesignSchematic展示的是映射到Xilinx原语Primitive之后的结构。原先代码里的if-else、case分支变成了查找表LUT、触发器和进位链CARRY的组合这时候你能看到编译器是怎么理解你的代码的。布局布线之后的Implemented DesignSchematic叠加了物理信息能查看到逻辑单元在FPGA芯片上的实际分布位置、时钟网络的走线方式这对排查跨时钟域、时序收敛问题很有参考价值。三个阶段的视图侧重点不同但有共同的调试价值——它们都以图形化的方式暴露代码和网表之间的对应关系让你能从“电路结构”的角度审视设计而不是只盯着抽象的逻辑功能。1.2 为什么Schematic视图适合定位问题我们习惯用仿真波形验证功能用时序报告检查时序。但设计中很多问题是隐藏在这两者之间的比如端口位宽不匹配导致的意外截断、某个信号被综合器优化掉导致下游逻辑悬空、或者某个寄存器的复位方式与预期不同。这些问题在仿真波形里往往很难一眼发现因为仿真时会按照功能模型运转但到了实际硬件上被截断的位、被优化的路径、被改写的逻辑就会以各种奇怪的方式表现出现。Schematic视图的独特价值在于它用最直观的方式展示了代码“最终变成了什么”。当你发现某个信号连到了不该连的引脚或者某个逻辑被综合成奇怪的形态通常很快就能反向定位到代码中具体是哪一行的问题。我调试过很多次类似“仿真全对、上板抽风”的案例最后的突破口几乎都是在Schematic里发现的。Schematic视图适合以下这些场景代码结构审查确认综合器忠实还原了你的设计意图、信号连接排查跟踪一个信号从源头到负载的路径、资源推断检查确认BRAM/DSP被正确推断、预判时序问题观察逻辑级数、扇出情况。用好它能帮你在综合后阶段就提前规避一大批实现阶段的坑。2. 打开Schematic视图的几种方式与基础操作2.1 从Flow Navigator进入最常规的打开方式是从Vivado左侧的Flow Navigator面板点击对应阶段的“Open Elaborated Design / Open Synthesized Design / Open Implemented Design”。设计完成open之后顶部的Layout工具栏会切换选项选择需要显示的视图。在Flow Navigator里Open Elaborated Design这个动作会启动RTL分析。执行之后如果设计有语法错误Tcl Console里会直接报错如果一切正常Vivado会打开一个默认展示RTL Schematic的界面。这里有个小坑——如果你的代码里有工程路径带中文或者特殊字符开工的只是打开分析阶段就会报错所以工程路径尽量还是用纯英文。综合或实现后的打开方式基本类似但会比较吃内存和时间。十几万门级的小设计还好百万级以上的设计打开综合后的Schematic可能要等几十秒这时候不要反复点击Vivado容易失去响应。打开之后Schematic窗口不是死的支持缩放、平移、框选。配合键盘快捷键Ctrl滚轮可以快速缩放中键拖拽可以平移画布。双击任意单元会以该单元为中心放大显示内部结构这个交互非常适合逐层追踪信号路径。2.2 在Schematic窗口内查找与定位信号Schematic视图最常用的功能是查找信号。顶部有搜索栏输入信号名可以快速定位。不过实际工程中信号名往往带有各种层次前缀不太好记我更推荐在Schematic窗口里右键选择“Find in Schematic”弹出的搜索框支持通配符也可以指定搜索对象类型比如只想找Cell、Net、Pin还是Port。还有一个非常好用的操作在Schematic窗口中选中某个Cell、Net或者Pin之后右键选择“Go To Source”Vivado会自动跳转到RTL源文件中对应的声明位置。这个反向定位能力极为实用在电路级发现问题后立刻回到代码处修改调试效率直接翻倍。Schematic窗口里按住Ctrl键点击某个信号可以在多个相关连接之间快速跳转点击信号线本身会高亮显示这条网络连接到的所有引脚方便你看清楚信号的完整扇出范围。这个高亮功能在检查悬空端口和意外短接的时候特别好用。2.3 Schematic视图的窗口布局与显示设置默认Layout下Schematic视图通常和其他窗口如Hierarchy、Properties、Design Runs并排显示。屏幕不够大的话建议切换到“Default Layout”再加全屏或者干脆把Schematic窗口拖到独立显示器上操作。在Schematic窗口的工具栏里有几个显示设置图标很值得注意。合理调整显示选项能明显改善排查路径的体验。针对大设计为了减少视觉噪声也可以关掉一些底层细节显示。工具栏左侧是缩放和平移工具中间是选择模式切换右侧是显示选项那组图标在默认工具样式中它们比较靠右。这里面的图形复杂度和画布内容密度会直接影响软件渲染性能如果设计规模很大建议减少不必要的显示层级只保留关键元素显示。有一个容易被忽略的功能在Schematic窗口的“View”下拉菜单里可以勾选“Show Net Name”这样每条信号线上都会显示网络名。默认情况下是不显示网络名的大量信号线交织在一起时很难分辨开启Net Name后排查信号连接关系就会直观很多。3. RTL分析阶段第一道防线3.1 Elaborated Design视图下的关键检查项RTL分析阶段的Schematic即Elaborated Design是我个人认为最有价值的视图因为它反映的是“代码本身的结构”还没有被优化打散。这个阶段适合做三件事检查模块层次是否与设计意图一致、检查信号连接是否完整、检查位宽匹配是否合理。看模块层次很简单Schematic窗口 left 侧有Hierarchy窗格展开可以看到顶层下的所有子模块树形结构。如果发现某个子模块没有出现在层次树里说明它可能被优化掉了要么是没被例化要么是例化了但没有任何有效逻辑和外部相连综合器认为是“死代码”。信号连接检查通常针对模块级端口选中某个模块右键选择“Highlight Leaf Cells”可以高亮它的所有底层单元如果只是想看某个端口的连接情况点击该端口引脚再点击工具栏上的“Trace”按钮Vivado会高亮从该引脚出发的所有路径。结合Net Name显示排查断连和错误连接效率非常高。位宽匹配问题在RTL视图里也很容易暴露。比如一个模块输出8位信号但接收端只声明了4位在Schematic中虽然不会直接报红但连线的粗细和Port的标注会暗示位宽差异。更准确的方式是直接在Properties窗口中查看选中Net的Bus Width属性。养成在RTL分析阶段就检查位宽的习惯能省下很多定位截断问题的时间。3.2 利用“Net Marked”与颜色标注功能对于信号特别多的大型设计单纯靠人眼在Schematic里找信号还是会晕。Vivado提供了“Net Marked”功能可以帮助把焦点信号着色标记出来在复杂连接中快速追踪目标网络。操作比较直接先在Schematic里选中一条网络右键找到“Mark Net”选项选一种醒目的颜色比如红色。这样这条网络名会在所有相连的引脚旁显示为标记颜色整条走线也会被彩色高亮。在追踪一个跨越十几个模块的关键控制信号时这个功能真的能救命。我个人的习惯是怀疑哪个信号有问题就把它Mark成红色如果是差分信号对另一个标记为蓝色再把相关时钟标记为绿色。几种颜色一区分Schematic里的信号流向立刻变得清楚。排查完之后记得清除标记不然会干扰后续其他信号的追踪。3.3 常见RTL结构问题的Schematic表现输入悬空或端口未连接模块端口在Schematic中显示为悬空状态或者线缆是断头线。仿真时这些端口会被赋予高阻或不定值可能不影响功能但上板后悬空输入可能由内部上拉/下拉电阻决定电平进而导致不可预期的行为。组合逻辑环路Combinational LoopRTL阶段的Schematic能直接看到环路结构比如输出通过组合逻辑反馈回输入没有任何寄存器隔离。这种结构在上板后是定时炸弹时序报告里也会给出警告。在RTL视图里发现环路要立刻追溯代码逻辑给环路插入寄存器。信号被优化在Hierarchy中看不到期望的模块或者某个你确信存在的信号在Schematic里搜不到大概率是被优化掉了。原因通常是信号没有扇出到输出或者只通过常量逻辑连接。在RTL分析视图里可以通过右键“Report”查看优化原因。用RTL视图排查这三个问题相当于在综合前、甚至在布局布线前就把结构层面的雷排掉。等到了综合后视图再发现这些问题改代码后要重新跑综合周期会拉长很多。4. 综合后视图看透综合器的“翻译”逻辑4.1 从LUT/FF结构反推代码问题综合后的Schematic展示的是映射到FPGA基本单元的结果。你会看到大量LUT6、FDRE、MUXF7等Xilinx原语的组合。这时候再看代码已经没有直接的对应关系了板卡级模块层次被压扁甚至连寄存器都被重新命名。但正是这种“翻译后”的结构能让你发现代码里的隐藏问题。我曾经遇到过一个问题写了一个状态机仿真时从一个状态跳到另一个状态完全正常但在硬件上总会莫名卡在某一步。综合后Schematic一查发现状态寄存器旁边的组合逻辑形成了一条奇怪的反馈环路原因是在case分支里对某个输出信号做了反复的默认赋值综合器为了满足“所有分支都有赋值”写出了一条冗余逻辑环路。这种问题单看仿真波形基本不可能发现但在综合后的结构上一眼就能看穿。另一个常见问题是冗余逻辑。比如代码里写了一个8位的比较器但你只在某些条件下用到了高几位综合器可能生成一个8位的比较器然后在高位无用。综合后Schematic会显示出多出来的LUT资源排查到后需要回到代码优化条件判断逻辑减少不必要的设计复杂度。4.2 查看资源推断结果BRAM、DSP、移位寄存器FPGA设计中的一大类问题是资源推断不如预期。比如你希望在代码中实现一个DPRAM综合后发现资源报告里没看到BRAM而是用大量LUT搭了一个寄存器堆。这种情况从综合报告和Schematic里都能定位。综合后Schematic里BRAM原语通常是RAMB36或RAMB18DSP乘法器是DSP48E1快速加法器会用CARRY4链。如果设计中包含时钟域变换或FIFO你会在Schematic里看到专门的FIFO原语或状态机逻辑。如果你在Schematic里搜索RAMB或DSP关键字找不到的话说明推断失败。找到BRAM后双击进入内部结构可以查看端口连接是否正确。比如RAMB36的时钟端口、写使能端口是否连接到了预期的信号。这里有一个很隐蔽的问题多个BRAM可以级联成大容量RAM但它们共享时钟和使能信号。在Schematic中可以确认寄存器相关使能信号是否在预期区域。对于DSP推断DSP48E1的输入有A、B、C三个端口分别对应乘法器、加法器的数据输入和累加输入。Schematic里检查这些端口的位宽和连接来源能快速判断代码中的乘加表达式是否被正确抽取成了DSP单元。4.3 综合后视图标识引脚和约束的交叉验证综合后的Schematic不仅能看逻辑结构还能看I/O引脚映射。顶层的输入输出Port在Schematic中显示为IBUF/OBUF原语双击可以查看对应的约束位置。对于管脚分配错误的问题综合后视图就能提前发现很多。另外如果要检查综合是否完整覆盖了部分重配置或跨die的设计在综合后的Schematic里也需要留意SRL16E或FDPE这类特殊原语。这类原语的初始化值在上板后难以调试Schematic里检查初始值设置是一个有效手段。综合后视图的问题排查思路简单来说就是用“它变成了什么样子”反推“代码里哪里不对劲”。这种思维模式不太符合常规的软件调试习惯但FPGA开发恰恰是“想法-代码-电路-物理实现”的全链路工作中间每一层的转化都可能引入问题而你不在一层层的转化后去看就很难真正理解设计的实际行为。5. 布局布线后视图物理信息加持的终局视角5.1 检查时钟网络和全局时钟资源布局布线之后Schematic里的信息已经包含了真实的器件资源和物理位置。这个阶段最值得先在Schematic中查看的是时钟网络。打开Implemented Design后让视图切换到“Global Clock”显示模式Schematic会把时钟树画出来。从时钟树Schematic里能看到主时钟从哪里进来通常是IBUFDS或IBUFG经过了哪个MMCM或PLL分频倍频之后输出了哪些时钟域。每个时钟域的走线会以不同颜色区分。如果你发现某个逻辑单元期望的时钟不是预期的那一路或者某个时钟域根本没有走全局时钟网络而是走了普通布线资源这就是一个大隐患通常会导致时序偏差或者功能异常。这个问题在大型设计中很典型代码里生成了过多的时钟全部接到了同一个MMCM的输出上导致负载过高布局布线后部分触发器分到了非全局时钟资源的线路上。时序报告可能显示的是满足收敛但实际上某些信号的到达时间偏差很大。从Schematic时钟树里这些都能被看清楚。5.2 利用物理位置查看布局局部拥塞布局布线后的Schematic对每个Cell都绑定了实际物理位置。Schematic窗口底部或者右键属性里能看到Slice坐标之类的位置信息。配合Vivado的Device视图可以快速定位“设计逻辑在芯片上占据了哪一片区域”。如果你的设计中某个模块占用的逻辑密度异常偏高可能是代码中隐式生成了大规模LUT串联结构。通过Schematic查看每个组件的物理坐标评估逻辑是否集中在某个局部区域如果发现某一小片区域堆积了大量LUT和FF可能就会引起布线拥塞导致时序收敛困难。性能峰值相关的问题也建议在这个阶段配合Physical Optimization一起查看。一旦跑完placementSchematic中显示的物理拥塞和布局布线报告里的拥塞度热点应该是吻合的。5.3 查看扇出与长距离走线扇出过高是FPGA设计中一个常见的时序杀手。一个控制信号驱动几百个FF的时钟使能或复位在器件上会形成非常大的走线负载导致信号到达时间和翻转时间明显变差。布局布线后的Schematic里点击一个高扇出网络Vivado会用高亮线条画出它的所有负载点。扇出网络在Schematic中的显示通常会带有“扇出数量”的标注默认不太醒目可以在网络属性里看到。对于超过100的扇出Schematic里的走线往往会出现明显的长线横穿。比如一个全局复位信号从某个IO进来之后绕了大半个芯片才驱动到远处的FF上这种走线一看就知道有问题。解决办法通常是进行逻辑复制或者在代码层面对高扇出信号做缓冲。我在实际项目中会把Schematic里显示的物理走线和实现后的时序报告结合起来看。Schematic帮我从“结构上”理解为什么某条路径差时序报告告诉我要修哪里。两个工具交叉验证定位问题的速度会快很多。6. 实战案例用Schematic快速定位三个典型问题6.1 案例一代码写错了位宽仿真却没报错有一个项目要做一个8位计数器代码里不小心把其中一个输出信号声明成了4位但仿真时并没有明显异常因为那几位恰好没有被后续逻辑高频使用。上板后偶然出现数据跳跃排查了很久最后在RTL分析的Schematic里一眼看到计数器的8位位置在输出Port上被截断成了4位。定位方法Open Elaborated Design找到计数器对应的模块点击输出信号查看Bus Width属性发现是4位再看模块内部寄存器是8位立刻就锁定了信号位宽不匹配的位置。修复声明之后重新综合问题消失。排查心得RTL分析阶段的Schematic里信号的Bus Width属性是排查位宽问题的快捷入口。代码层肉眼看不出来的对这种隐式截断它反映得很清楚。6.2 案例二高扇出复位信号导致的时序违例工程里有一个异步复位信号代码中直接用作几乎所有FF的异步复位端。布局布线后时序报告显示复位网络上的路径延迟异常但逻辑关键路径没问题。打开Implemented Design的Schematic点击复位网络看到它从IO引脚进入后通过普通布线资源一路绕了半个芯片驱动了上千个FF的复位端口。定位方法在Schematic中点击复位网络观察网络走线确认负载数量过多。回到代码把复位信号改为同步释放并在关键位置插入BUFG最终让复位网络走全局时钟资源时序问题解决。排查心得对于复位、使能这类全局性控制信号扇出和布线质量的影响不可忽视。Schematic里走线很长、拐弯很多基本就说明应该加缓冲或者调整分配策略。6.3 案例三设计被综合器“优化”掉了一半逻辑一次调试中模块功能始终不符合预期仿真时却一切正常。检查综合报告发现某个子模块的资源为0但代码里明明例化了一大段逻辑。打开综合后的Schematic找到对应模块位置发现该模块的输入输出根本没有连接到任何有效逻辑。原因追溯之前的版本中这个模块的输出信号被定义成了(* keep true *)的某种属性但有一次重构时把它改成了用外部条件拼出来的常量综合器判断该模块的所有输入都是固定值、输出恒为常量于是把它彻底优化掉了。Schematic里看到的是一个只有一个固定输出的空壳。定位方法综合后Schematic里右键模块查看“Source”定位到out of context的层次在Properties里查看是否有常量输入。修复方式是在代码里对该输出信号加上(* keep true *)属性禁止综合器优化到常量。排查心得综合器“优化”掉逻辑不等于代码错了但往往说明当时代码中确实存在逻辑语义不完整的地方。Schematic里逻辑被简化的部分值得逐个确认是应当简化还是写错了。7. Vivado 2019.1版本的操作细节与避坑经验7.1 2019.1版本Schematic的界面特点2019.1版本的VivadoSchematic视图的整体交互与后续版本基本一致但有一些细微差别值得留意。2019.1版本中RTL分析阶段的Schematic默认是“Netlist”视图综合后和实现后的Schematic默认展示的是“Technology”视图。切换视图的按钮在下方的工具栏里下拉菜单可以切换。有些操作手册上讲的技术视图切换在2019.1里需要手动点一下。还有个容易被2019.1初学者忽略的点打开Schematic视图后窗口上方工具栏里有个“Layout”图标点击展开后可以选择“Default Layout”、“Chip View”、“Netlist view”等模式。要恢复Schematic和Hierarchy并排显示的样式选Default Layout就能回来。7.2 2019.1中Schematic窗口的常见卡顿处理2019.1版本的整体性能在当时还不错但Schematic窗口在打开大型设计时卡顿问题明显。如果打开综合后Schematic后操作延迟很高有几个实操处理技巧。第一关闭不必要的显示层。在Schematic窗口的“View”菜单下把“Show Trends”、“Show Pins”等选项关掉能减少大量渲染开销。第二尽量使用搜索和定位功能而不是手动拖动画布。第三如果只是查某个特定模块建议使用“New Window”只打开该模块视图而不是全局视图里搜索。我实测下来2019.1版本在综合后Schematic中对超过几十万个Cell的设计支持确实不如后来的2021/2023版本流畅。所以不要勉强在全局视图里操作局部化、层次化查看是更好的方案。7.3 在2019.1中利用Tcl命令增强Schematic调试除了鼠标点击操作Vivado 2019.1的Tcl Console里同样支持对Schematic视图的控制。这在批量排查或脚本化操作时很高效。打开Schematic视图并获取当前设计中的网表连接信息比如显示某个Net的连接关系# 打开综合后的设计 open_run synth_1 -name synth_1 # 获取某个网络的所有连接引脚 get_pins -of_objects [get_nets {reset_n}]在Schematic窗口中选中某个Cell后可以通过Tcl命令获取它的物理坐标或资源类型方便批量检查某种类型的逻辑分布。# 列出所有DSP48E1原语的位置 get_cells -hier -filter {PRIMITIVE_TYPE ~ *DSP*}Tcl命令这种方式对工程师来说门槛略高但一旦熟练了批量的结构检查就会变得非常轻松。比如检查所有高扇出网络、查找某个模块的所有实例用Tcl命令行效率远高于在Schematic窗口里手动点选。8. 常见问题排查与使用建议8.1 为什么我的Schematic窗口是空的很多新手会遇到Open Elaborated Design之后Schematic窗口是空白的或者画布上什么都没有。通常的原因是窗口打开了但设计还没有加载完成也可能是因为搜索框里输入过关键字过滤器把内容都隐藏了还有一种可能是设计本身就为空——比如顶层没有端口也没有任何逻辑。处理方式是先等状态栏显示“Elaboration complete”再确认流程导航器上各个阶段的Design状态。如果确实有内容但画布空白直接在右上角Find框里搜一个已知信号名把它“跳”出来。对于顶层为空的情况Schematic视图当然没有东西可显示需要检查代码是否真有逻辑。8.2 在Schematic中找不到某个信号怎么办综合或实现后的Schematic里找不到某个信号最常见的原因就是它被综合器优化掉了。如果信号在综合后确实不存在了可以用get_nets命令查一下确认# 查找综合后的网表中是否存在某个信号 get_nets -hier *clk_div*如果返回空说明已经被优化。这时需要回到RTL分析视图在Elaborated Design里追踪一下这个信号的用途看看它是被误优化还是真的没有用。中间有(* keep true *)或者(* preserve true *)属性可以强制保留。还有一个可能的情况信号名在综合过程中被自动改名了比如增加了层级前缀或后缀。这种情况下在Schematic里搜索时建议使用通配符比如输入*data*会匹配到所有包含data字段的信号。8.3 Schematic视图做不到的事Schematic视图很强大但它不是万能的。它在定位功能性和结构性问题上非常有效但在定位时序收敛问题、动态功耗问题、某些异步交互问题方面能提供的信息有限。对于这些类型的问题还是需要配合时序报告、功耗分析、逻辑分析仪ILA等工具。另外在做大型设计时全面展开Schematic视图会让信息量过度饱和反而难以看清。我的经验是Schematic视图适合用于“局部深入”不适合“全局总览”。全局结构用Hierarchy视图和Device视图来看更合适Schematic则用来检查具体某个模块、某条路径的细节构成。8.4 从Schematic反推代码的实用技巧附2019.1操作口诀这里总结几个我在2019.1版本中反复验证有效的操作口诀都是实际工作中验证过的查悬空端口先用“Trace”功能从外部输入端口开始一路追踪看不到连线末端的情况基本就是悬空。查信号连接Ctrl左键点击信号顺着高亮走向看再配合属性面板里的“Net”信息确认连接关系。查逻辑冗余综合后视图里搜索未知的LUT右键“Go To Source”快速定位到产生该逻辑的代码段。查高扇出布局布线后点信号线看属性面板里的扇出值超过100就值得关注。查位宽截断RTL视图里选中信号后直接看Properties的Bus Width或者在Tcl Console里执行report_property [get_nets net_name]查看详细信息。9. 个人心得Schematic视图是设计师的“外科手术刀”用了Vivado这么多年我越来越觉得Schematic视图就像一把“外科手术刀”。它不是万能的百宝箱不能解决所有问题但在精准定位结构性异常时效率远高于单纯地看代码、跑仿真、读报告。很多工程师一上来就习惯性地打开仿真波形验证问题但忽略了“从代码到电路”这一步的验证价值。代码是你在纸面上的设计意图仿真波形是意图的逻辑结果但真正在实际硬件上运行的是经过综合、映射、布局布线之后的电路。这两者之间的差异恰恰是Schematic视图最擅长暴露的地方。所以我的建议是每次写完比较复杂的逻辑模块或者接到一个新的可复用IP时都花几分钟在RTL分析阶段的Schematic里快速浏览一遍结构综合结束后在综合后的Schematic里检查一下资源推断结果实现之后再在Implemented Design的Schematic里扫一遍时钟网络和高扇出信号。不值得每次都做全套但至少你要养成这个思维习惯——当问题出现的时候你心里能有一个“在电路结构里找原因”的检查入口。最后一个实际开发中的经验Schematic里发现问题先不要急着改代码。先在代码中加注释标记出可疑区域分析清楚为什么会变成这样再动手修改。因为很多情况下综合器给出看似“不合理”的结构根源却在更上游的代码风格和表达方式上。修好了这一处很可能顺带避免了同类的多个隐患。以上是我个人在Vivado 2019.1及相近版本中使用Schematic视图排查设计问题的完整经验总结。如果你是正在学习FPGA的新人建议花点时间把RTL分析视图、综合后视图、实现后视图都系统地浏览一遍感受一下你的代码在不同的实现阶段“长成什么样”。积累够了这个工具会成为你手里最顺手的那把刀。
返回列表