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

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

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 宏=宏参数 进行定义。

三、宏判断

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

module test(clk, rst);
@ifdef @USE_RAM
    ram ram_u1;
@else
    fifo  fifo_u1;
@endif
endmodule

宏判断的宏,不能通过ep3的-define参数,进行定义,必须要定义在文件中,然后使用@include方式引入。请见第四节,include。

ep3命令的-define参数,只会影响文件中的@if, @else if这些指示符。

生成后的代码如下:

四、include

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

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

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

转换后,代码变为以下:

五、perl_begin, perl_end

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

如以下代码:

处理之后:

    

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

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

此条目发表在其他分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。