两个文件之间的插值

时间:2016-03-26 02:03:36

标签: awk interpolation

我总是感谢你的帮助。我是一名电气工程师。我正在使用一种工具进行电路的时序分析。我想在两个不同电压(0.945V和0.78V)的时序报告中插入结果。如果电压降低,则数据到达时间增加。

例如, 在0.945V,数据到达时间为0.70 在0.78V时,数据到达时间为0.72

我希望在数据到达时间达到0.714时知道电压,使用线性插值。

在这种情况下,我可以计算 (0.78-0.945)/(0.72-0.70)的 0.714+(0.945-0.70 (0.78-0.945)/(0.72-0.70))

电压信息如0.78,0.945和目标数据到达时间0.714是固定的。但是,改变了0.945V和0.78V的数据到达时间。

还有一项要求。如果0.945V的数据到达时间高于0.714,则输出为0.714。

0p945.rpt_in:

  Startpoint: dtu_inst_d[23]
               (input port)
  Endpoint: ifu_exu_aluop_d[0]
               (output port)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[23] (in)                             0.00       0.00 f
  U533/Y (INVX16_LVT)                             0.52       0.52 r
  U739/Y (AND4X1_LVT)                             0.07       0.58 r
  U572/Y (NAND4X0_LVT)                            0.05       0.64 f
  U607/Y (INVX0_LVT)                              0.04       0.68 r
  U609/Y (AO221X1_LVT)                            0.02       0.70 r
  ifu_exu_aluop_d[0] (out)                        0.00       0.70 r
  data arrival time                                          0.70
  ----------------------------------------------------------------------
  (Path is unconstrained)


  Startpoint: dtu_inst_d[21]
               (input port)
  Endpoint: imsk_ff_q_reg_0_
               (rising edge-triggered flip-flop clocked by rclk)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[21] (in)                             0.00       0.00 f
  U613/Y (INVX8_LVT)                              0.44       0.44 r
  U702/Y (XOR2X1_LVT)                             0.08       0.52 r
  U984/Y (NAND4X0_LVT)                            0.04       0.56 f
  U604/Y (OR3X1_LVT)                              0.05       0.61 f
  U605/Y (AO22X1_LVT)                             0.04       0.65 f
  U986/Y (NOR4X1_LVT)                             0.06       0.71 r
  imsk_ff_q_reg_0_/D (DFFX1_LVT)                  0.02       0.73 r
  data arrival time                                          0.73
  ----------------------------------------------------------------------
  (Path is unconstrained)
.
.
.

0p78.rpt_in:

  Startpoint: dtu_inst_d[23]
               (input port)
  Endpoint: ifu_exu_aluop_d[0]
               (output port)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[23] (in)                             0.00       0.00 f
  U533/Y (INVX16_LVT)                             0.52       0.52 r
  U739/Y (AND4X1_LVT)                             0.07       0.58 r
  U572/Y (NAND4X0_LVT)                            0.05       0.64 f
  U607/Y (INVX0_LVT)                              0.04       0.68 r
  U609/Y (AO221X1_LVT)                            0.05       0.72 r
  ifu_exu_aluop_d[0] (out)                        0.00       0.72 r
  data arrival time                                          0.72
  ----------------------------------------------------------------------
  (Path is unconstrained)


  Startpoint: dtu_inst_d[21]
               (input port)
  Endpoint: imsk_ff_q_reg_0_
               (rising edge-triggered flip-flop clocked by rclk)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[21] (in)                             0.00       0.00 f
  U613/Y (INVX8_LVT)                              0.44       0.44 r
  U702/Y (XOR2X1_LVT)                             0.08       0.52 r
  U984/Y (NAND4X0_LVT)                            0.04       0.56 f
  U604/Y (OR3X1_LVT)                              0.05       0.61 f
  U605/Y (AO22X1_LVT)                             0.04       0.65 f
  U986/Y (NOR4X1_LVT)                             0.06       0.71 r
  imsk_ff_q_reg_0_/D (DFFX1_LVT)                  0.05       0.76 r
  data arrival time                                          0.76
  ----------------------------------------------------------------------
  (Path is unconstrained)
.
.
.

Output.rpt_in需要:

Startpoint: dtu_inst_d[23]
               (input port)
  Endpoint: ifu_exu_aluop_d[0]
               (output port)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[23] (in)                             0.00       0.00 f
  U533/Y (INVX16_LVT)                             0.52       0.52 r
  U739/Y (AND4X1_LVT)                             0.07       0.58 r
  U572/Y (NAND4X0_LVT)                            0.05       0.64 f
  U607/Y (INVX0_LVT)                              0.04       0.68 r
  U609/Y (AO221X1_LVT)                            0.05       0.72 r
  ifu_exu_aluop_d[0] (out)                        0.00       0.72 r
  data arrival time                                          0.8295
  ----------------------------------------------------------------------
  (Path is unconstrained)


  Startpoint: dtu_inst_d[21]
               (input port)
  Endpoint: imsk_ff_q_reg_0_
               (rising edge-triggered flip-flop clocked by rclk)
  Path Group: (none)
  Path Type: max

  Point                                           Incr       Path
  ----------------------------------------------------------------------
  input external delay                            0.00       0.00 f
  dtu_inst_d[21] (in)                             0.00       0.00 f
  U613/Y (INVX8_LVT)                              0.44       0.44 r
  U702/Y (XOR2X1_LVT)                             0.08       0.52 r
  U984/Y (NAND4X0_LVT)                            0.04       0.56 f
  U604/Y (OR3X1_LVT)                              0.05       0.61 f
  U605/Y (AO22X1_LVT)                             0.04       0.65 f
  U986/Y (NOR4X1_LVT)                             0.06       0.71 r
  imsk_ff_q_reg_0_/D (DFFX1_LVT)                  0.05       0.76 r
  data arrival time                                          0.714
  ----------------------------------------------------------------------
  (Path is unconstrained)
.
.
.

每个文件中有超过1000个路径。 我认为awk可以做到这一点,但我不知道该怎么办。任何帮助表示赞赏。提前致谢。

Jaeyoung

1 个答案:

答案 0 :(得分:2)

小心,你正在混合时间和电压! 0.714是时间,而0.8295是电压!

awk -v time=0.714 '
FNR==1 {
i_file++;
V[i_file] = gensub(/0p([0-9]+)\.rpt_in/, "\\1", "g", FILENAME)}

FNR==NR && /data arrival time/ {i_time_1++; time_1[i_time_1] = $4}

FNR!=NR && /data arrival time/ {i_time_2++; time_2[i_time_2] = $4;
$4 = TO_BE_MODIFIED}

FNR!=NR {print $0}' 0p945.rpt_in 0p78.rpt_in

首先,您可以将时间存储为变量-v 然后,您可以使用V上的[0-9]+提取电压gensubFILENAME。 然后,您获得data arrival time作为第一个文件$4的第4列变量FNR==NR,以及第二个FNR!=NR,您可以直接更改插值时间$4 ,并打印每一行$0

为了更具可读性,我允许您添加if条件以将插值时间$4修改更长时间。始终使用i_time_2,因为您当前正在阅读第二个文件。