私は tcl を初めて使用し、単純なケースのテキスト処理で使用したいと考えています。以下のフォーマットは、チップ設計で使用される Liberty (.lib ファイル) にあります。これについて何か助けていただければ幸いです。
これが私のファイルのスニペットです(テキスト処理は「値」に対してのみ行われます)
timing () {
related_pin : "clk";
timing_type : setup_rising;
rise_constraint (constraint_template_5X5) {
index_1 ("0.01, 0.05, 0.12, 0.2, 0.4");
index_2 ("0.005, 0.025, 0.06, 0.1, 0.3");
index_3 ("0.084, 0.84, 3.36, 8.4, 13.44") ;
values ( \
"1.1, 1.2, 1.3, 1.4, 1.5", \
"2.1, 2.2, 2.3, 2.4, 2.5", \
"3.1, 3.2, 3.3, 3.4, 3.5", \
"4.1, 4.2, 4.3, 4.4, 4.5", \
"5.1, 5.2, 5.3, 5.4, 5.5", \
"6.1, 6.2, 6.3, 6.4, 6.5", \
"7.1 ,7.2, 7.3, 7.4, 7.5", \
"8.1, 8.2, 8.3, 8.4, 8.5", \
"9.1, 9.2, 9.3, 9.4, 9.5", \
"10.1,10.2,10.3,10.4,10.5", \
"11.1,11.2,11.3,11.4,11.5", \
"12.1,12.2,12.3,12.4,12.5", \
"13.1,13.2,13.3,13.4,13.5", \
"14.1,14.2,14.3,14.4,14.5", \
"15.1,15.2,15.3,15.4,15.5", \
"16.1,16.2,16.3,16.4,16.5", \
"17.1,17.2,17.3,17.4,17.5", \
"18.1,18.2,18.3,18.4,18.5", \
"19.1,19.2,19.3,19.4,19.5", \
"20.1,20.2,20.3,20.4,20.5", \
"21.1,21.2,21.3,21.4,21.5", \
"22.1,22.2,22.3,22.4,22.5", \
"23.1,23.2,23.3,23.4,23.5", \
"24.1,24.2,24.3,24.4,24.5", \
"25.1,25.2,25.3,25.4,25.5", \
);
}
したがって、すべての「値」は 25 行 x 5 列のルックアップ テーブル形式であり、5 行 x 5 列のテーブル形式に変更したいと考えています。これを達成するために、次のようにマッピングを行う前に、index_3 の 5 つの値のどれが必要かをユーザーに尋ねたいと思います (index_3 行も削除します)。
C は index_3 に基づくユーザー定義の列です: (0.084 の場合は列 1、0.84 の場合は列 2、3.36 の場合は列 3、8.4 の場合は列 4、13.44 の場合は列 5)。*ユーザーが選択できる値は 1 つだけです
マッピング スキーム:
1,C -> row 1 column 1
2,C -> row 2 column 1
3,C -> row 3 column 1
4,C -> row 4 column 1
5,C -> row 5 column 1
6,C -> row 1 column 2
7,C -> row 2 column 2
8,C -> row 3 column 2
など..
例として、ユーザーが列 1 (index_3 からの値 0.084) を選択するとします --> これにより、「値」内のデータの最初の列全体がテキスト処理/配置されるように「選択」されます。
したがって、マッピング スキームに基づいて tcl によって実行される結果のテキスト処理は次のようになります。
index_1 ("0.01, 0.05, 0.12, 0.2, 0.4");
index_2 ("0.005, 0.025, 0.06, 0.1, 0.3");
values ( \
"1.1, 6.1, 11.1, 16.1, 21.1", \
"2.1, 7.1, 12.1, 17.1, 22.1", \
"3.1, 8.1, 13.1, 18.1, 23.1", \
"4.1, 9.1, 14.1, 19.1, 24.1", \
"5.1, 10.1,15.1, 20.1, 25.1", \
);
私の戦略はこれです:
「rise_constraint」を検索して、ファイル全体でテキスト処理する値をゼロにします
行 "index_3 (...)" をコメントアウトします。転載処理ファイルの行頭と行末に /* と */ を追加 (オプション)
選択した Index_3 値に基づいて、25 行 x 5 列のテーブルから 5 行 x 5 列のテーブルに「値」を変換します (「ユーザー定義の列の選択」)
他の行をそのまま再印刷します (テキスト処理された「値」を含む)
コーディングのリクエストを説明するために最善を尽くしました。このようなテキスト処理を行うことができるtclでの適切な方法を考えるのを手伝ってください。どうもありがとう!!