perl实现verilog ifdef所在域的判断

2023-10-28

功能描述

perl实现verilog ifdef所在域的判断。
1. emacs verilog-mode用于实例化很方便;但是常见项目,均存在大量ifdef的预编译命令。而emacs verilog-mode不支持ifdef。
2. 手动实例化,往往带来不可预料的错误。

功能演示

这里写图片描述这里写图片描述

代码

#!/usr/bin/perl
use strict;
use warnings;

open my $ifile,"<",$ARGV[0] or die;
my $ifile_num=0;
my @tag;
my @state=("ifdef_DEFF","ifndef_DEFG");
while(<$ifile>){
    #print "========like verilog fsm state=========================\n";
    $ifile_num=$ifile_num+1;
    if($_ =~ /\s*\`ifdef\s+([0-9a-zA-Z_]+)/){
        push @tag,"ifdef_$1";
    }
    if($_ =~ /\s*\`ifndef\s+([0-9a-zA-Z_]+)/){
        push @tag,"ifndef_$1";
    }
    if($_ =~ /\s*\`else/){
        my $current_tag = pop @tag;
        if($current_tag =~ /ifndef_([0-9a-zA-Z_]+)/){
            push @tag,"ifdef_$1";
        }
        if($current_tag =~ /ifdef_([0-9a-zA-Z_]+)/){
            push @tag,"ifndef_$1";
        }
    }
    if($_ =~ /\s*\`endif/){
        pop @tag;
    }
    #print "========debug information=========================\n";
    print "$ifile_num:\@tag=@tag";
    print "\n";
    #print "========action by debug information=========================\n";
    if(&compare(\@tag,\@state)){
        print "$_";
    }
}
close $ifile;

sub compare()
{
    my $flag=0;
    my ($first,$second)=@_;
    if (@$first==@$second) # the number of the array , don't use length()
    {
        for(my $i=0;$i<@$first;$i++)
        {
            #if($first->[$i]!=$second->[$i])
            if($first->[$i] ne $second->[$i])
            {
                $flag=1;
                #print "$first->[$i] ne $second->[$i]\n";
            }
        }
    }
    else
    {
        $flag=1;
    }
    if( $flag==1)
    {
        #print "two arrays are not equal\n";
        return 0;
    }
    else
    {
        #print "two arrays are  equal\n";
        return 1;
    }
}

代码小结

利用数组,作为状态

利用数组匹配,作为状态判断,并执行相应任务

数组匹配,子函数compare

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

perl实现verilog ifdef所在域的判断 的相关文章

  • Perl 和 Unix 如何以相同的顺序对 Unicode 字符串进行排序?

    我正在尝试获取 Perl 和 GNU Linuxsort 1 程序就如何对 Unicode 字符串进行排序达成一致 我在跑sort with LANG en US UTF 8 在Perl程序中我尝试了以下方法 use Unicode Col
  • Perl YAML 模块无法识别标量类型

    我加载以下 yaml 文件 foo bar s 1 hx 0x34 用这段代码 use YAML qw LoadFile Dump use Data Dumper my d LoadFile test yaml print Dumper d
  • Perl 非贪婪

    我遇到非贪婪正则表达式 regex 的问题 我已经看到有关于非贪婪正则表达式的问题 但它们没有回答我的问题 Problem 我正在尝试匹配 lol 锚点的 href Note 我知道这可以通过 Perl HTML 解析模块来完成 我的问题是
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • 使用 Perl 获取 值

    因此 我有一个报告工具 可以在 HTML 文件中输出作业调度统计信息 并且我希望使用 Perl 来使用这些数据 但我不知道如何单步浏览 HTML 表 我知道如何使用 jQuery 来做到这一点 find tr each function v
  • 警告:(vsim-7)无法在读取模式下打开自述文件“mem_content_01.dat”

    我正在尝试在 ModelSim 中运行测试模拟 但收到标题中的错误 我已经仔细检查过 该文件与我的项目位于同一位置 并且名称匹配得很好 有谁知道问题可能是什么 如果您需要查看代码的某些部分或类似内容 请告诉我 啊明白了 好吧 ModelSi
  • perl - 创建 gzip 压缩文件的最佳方法

    我需要改变我的例程并对最终的输出文件进行 gzip 压缩 我试图找出 gzip 在 perl 子例程中调用的已处理文件的最佳方法是什么 例如 我有一个创建文件 extract data 的子例程 这是主循环和子例程 foreach my t
  • Perl 守护进程不与 Sleep() 一起工作

    我使用编写了一个简单的测试守护进程过程 守护进程 http search cpan org deti Proc Daemon 0 14 lib Proc Daemon pod 这是守护进程 usr bin perl use Proc Dae
  • 如何编写正则表达式来匹配 Verilog 文件中的模块实例化?

    我正在开发一个项目 通过使用 perl 脚本语言来促进 verilog 编程 现在我想编写一个脚本来扫描顶级verilog文件 然后生成模块的层次结构列表 这表明我需要提取模块实例化 从verilog文件中的语句来看 问题是这样的 如何编写
  • 数据结构格式(YAML 或其他)的往返解析保留注释,用于编写配置

    我一直在多个应用程序中使用 YAML 作为配置文件格式 一切都很顺利 除了一件事 当我的程序需要在 YAML 配置文件中写入 修改配置变量时 它会通过加载和转储整个文件来破坏格式和注释 结构 嗯 实际上 YAML 还有另一个问题 大多数用户
  • sed:用匹配的模式替换第 n 个单词?

    我有一个具有以下特征的文本文件 每行至少有三个由空格分隔的 单词 单词 可以是任何字符或字符串 我在一些行中附加了一些注释 并提出了对原始单词进行更改的初步建议 现在想使用 sed 为我进行这些更改 因此 为了提供更清晰的图片 我的文件如下
  • Perl:导出器出现问题

    Module FOO BAR Foobar pm use strict use warnings package Foobar our VERSION ISA EXPORT EXPORT OK EXPORT TAGS FOO BEGIN r
  • 如何在 Perl 中将数组数据插入 MySQL?

    我用下面的脚本解析一个文本文件 如何将数组数据插入到MySQL表中 我已经学习了 Perl MySQL DBI 连接方法 我可以成功连接到本地 MySQL 数据库 我可以使用 MySQL 命令行创建表 C Perl bin perl exe
  • Perl 中令人困惑的文件句柄

    一直在使用以下脚本 但仍然无法理解两种不同 类型 的文件句柄形式背后的含义 任何见解将不胜感激 usr bin perl use warnings use strict open FH example txt or die while
  • 如何引用 Perl 子例程?

    我在弄清楚如何引用外部模块文件中的子例程时遇到了一些麻烦 现在 我正在这样做 外部文件 package settingsGeneral sub printScreen print 0 Main use settingsGeneral my
  • 为什么会出现使用警告;使用严格; Perl 中不是默认的吗?

    我想知道为什么 use warnings use strict Perl 中不是默认的 每个脚本都需要它们 如果有人 出于充分的理由 需要禁用它们 他们应该使用no strict和 或应该使用一些命令行参数 对于单行代码 是否有太多写得很糟
  • 如何覆盖 Template Toolkit 模板文件中的 WRAPPER?

    有没有办法禁用WRAPPER那是设置在新的 配置 http search cpan org dist Template Toolkit lib Template pm 通过模板或临时覆盖parse 我想要一个默认值WRAPPER 我将用于
  • 在 Perl 中查找文件中的字符串并将其替换为另一个字符串

    我正在尝试搜索文件中的字符串并将其替换为另一个字符串 我的文件内容如下 comments abc comments xyz SerialPort 100 comment Baudrate 9600 Parity 2 Databits 8 S
  • Perl 中的 -> 箭头有什么作用?

    我不断看到 gt 在代码中 我不太确定它的含义 例如 top links m gt links 这条线有什么作用 另外 我可以在哪里阅读相关内容 See 箭头操作员 http perldoc perl org perlop html The

随机推荐

  • java scope_Spring scope属性详解

    scope用来声明IOC容器中的对象应该处的限定场景或者说该对象的存活空间 即在IOC容器在 对象进入相应的scope之前 生成并装配这些对象 在该对象不再处于这些scope的限定之后 容器通常会销毁这些对象 打个比方吧 我们都是处在社会
  • Qt 信号与信号,信号与槽

    在写程序的时候 一直用到Qt的信号与槽机制 1 我们可以一个信号连接多个槽例如 connect slider SIGNAL valueChanged int this SLOT upDateValue int connect slider
  • Linux服务管理--SAMBA服务

    Linux网络服务 SAMBA 1 Samba 概述 SMB Server Messages Block 信息服务块 是一种在局域网上共享文件和打印机的一种通信协议 它为局域网内的不同操作系统的计算机之间提供文件及打印机等资源的共享服务 S
  • Vue学习:数据绑定

    div div
  • Cesium加载天地图中文标注服务和谷歌影像服务

    Cesium加载天地图中文标注服务和谷歌影像服务 直接上代码 自从天地图使用token之后 之前写的Cesium添加天地图图层服务的就无法使用了 所以重新写一个可以使用的 直接上代码 关闭全球光照 默认为关闭 this viewer sce
  • 关于安卓上pcm文件转wav全是噪音解决办法

    1 一开始发现8bit的pcm能正常转换 但换成16bit转换出来全是噪音 网上资料也不全 思考了很久 突然想起大小端的问题 进行大小端处理后再进行转换 完美播放 下面贴出大小端转换方法 public class BigorLittle p
  • leetcode-140. 单词拆分 II (字典树/dp + 回溯法) + 字节测开字典树算法题

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict 在字符串中增加空格来构建一个句子 使得句子中所有的单词都在词典中 返回所有这些可能的句子 说明 分隔时可以重复使用字典中的单词 你可以假设字典中没有重复的单词 示例 1
  • 2023.3.12-2017年蓝桥杯B组初赛题解

    目录 1 方格分割 这题一眼dfs 就是讨论每一层 选择不同的方块进行分割 因为它是中心对称的所以我们只用讨论一半就行了 AC代码 include
  • 【Java代码规范】阿里编码规约 VS CheckStyle

    全文速览 1 关于代码编码质量 2 如何小成本有效管理企业内的编码规范 2 1 阿里编码规约IDE插件 2 2 CheckStyle IDE插件 3 如何在代码提交中检验规范 3 1 阿里编码规约配置git precommit check
  • Android AIDL中支持的数据类型

    AIDL支持的数据类型分为如下几种 八种基本数据类型 byte char short int long float double boolean String CharSequence 实现了Parcelable接口的数据类型 List 类
  • 10张架构图详解数据中台,附全套数据中台PPT

    数据中台到底是什么 几年过去了 一直众说纷 笔者认为数据中台不应该是一个单纯的系统或者是一个软件工具 而应该是一套架构 一套数据流转模式 数据中台需要采集数据作为原材料进行数据加工 数据建模 然后分门别类地储存 再根据实际的业 务场景 打造
  • PLSQLDeveloper14连接Oracle数据库

    若是想临时连接可以不用配置tns文件在plsql登录窗口输入 IP PORT SID 但是oci库和Oracle主目录还是要进行配置 否则无法解析url字符串 配置tns连接oracle数据库请参考以下内容 情形一 PLSQLDevelop
  • git创建远程分支

    一 创建远程分支 git clone https XXXXX git branch 查看当前本地分支 只有master git checkout b query vip 在本地创建 query vip 分支 git push origin
  • 计算工作日时长

    计算工作日时长 工具类说明 mapWorkDay 自定义节假日 主要针对国内每年制定发布的国内假日及补班时间 一般维护到数据库 每年更新一次 针对特殊日期标识 工作日 节假日 dateUnit 时间计算精确单位 天 小时 分钟 秒等 代码
  • python-中文闲聊的GPT2模型首次使用笔记

    项目地址 https github com yangjianxin1 GPT2 chitchat 运行项目 下载bin模型地址 https github com yangjianxin1 GPT2 chitchat model share
  • Chisel 教程翻译 之 第三章 构建过程和测试 of 《Digital Design with Chisel》

    3 Build Process and Testing 21 3 1 Building your Project with sbt 21 3 1 1 Source Organization 21 3 1 2 Running sbt 23 3
  • win10系统定位服务器地址,win10系统定位服务器地址

    win10系统定位服务器地址 内容精选 换一换 将NFS文件系统挂载到Windows IIS服务器时 报错路径格式不支持 挂载失败 IIS Web服务器的物理路径错误 根据可能原因进行故障排查 如图1为文件系统的挂载地址 如图2需填写的物理
  • TV二次侧为什么必须接地?

    TV二次侧为什么必须接地 答 TV二次侧接地属保护接地 为防止一 二次侧绝缘损坏击穿 高电压串到二次侧来 对人身和设备造成危险 所以二次侧必须接地
  • xcode安装pod

    Mac终端 1 升级mac本地ruby环境 终端中输入 gem update system 如果出现权限问题 请在终端内输入sudo gem update system 2 更换镜像 移除现有镜像 gem sources remove ht
  • perl实现verilog ifdef所在域的判断

    功能描述 perl实现verilog ifdef所在域的判断 1 emacs verilog mode用于实例化很方便 但是常见项目 均存在大量ifdef的预编译命令 而emacs verilog mode不支持ifdef 2 手动实例化