首页 » 互联网 » FPGA调试技巧01_缺点类型及定位思路_缺陷_模块

FPGA调试技巧01_缺点类型及定位思路_缺陷_模块

萌界大人物 2024-12-19 10:34:53 0

扫一扫用手机浏览

文章目录 [+]

众所周知,软件如ARM、DSP、单片机等是按照代码的顺序,一步一步串行实行的,通过利用断点、打印LOG等方法,顺序地检讨每步的实行结果,就能找到问题,因此定位起来非常大略。

而FPGA代码是并行的,意味着在同一时候,多个ALWAYS同时实行,须要检讨每时每刻所有的旗子暗记的精确性。
如何从浩瀚的旗子暗记(几千几万几十万个旗子暗记)、以及浩瀚的时钟周期中,找到涌现缺点的时候以及旗子暗记,非常有寻衅性。
这就像检讨舞蹈的姿势,您不仅要检讨脚步的精确性,还要检讨此时此刻手势等部位的精确性,这是面的检讨,而不是线的检讨。

FPGA调试技巧01_缺点类型及定位思路_缺陷_模块 FPGA调试技巧01_缺点类型及定位思路_缺陷_模块 互联网

正是串行和并行的差异,导致FPGA的调试难度,远远大于软件。

FPGA调试技巧01_缺点类型及定位思路_缺陷_模块 FPGA调试技巧01_缺点类型及定位思路_缺陷_模块 互联网
(图片来自网络侵删)

同时,更具寻衅性的是,并行检讨就意味着设计师要对所有的旗子暗记有深刻的理解,知道每个旗子暗记的浸染,以及此时此刻每个旗子暗记的值是多少,容不得有任何模糊的空间。

综上,FPGA相对软件,调试难度巨大,是一项艰巨的事情。
调试、查找定位问题,是FPGA工程师的一项基本技能,而且是必备的技能,节制好FPGA调试技巧,意义重大。

明德扬MDY操持推出一系列文章,磋商FPGA的调试技巧,以及如何定位问题和解决问题。
本文是第一篇文章,概述性地讲解缺点类型及定位思路。

第1节 缺点类型概述

明德扬可以将FPGA的缺点类型分成三种:软件工具缺点、语法编译缺点以及功能缺点。

软件工具缺点,是指缺点利用如VIVADO、QUARTUS等软件,,或者软件检讨出的非代码性的缺点。
例如软件的license问题、管脚配置问题、短缺文件问题、短缺库文件问题等。

语法编译缺点,是指不符合VERILOG语法规则而引出的缺点,例如忘了加分号,旗子暗记未定义等。

功能缺点,是指不符合设计目标,与预期不一致的逻辑性、逻辑性缺点。

对付初学者,大部分韶光花在办理软件工具缺点以及语法编译缺点上,这是由于不熟习而导致的;而专业的FPGA工程师,大部分韶光都花在定位功能缺点上了,可以说FPGA工程师,一半的韶光都花在功能缺点的定位及改动上。

下面,笔者将逐个谈论每种缺点的办理思路。

第2节 软件工具缺点2.1 分辨问题类型

软件工具缺点,是指缺点利用软件,如VIVADO、QUARTUS,或者由软件检讨出的非代码性的缺点。
例如软件的license问题、管脚配置问题、短缺文件问题、短缺库文件问题等。

如上图是QUARTUS软件发出的缺点提示。
对付缺点提示,我们必须负责阅读,抓关键字,不要依赖翻译软件,由于这些缺点提示常日来说不会很难的,看多几遍就熟习了。

其次,学会分辨是软件工具问题,还是语法问题。
常日来说,语法问题一样平常会提示您的哪一份代码以及哪一行出错。
如果缺点提示里,没有跟哪一份代码关联起来,一样平常便是软件工具缺点了。

碰着软件缺点的问题,可以通过搜索问题或者咨询老师来办理。

2.2 方法1:搜索

对付软件问题,要相信您肯定不是第一个吃螃蟹,大概率网上会有人咨询过该问题,热心的网友会留有详细的答案,以是最好的办法便是去搜索了。

把缺点提示复制后去百度搜索(软件都会供应有复制功能,多试试右键),一样平常都能找到答案。

当然,搜索也有技巧。

Ø 去除掉“个性词”,例如跟您电脑名有关的、您自己的电脑路径、您自己的文件名等。

Ø 缺点提示很永劫,删减一些不必要的语句,保留关键词等。
多试试不同的组合,万一有人问的办法不同呢。

Ø 搜索时,把软件名带上,否则会搜索出很多非本软件的问题。

末了,笔者精心整理并网络了多种工具碰着的问题,并整理成一个帖子,读者如果碰着软件的问题,可以先从下面找找答案。

QUARTUS问题汇总贴:http://www.mdy-edu.com/plus/view.php?aid=1191

VIVADO问题汇总贴:http://www.mdy-edu.com/wentijieda/20210409/1208.html

MODELSIM问题汇总贴:http://www.mdy-edu.com/wentijieda/20210409/1215.html

在线调试工具问题贴:http://www.mdy-edu.com/wentijieda/20210409/1217.html

GVIM问题汇总贴:http://www.mdy-edu.com/wentijieda/20210409/1219.html

2.3 方法2:咨询

如果搜索不到答案,读者可以咨询技能支持老师。
老师们会打包好常用的软件工具,供应下载路径、利用解释和把稳事变等。

第3节 语法编译缺点

语法编译缺点,是指不符合VERILOG/VHDL语法规则而引出的缺点,例如忘了加分号,旗子暗记未定义等。

上面是MODELSIM提示的缺点,上面缺点提示里,指明了代码led_learn_tb.v文件的第23行有问题,像这种指明了哪份代码的,一样平常便是语法编译缺点。

语法编译缺点很觉见,初学者由于不熟习VERILOG,写出不符合语法规则的代码;而对付专业的FPGA工程师,也常常会由于粗心,或者想让软件帮忙检讨等缘故原由,涌现语法编译缺点。

涌现问题很正常,,根据缺点提示,打开代码文件,定位到那一行,去检讨便是了。

3.1 认识:软件不会出缺点

首先要树立明确的认识:软件不会出缺点的!

软件指出某个代码有问题时,那肯定是代码有问题,不用疑惑!
不要认为自己碰着了很“奇怪”、“不可能”的情形,软件不会出缺点的,肯定是代码有问题。

有部分读者,一出问题,轻微检讨一下,就轻易得出“奇怪”、“不可能”的结论,满心欢畅地跟人分享。
比较盲目相信自己的代码,不愿意深入地检讨,有一种:代码明明没有问题,创造了软件出缺点的心态。

经由多年的实践证明,软件不会出错的,肯定是自己代码出问题的。
支持这个信念,您才能毫无顾忌地深入检讨,一遍没检讨出来,就检讨两遍。
笔者曾经试过盯着某行代码足足半小时,溘然间才找到问题所在。

软件提示缺点了,那肯定是有错,但软件的提示也会存在误导。
它说缺点的那一行,不一定便是这一行出错。
它说缺点的问题,不一定是这个问题,反而是其他问题等。
如说前面一行短缺了一个逗号,一个分号的话,软件就不会在这一行提示,而是下一行提示。
因此检讨时,要前前后后地检讨。

3.2 强烈推举:代替法

对付不熟习VERILOG语法的读者,很担心自己定位不出语法问题。
实在定位语法问题非常大略,笔者在此强烈推举一种定位方法:代替法。
它可以在您不熟习语法的条件下,找到问题所在。

定位问题实在便是不断地将问题搜索范围变小,终极定位到某一行、某一个语法的问题。
读者首先要知道VERILOG最大略的语法,例如大略的modelsim构造、always构造和assign构造等。
例如下面的代码要有所理解,这是最基本的哀求,如果不清楚,拿本书去学学,也就半小时的事。

1

module test(

din ,

flag_start

)

input din ;

output flag_add_start ;

reg flag_add;

always @ (posedge clk or negedge rst_n)begin

if(!rst_n) begin

flag_add <= 1'b0;

end

else begin

flag_add <= din;

end

end

assign flag_start = flag_add ^din ;

endmodule

假设一个繁芜的代码涌现了缺点,例如下面的代码,其利用了比较多的语法,例如有位选符号[]、拼接符{},还涌现了未知的data_width。
假设软件提示该代码有问题,而您又看不出哪里有问题时,您该如何定位该问题呢?(本例只是假设有问题,不一定是有问题)

1

always @ (posedge clk or negedge rst_n)begin

if(!rst_n) begin

dout <= 0;

end

else if(spi_cs_ data_ reg2=0&&spi_cs_ data_ reg1==0)begin

if(spi_ up_ flag)begin

dout [data_ width-1:0]<={dout [data_ width-2:0],spi _sdi};

end

else begin

dout [data_ width-1:0]<=dout[data_ width-1:0]:

end

end

end

定位的思路是代替法,将繁芜的、您不知道的语法,换成您确定的、大略的语法,然后编译查看提示,以确定修正点是不是问题所在。

您可以将上脸庞杂代码,换成下面大略代码。
如果编译没有出错,那解释缺点一定在原来的ALWAYS处。
如果编译还是出错,解释缺点在这个ALWAYS之外。

1

always @ (posedge clk or negedge rst_n)begin

if(!rst_n) begin

dout <= 0;

end

else begin

dout <= 1

end

end

假设编译没有缺点,推理是这个ALWAYS问题。
您可以在上面根本上补充稍繁芜的内容,例如下面情形。

1

always @ (posedge clk or negedge rst_n)begin

if(!rst_n) begin

dout <= 0;

end

else if(spi_cs_ data_ reg2=0&&spi_cs_ data_ reg1==0)begin

dout <= 1

end

end

如果编译没有缺点,您可以再增加一些,例如把位选语法[]加上,例如下面代码。

1

always @ (posedge clk or negedge rst_n)begin

if(!rst_n) begin

dout <= 0;

end

else if(spi_cs_ data_ reg2=0&&spi_cs_ data_ reg1==0)begin

if(spi_ up_ flag)begin

dout [data_ width-1:0]<=1;

end

else begin

dout [data_ width-1:0]<=0:

end

end

end

如果有编译缺点,解释增加的部分有问题;如果没有缺点,就解释缺点还在其他地方。

按此方法连续补充内容,直至将所有内容填完,总之一定能找出问题所在。

假设定位到是拼接符{}有问题。
此时完备可以搜索“verilog 拼接符”,学习干系内容,进而节制精确的利用方法。

代替法是一种功能如神的方法,只要不断去实践和考试测验,就肯定能找到问题所的,强烈推举大家利用。

3.3 找不到XXX的问题

如果碰着找不到xxx,没有xxx这类问题,例如上图,MODELSIM提示,找不到“model_name”。

碰着这类问题,一定要清楚QUARTUS、MODELSIM、VIVDADO的流程,以及软件工具与代码、代码与代码之间是如何关联起来的。

首先是确认软件工具和代码文件的关联方法。
每个软件如QUARTUS、MODELSIM和VIVADO,都须要将代码添加进来,即添加文件的操作。
添加后的文件,就将软件工具和代码文件联系起来了。
把稳的是,这里关联的是“代码文件”,而非“模块名”,有些代码,其代码文件名与模块名是不一致的。

其次是确认文件名和模块的关联。
软件工具会春联系关系的“代码文件”进行编译,编译后会产生可供给用的“模块”,该模块因此“模块名”来命名的,即module name,而不是文件名。
例如文件名为a.v,而里面的模块名是module b,则会天生模块b。
还要把稳,一个文件可以包含多个模块,对该文件编译,会天生多个模块。
如果找不到模块,不要只检讨文件名,还要看模块名,要检讨文件名和模块名是不是同等。

末了是确认模块与模块之间的关联。
每个软件都会哀求设置一个顶层模块,QUARTUS和VIVADO的顶层模块,便是设计的顶层文件;MODELSIM的顶层文件是测试文件。
设置了顶层文件后,软件工具会从顶层文件开始,逐级找到其他模块,线索便是例化。
例如设置了顶层模块为模块a;模块a例化了模块b和模块c;模块b例化了模块d和e。
那么软件工具首先找到顶层模块a;根据例化,找到模块b和模块c;根据模块b找到模块d和e。
通过这种方法,就把所有利用到的模块关联起来了。

须要把稳的是,某些模块是官方自带的,例如VIVADO的原语、XMP等,以及某些IP核调用的库。
这些模块在官方软件利用时,不须要添加到工程,官方软件是能够自动识别的。
但这些模块在第三方软件例如MODELSIM利用时,MODELSIM是不清楚这些模块的,那么就要添加这些仿真库,把这些模块的文件添加进来,从而让MODELSIM能识别。
当创造某模块找不到时,要辨别该模块是在哪个文件中被调用了,是不是被IP核调用的,如果答案是肯定的话,那就要把稳软件是否短缺库的问题了。

综上,当提示某模块找不到的时候,检讨代码文件有没有加到工程;检讨文件名和模块名是否同等;检讨是否IP核调用了该模块,是的话添加库文件等。

第4节 功能缺点

功能缺点,是指不符合设计目标,与预期不一致的缺点。

软件是顺序串行的,是按照代码的顺序,一步一步实行的,利用断点、打印LOG等方法,顺序去检讨每步的实行结果,就能找到问题,因此定位起来非常大略。

而FPGA代码是并行的,意味着在同一时候,多个ALWAYS同时实行,您须要检讨每时每刻所有的旗子暗记的精确性,如何从浩瀚的旗子暗记(几千几万几十万个旗子暗记)、以及浩瀚的时钟周期中,创造那个涌现缺点的时候以及旗子暗记,非常有寻衅性。

正是上面所说的差异,FPGA的定位缺点的方法完备不同于软件。
FPGA更加磨练工程师的细心程度。

4.1 认识1:放稳心态

首先要认识到,涌现逻辑缺点是很正常的,没有验证过的代码,一定是有问题的代码。
写完代码,仿真验证,创造问题修正;再次仿真验证,这是FPGA工程师的日常事情。

定位问题办理问题是正常事情,要放稳心态,不要焦急。
那种以为一写代码就逻辑精确的情形,是不存在的。

4.2 认识2:粗心大意

其次我们要树立一个认识,软件是不会出缺点的,一定是自己代码问题;如果没找到问题,那肯定是不足细心;还没找到,那就要更细心再找!

总之,没找到问题,就更加细心就对了!

4.3 认识3:自己行动

除非有好心人,乐意捐躯韶光来帮您远程定位,否则逻辑功能缺点是没办法乞助的。
在不熟知您代码、不清楚设计旗子暗记的含义、不知道设计意图时,没有人能够一眼看出问题所在,纵然是老师也弗成。
这个问题只能靠工程师自己去定位去办理。

下一篇文章,我们将先容定位功能逻辑缺点的方法,欢迎关注。

标签:

相关文章

视觉语言的魅力,介绍书籍中的视觉奥秘

在人类的历史长河中,视觉语言作为一种独特的沟通方式,承载着丰富的信息和情感。书籍作为视觉语言的载体,不仅传递着文字的知识,更通过其...

互联网 2025-01-01 阅读0 评论0

解码加密语言,守护信息安全的新篇章

随着信息技术的飞速发展,信息安全已成为社会各领域关注的焦点。在互联网时代,加密语言作为一种保护信息安全的重要手段,正日益受到人们的...

互联网 2025-01-01 阅读0 评论0

哪些材料含金银钯贵金属_类别_边角料

含金种别:金盐、金水、镀金、金线、金渣、金丝、金牌、边角料、镀金挂件、金光抛灰、镀金废液等。含银种别:银浆、导电银浆、报废银浆、银...

互联网 2025-01-01 阅读0 评论0