我总是感谢你的帮助。我是一名电气工程师。我正在使用一种工具进行电路的时序分析。我想在两个不同电压(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
答案 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]+
提取电压gensub
值FILENAME
。
然后,您获得data arrival time
作为第一个文件$4
的第4列变量FNR==NR
,以及第二个FNR!=NR
,您可以直接更改插值时间$4
,并打印每一行$0
。
为了更具可读性,我允许您添加if
条件以将插值时间$4
修改更长时间。始终使用i_time_2
,因为您当前正在阅读第二个文件。