-3

我在文本文件中有一个输入,例如:

Time(1ps)  *_sysclock *hy_dvdd_0 *y_vdd18_0 *s_enabled *lpi_clk_0
========== ========== ========== ========== ========== ==========
1000000000 1          1          1          11         1         
1000000045 1          1          1          11         0         
1000008365 1          1          1          11         1         
1000009824 0          1          1          11         1         
1000016685 0          1          1          11         0         
1000025005 0          1          1          11         1         
1000033325 0          1          1          11         0         
1000035828 1          1          1          11         0         
1000041645 1          1          1          11         1         
1000049965 1          1          1          11         0         
1000058285 1          1          1          11         1         
1000061832 0          1          1          11         1         
1000066605 0          1          1          11         0  

我在这里要做的是:第二列表示时钟边缘,第一列表示时间。我需要测量时钟频率。所以我的要求是,因为这个脚本取第一个值取决于我运行脚本的时间,所以当时钟值从初始值改变时,在上面的例子中初始值为 1,所以当它变为 0 时,那时我想将第 1 列的值存储在一个变量中,当时钟值再次变为 1 时,我想存储第 1 列的值以获得时钟脉冲持续时间。

基于此,我想将这些时间差异与一些预定义的值进行比较。

你们专家能帮我解决这个问题吗?

提前谢谢大家。

预期的 O/P 是:我需要输出告诉我边缘之间的差异......就像上面的例子一样:时钟边缘发生第一次变化的“1000009824”之间的差异。和“1000061832”,其中时钟边沿值再次为 0,表示一个完整的时钟周期。

4

1 回答 1

1

假设您的输入来自 STDIN。您可能想忽略前两行:

<> for 1..2;

然后,你可以读入一行数据:

my $line = <>;                   #read line from STDIN
my @initial = split(' ', $line);  #split on whitespace

您可以阅读更多行,直到看到更改:

my @final;
while ($line = <>) {
    @final = split(' ', $line);
    last if $final[1] != $initial[1];
}

现在您可以比较时间戳:

my $diff = $final[0] - $initial[0];
print "$initial[0] to $final[0] is $diff\n";

我建议将该行读入散列,这样您就可以使用真实的列名而不是数组索引……但这取决于您。

于 2013-08-26T06:52:20.680 回答