weiqi7777

使用ep3命令对代码进行预处理

0
阅读(2916)

在写代码时,有一些重复代码,我们想简写这部分代码,以节省编码工作,然后使用预处理工具进行处理,得到最终的代码。

perl的EP3,就是这样的一个工具。

https://metacpan.org/search?q=ep3网站上,有介绍这个工具,其实就是perl的一个插件。

可以对该插件进行封装,得到一个perl脚本,直接使用该perl脚本对文件进行预处理。

脚本名叫ep3,脚本代码如下:

使用也比较简单,直接

ep3 [option] 文件 > 输出文件

对于option选线,有以下的一些常用选项:

  • -noprotect: 对文件中的注释,不处理
  • -nocommon: 去除文件中的注释
  • -include: include其他文件
  • -includes: 指定输入文件中@include的搜索目录
  • -define: 定义宏, 如 -define use_fifo=1

下面,简单说下ep3命令的用法:

一、循环

如果,我们想要生成如下的信号,

我们可以这样写

@for , @endfor是ep3的指示符,表示循环,中间的@i@会被依次替换为0,1,2,3,4,5。

二、条件判断

想要根据传入的参数,决定生成的代码。

比如想根据传入的参数,WIDTH,决定count_reg信号的位宽是多少。可以这样编写代码:

执行命令 ep3 test.svp -define WIDTH=6 > test.sv

生成后的代码:

@WIDTH是ep3使用的宏名,可以通过@宏,进行定义,也可以在ep3的命令选项,-define 宏=宏参数 进行定义。

三、宏判断

可以使用宏判断,从而生成指定的代码。和条件判断类似

命令

ep3 test.svp -define USE_FIFO=1 > test.sv

生成后的代码如下:

四、include

可以包含其他文件中的内容,到本文件中。

如以下被包含的文件,使用@define,定义了一个ep3所使用的宏。

代码文件,使用@include, 包含文件,包含的文件内容,会被ep3处理,然后生成在这个位置。

转换后,代码变为以下:

五、perl_begin, perl_end

对于其他复杂预处理,可以使用@perl_begin,@perl_end。处于这2个之间的代码,可以使用perl脚本进行处理。

如以下代码:

处理之后:

对于直接输出文本,需要使用@>> 和 @<< 进行包含,表示这部分,不是perl执行代码。

以上,就是ep3命令的使用简单介绍,一般来说,以上的功能已经足够了,如果需要复杂的功能,就需要自己查阅相关资料,并且进行实验。

Baidu
map