【芯片前端】Filelist -f/-F的文件解析方式探究

简介: 【芯片前端】Filelist -f/-F的文件解析方式探究

前言

测试所用的文件目录(列举关键文件):

1. /home/xiaotu/my_work/uvm_demo
2. -cfg/
3. -ctl/
4. -rtl/
5. -sim/
6.     -Makefile
7. -tc/
8. -th/
9. -ver/

-f/-F影响后跟filelist文件内的解析方式,不影响后跟文件的解析方式

典型的场景,就是makefile里用-f还是-F来后缀路径都是一样的(仅仅对于解析这个list) ,绝对路径就按绝对路径解析,相对路径就相对makefile所在目录进行解析。

而../cfg/tb.f中的所有路径都受到到前面的-f或-F影响,如上图的解析方式时,../cfg/tb.f中无论以下哪种写法,都是按-f来解析文件路径的:

1. -F ../ctl/ctl.f
2. -f ../rtl/dut.f
3. ../rtl/a.v

-f解析filelist内的路径时,与当前filelist所在路径无关

-f ../cfg/tb.f,

当tb.f内路径为相对路径时,则相对makefile所在路径进行解析;

当tb.f内路径为绝对路径时,则直接按照绝对路径进行解析;

进一步讲,-f path/file.f中path不会以任何形式影响file.f中的文件路径解析;

-F解析filelist内的路径时,与当前filelist所在路径有关

-F ../cfg/tb.f

当tb.f内路径为相对路径时,则会前缀filelist所在路径进行解析;

1. ../cfg/cfg.f中的写法:
2. ../th/harness.sv
3. 
4. cmp.log中解析的路径:
5. Parsing design file '../cfg/../th/harness.sv'

当tb.f内路径为绝对路径时,则不会前缀任何路径,直接解析绝对路径;

1. ../cfg/cfg.f中的写法:
2. /home/xiaotu/my_work/uvm_demo/ver/my_env.sv
3. 
4. cmp.log中解析的路径:
5. Parsing design file '/home/xiaotu/my_work/uvm_demo/ver/my_env.sv'

当tb.f内路为-y加载的库文件时,则直接视为相对路径,前缀filelist所在路径进行解析;

1. ../cfg/cfg.f中的写法:
2. -y /home/xiaotu/my_work/uvm_demo/rtl
3. 
4. cmp.log中解析的路径:
5. Warning-[LFCOR] Library file or dir cannot be opened
6.   Library directory '../cfg//home/xiaotu/my_work/uvm_demo/rtl' cannot be 
7.   opened for reading due to 'No such file or directory', will skip it.
8.   The library was specified from command line through -y or -v.

当tb.f内路为-f+filelist时,则直接视为相对路径,前缀-F的filelist所在路径进行解析;

1. Makefile中:
2. -F ../cfg/tb.f
3. 
4. ../cfg/tb.f中:
5. -f /home/xiaotu/my_work/uvm_demo/cfg/dut.f
6.

编译报错:

1. Error-[P1ARGS-CANTOPN-F] Cannot open file
2.   Unable to open '../cfg//home/xiaotu/my_work/uvm_demo/cfg/dut.f' due to 'No 
3.   such file or directory'.
4.   Please fix the reason mentioned above and continue.

嵌套的场景

1. ../cfg/cfg.f内的路径:
2. -f/-F ../cfg/dut.f(层次A)
3. 
4. 
5. ../cfg/dut.f内的路径为:
6. -f/-F ../ctl/ctl.f(层次B)
7. 
8. ../ctl/ctl.f内文件为:
9. ../ctl/my_interface.sv

-f(层次A)嵌套-f(层次B),两次解析均按照绝对路径,或相对Makefile的相对路径进行解析;

-f(层次A)嵌套-F(层次B),层次B以-f的方式解析,层次B内的文件绝对路径正常解析,相对路径则相对层次B(即../ctl/)进行解析;

Parsing design file '../cfg/../ctl/my_interface.sv'

-F(层次A)嵌套-f(层次B),-f后面负责的相对路径都相对的是-F后跟文件所在目录的相对路径

太绕了,举个具体点的例子:

1. Makefile中:
2. -F ../cfg/tb.f
3. 
4. ../cfg/tb.f中:
5. -f ./dut.f
6. 
7. ./dut.f中(dut.f在cfg目录):
8. ../rtl/mul_trans.v
9. -f ../ctl/ctl.f
10. 
11. ../ctl/ctl.f中:
12. ../ctl/my_interface.sv

那么mul_trans.v的编译路径为:

Parsing design file '../cfg/../rtl/mul_trans.v'

../cfg —— -F ../cfg/tb.f使得tb.f内的相对路径解析都要加上前缀../cfg;

../cfg/../rtl/mul_trans.v —— -f ./dut.f因此解析dut.f内相对路径的文件时相对的是当前../cfg的路径(上一层-F的作用);

还有my_interface.sv的解析路径:

Parsing design file '../cfg/../ctl/my_interface.sv'

其形式是-F嵌套-f再嵌套-f,可以看到后面两个-f都是相对../cfg进行解析,两个-f间没有路径叠加(如上文,-f path/file.f中path不会以任何形式影响file.f中的文件路径解析);

-F(层次A)嵌套-f(层次B),-f后跟filelist内(如果该filelist被找到)的绝对路径则会编译为绝对路径

1. Makefile中:
2. -F ../cfg/tb.f
3. 
4. ../cfg/tb.f中:
5. -f ../cfg/dut.f
6. 
7. ../cfg/dut.f中:
8. /home/xiaotu/my_work/uvm_demo/rtl/mul_trans.v

编译结果(这一点与我之前记忆有偏差,我再查一下,目前实测的结果确实是这样的):

Parsing design file '/home/xiaotu/my_work/uvm_demo/rtl/mul_trans.v'

综合看,-F嵌套-f会影响-f对其后filelist内相对路径的解析,使用起来要异常谨慎;

-F(层次A)嵌套-F(层次B)

遵循-F层层递进的规律,略

总结

因为-F对其后递进拆解filelist的影响更大,因此个人认为还是以-f+绝对路径的方式来组织filelist是最为合理安全的。


相关文章
|
22天前
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
85 0
|
1天前
|
前端开发 JavaScript 安全
【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原
【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原
10 0
|
3天前
|
JSON JavaScript 前端开发
vue的 blob文件下载文件时,后端自定义异常,并返回json错误提示信息,前端捕获信息并展示给用户
vue的 blob文件下载文件时,后端自定义异常,并返回json错误提示信息,前端捕获信息并展示给用户
|
14天前
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
【4月更文挑战第30天】Dart是Google为Flutter框架打造的高效编程语言,具有易学性、接口、混入、抽象类等特性。本文概述了Dart的基础语法,包括静态类型(如int、String)、控制流程(条件、循环)、函数、面向对象(类与对象)和异常处理。此外,还介绍了库导入与模块使用,帮助开发者快速入门Flutter开发。通过学习Dart,开发者能创建高性能的应用。
【Flutter前端技术开发专栏】Flutter Dart语言基础语法解析
|
14天前
|
弹性计算 运维 Shell
|
15天前
|
前端开发 JavaScript 数据安全/隐私保护
前端javascript的DOM对象操作技巧,全场景解析(二)
前端javascript的DOM对象操作技巧,全场景解析(二)
|
15天前
|
移动开发 缓存 JavaScript
前端javascript的DOM对象操作技巧,全场景解析(一)
前端javascript的DOM对象操作技巧,全场景解析(一)
|
15天前
|
分布式计算 Java 大数据
MaxCompute产品使用合集之大数据计算MaxCompute外部表映射了oss中的csv文件,看到"\N"被解析为"N",是什么原因
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
15天前
|
前端开发
【专栏】在前端开发中,package.json 文件是项目的重要配置文件,其中包含了许多与项目相关的信息和设置
【4月更文挑战第29天】`package.json`的`proxy`字段用于配置开发环境中的代理服务器,解决跨域问题并模拟后端响应。它是字符串类型,值为代理服务器地址。主要应用场景包括前端跨域请求和本地调试。配置时在`package.json`顶层添加`proxy`字段,如`"proxy": "http://localhost:8080"`。该配置仅在开发环境中生效,生产环境需另寻解决方案。
|
16天前
|
缓存 前端开发 算法
前端需要加载一个大体积的文件时,可以这么优化
前端需要加载一个大体积的文件时,可以这么优化

推荐镜像

更多