0

我正在开发隐私保护验证工具,我使用 yosys 来获取有问题的网表的拓扑顺序(使用 yosys 进行门级解析)。它运行良好,在大多数情况下都给了我正确的顺序。但是,当我在 iscas89 s386 中进行分配操作时,我添加了 and 以从单元格中获取此输出,但我得到了错误的输出顺序单元格(O1 O2 O3 O4 O5 O6)。下面我举个例子。

对于输入 01110110010 (在某个时钟周期内) s386 的预期输出是:11000000,但我得到:0011000

手动调试代码后,我发现错在assign操作的拓扑顺序,yosys没有考虑assign操作并保持原样。下面是网表和yosys输出

S386 网表:

module s386 ( GND, VDD, CK, R, v0, v1, v13_D_10, v13_D_11, v13_D_12, v13_D_6,v13_D_7, v13_D_8, v13_D_9, v2, v3, v4, v5, v6 );
 input GND, VDD, CK, R, v0, v1, v2, v3, v4, v5, v6;
output v13_D_10, v13_D_11, v13_D_12, v13_D_6, v13_D_7, v13_D_8, v13_D_9;
wire   v12, v11, v10, v9, v8, v7, Lv13_D_12, Lv13_D_11, Lv13_D_10,Lv13_D_9,
     Lv13_D_8, Lv13_D_7, Lv13_D_6, Lv13_D_5, Lv13_D_4, Lv13_D_3, Lv13_D_2,
     Lv13_D_1, Lv13_D_0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n12, n15, n16,
     n17, n18, n19, n20, n21, n22, n23, n24, n25, n26, n27, n28, n29, n30,
     n31, n32, n33, n34, n35, n36, n37, n38, n39, n40, n41, n42, n43, n44,
     n45, n46, n47, n48, n49, n50, n51, n52, n53, n54, n55, n56, n57, n58,
     n59, n60, n61, n62, n63, n64, n65, n66, n67, n68, n69, n70, n71, n72,
     n73, n74, n75, n76, n77, n78, n79, n80, n81, n82, n83, n84, n85, n86,
     n87, n88, n89, n90, n91, n92, n93, n94, n95, n96, n97, n98, n99, n100,
     n101, n102, n103, n104, n105, n106, n107, n108, n109, n110, n111,
     n112, n113, n114;
   assign v13_D_12 = Lv13_D_12;
   assign v13_D_11 = Lv13_D_11;
   assign v13_D_10 = Lv13_D_10;
   assign v13_D_9 = Lv13_D_9;
   assign v13_D_8 = Lv13_D_8;
   assign v13_D_7 = Lv13_D_7;
   assign v13_D_6 = Lv13_D_6;

AND2X1 O1 ( .A(Lv13_D_12), .B(Lv13_D_12), .Y(v13_D_12) );
AND2X1 O2 ( .A(Lv13_D_11), .B(Lv13_D_11), .Y(v13_D_11) );
AND2X1 O3 ( .A(Lv13_D_10), .B(Lv13_D_10), .Y(v13_D_10) );
AND2X1 O4 ( .A(Lv13_D_9), .B(Lv13_D_9), .Y(v13_D_9) );
AND2X1 O5 ( .A(Lv13_D_8), .B(Lv13_D_8), .Y(v13_D_8) );
AND2X1 O6 ( .A(Lv13_D_7), .B(Lv13_D_7), .Y(v13_D_7) );
AND2X1 O7 ( .A(Lv13_D_6), .B(Lv13_D_6), .Y(v13_D_6) );

 DFFSR \DFF_5/Q_reg  ( .D(Lv13_D_0), .CLK(CK), .R(R), .Q(v7) );
 DFFSR \DFF_4/Q_reg  ( .D(Lv13_D_1), .CLK(CK), .R(R), .Q(v8) );
 DFFSR \DFF_1/Q_reg  ( .D(Lv13_D_4), .CLK(CK), .R(R), .Q(v11) );
 DFFSR \DFF_0/Q_reg  ( .D(Lv13_D_5), .CLK(CK), .R(R), .Q(v12) );
 DFFSR \DFF_3/Q_reg  ( .D(Lv13_D_2), .CLK(CK), .R(R), .Q(v9) );
 DFFSR \DFF_2/Q_reg  ( .D(Lv13_D_3), .CLK(CK), .R(R), .Q(v10) );
 INVX1 U1 ( .A(n75), .Y(n1) );
 INVX1 U2 ( .A(v0), .Y(n2) );
 INVX1 U3 ( .A(v1), .Y(n3) );
 INVX1 U4 ( .A(n41), .Y(n4) );
 INVX1 U5 ( .A(n101), .Y(n5) );
 INVX1 U6 ( .A(v4), .Y(n6) );
 INVX1 U7 ( .A(v5), .Y(n7) );
 INVX1 U8 ( .A(v6), .Y(n8) );
 INVX1 U9 ( .A(v12), .Y(n9) );
 INVX1 U12 ( .A(v9), .Y(n12) );
 OR2X1 U15 ( .A(n15), .B(n16), .Y(Lv13_D_9) );
 AND2X1 U16 ( .A(n17), .B(n18), .Y(n15) );
 AND2X1 U17 ( .A(n19), .B(n3), .Y(n18) );
 AND2X1 U18 ( .A(n109), .B(n113), .Y(n19) );
 AND2X1 U19 ( .A(n20), .B(v4), .Y(n17) );
 AND2X1 U20 ( .A(n21), .B(n5), .Y(n20) );
 AND2X1 U21 ( .A(n8), .B(n16), .Y(Lv13_D_8) );
 AND2X1 U22 ( .A(n22), .B(n23), .Y(Lv13_D_7) );
 OR2X1 U23 ( .A(n24), .B(n25), .Y(n23) );
 AND2X1 U24 ( .A(n26), .B(n111), .Y(n24) );
 OR2X1 U25 ( .A(n27), .B(n28), .Y(Lv13_D_6) );
 AND2X1 U26 ( .A(v5), .B(n29), .Y(n28) );
 AND2X1 U27 ( .A(n30), .B(n22), .Y(n27) );
 AND2X1 U28 ( .A(n31), .B(n106), .Y(n30) );
 OR2X1 U29 ( .A(n32), .B(n33), .Y(n31) );
 AND2X1 U30 ( .A(n114), .B(v4), .Y(n33) );
 AND2X1 U31 ( .A(n34), .B(n35), .Y(n32) );
 OR2X1 U32 ( .A(v2), .B(n114), .Y(n35) );
 OR2X1 U33 ( .A(v3), .B(n111), .Y(n34) );
 OR2X1 U34 ( .A(n36), .B(n29), .Y(Lv13_D_5) );
 AND2X1 U35 ( .A(n37), .B(n22), .Y(n36) );
 AND2X1 U36 ( .A(n112), .B(n38), .Y(n37) );
 OR2X1 U37 ( .A(n39), .B(n26), .Y(n38) );
 AND2X1 U38 ( .A(n40), .B(v3), .Y(n39) );
 AND2X1 U39 ( .A(n41), .B(n106), .Y(n40) );
 OR2X1 U40 ( .A(n42), .B(n43), .Y(Lv13_D_4) );
 AND2X1 U41 ( .A(n22), .B(n44), .Y(n43) );
 OR2X1 U42 ( .A(n45), .B(n46), .Y(n44) );
 OR2X1 U43 ( .A(n114), .B(n25), .Y(n46) );
 AND2X1 U44 ( .A(n47), .B(v2), .Y(n45) );
 AND2X1 U45 ( .A(n106), .B(n111), .Y(n47) );
AND2X1 U46 ( .A(n29), .B(n7), .Y(n42) );
AND2X1 U47 ( .A(n48), .B(n49), .Y(n29) );
AND2X1 U48 ( .A(n50), .B(n107), .Y(n49) );
OR2X1 U49 ( .A(n51), .B(n52), .Y(Lv13_D_3) );
AND2X1 U50 ( .A(n53), .B(n54), .Y(n51) );
OR2X1 U51 ( .A(n55), .B(n56), .Y(n54) );
AND2X1 U52 ( .A(n57), .B(v1), .Y(n55) );
AND2X1 U53 ( .A(n110), .B(n7), .Y(n57) );
OR2X1 U54 ( .A(n58), .B(n59), .Y(Lv13_D_2) );
OR2X1 U55 ( .A(n52), .B(n60), .Y(n59) );
AND2X1 U56 ( .A(n61), .B(n62), .Y(n60) );
AND2X1 U57 ( .A(n2), .B(n7), .Y(n61) );
AND2X1 U58 ( .A(n63), .B(v1), .Y(n58) );
AND2X1 U59 ( .A(v0), .B(n53), .Y(n63) );
AND2X1 U60 ( .A(n64), .B(n65), .Y(Lv13_D_12) );
AND2X1 U61 ( .A(n110), .B(n2), .Y(n65) );
AND2X1 U62 ( .A(n62), .B(v5), .Y(n64) );
OR2X1 U63 ( .A(n66), .B(n67), .Y(Lv13_D_11) );
OR2X1 U64 ( .A(n52), .B(n16), .Y(n67) );
AND2X1 U65 ( .A(n68), .B(n69), .Y(n16) );
AND2X1 U66 ( .A(v0), .B(n110), .Y(n69) );
AND2X1 U67 ( .A(n12), .B(n53), .Y(n68) );
AND2X1 U68 ( .A(n109), .B(n70), .Y(n52) );
OR2X1 U69 ( .A(n71), .B(n72), .Y(n70) );
AND2X1 U70 ( .A(n56), .B(n73), .Y(n72) );
OR2X1 U71 ( .A(n74), .B(n2), .Y(n56) );
AND2X1 U72 ( .A(v1), .B(n12), .Y(n74) );
AND2X1 U73 ( .A(n75), .B(n21), .Y(n71) );
AND2X1 U74 ( .A(n76), .B(n21), .Y(n66) );
AND2X1 U75 ( .A(n12), .B(n9), .Y(n21) );
AND2X1 U76 ( .A(n77), .B(n109), .Y(n76) );
OR2X1 U77 ( .A(n78), .B(n25), .Y(n77) );
AND2X1 U78 ( .A(n26), .B(n112), .Y(n78) );
AND2X1 U79 ( .A(n107), .B(n114), .Y(n26) );
AND2X1 U80 ( .A(n79), .B(n62), .Y(Lv13_D_10) );
AND2X1 U81 ( .A(n53), .B(n108), .Y(n62) );
AND2X1 U82 ( .A(n73), .B(n80), .Y(n53) );
AND2X1 U83 ( .A(n9), .B(n106), .Y(n80) );
AND2X1 U84 ( .A(v1), .B(n81), .Y(n79) );
OR2X1 U85 ( .A(n82), .B(n109), .Y(n81) );
AND2X1 U86 ( .A(v5), .B(v0), .Y(n82) );
AND2X1 U87 ( .A(n50), .B(n83), .Y(Lv13_D_1) );
OR2X1 U88 ( .A(n84), .B(n85), .Y(n83) );
AND2X1 U89 ( .A(n48), .B(n106), .Y(n85) );
AND2X1 U90 ( .A(n73), .B(n105), .Y(n48) );
AND2X1 U91 ( .A(n111), .B(n113), .Y(n73) );
AND2X1 U92 ( .A(n86), .B(n9), .Y(n84) );
OR2X1 U93 ( .A(n87), .B(n88), .Y(n86) );
AND2X1 U94 ( .A(n89), .B(n106), .Y(n88) );
OR2X1 U95 ( .A(n90), .B(n91), .Y(n89) );
AND2X1 U96 ( .A(v4), .B(n92), .Y(n91) );
OR2X1 U97 ( .A(n93), .B(n114), .Y(n92) );
AND2X1 U98 ( .A(v2), .B(n111), .Y(n93) );
AND2X1 U99 ( .A(n94), .B(v3), .Y(n90) );
AND2X1 U100 ( .A(n112), .B(n4), .Y(n94) );
AND2X1 U101 ( .A(n113), .B(v2), .Y(n41) );
AND2X1 U102 ( .A(n107), .B(n95), .Y(n87) );
OR2X1 U103 ( .A(n96), .B(n97), .Y(n95) );
AND2X1 U104 ( .A(n112), .B(n113), .Y(n97) );
AND2X1 U105 ( .A(n98), .B(v5), .Y(n96) );
AND2X1 U106 ( .A(n114), .B(n111), .Y(n98) );
AND2X1 U107 ( .A(n22), .B(n99), .Y(Lv13_D_0) );
OR2X1 U108 ( .A(n100), .B(n25), .Y(n99) );
AND2X1 U109 ( .A(n6), .B(n5), .Y(n25) );
OR2X1 U110 ( .A(n111), .B(n102), .Y(n101) );
OR2X1 U111 ( .A(v3), .B(n107), .Y(n102) );
AND2X1 U112 ( .A(n107), .B(n103), .Y(n100) );
OR2X1 U113 ( .A(n111), .B(n113), .Y(n103) );
AND2X1 U114 ( .A(n9), .B(n50), .Y(n22) );
AND2X1 U115 ( .A(n1), .B(n104), .Y(n50) );
AND2X1 U116 ( .A(n12), .B(n109), .Y(n104) );
OR2X1 U117 ( .A(v1), .B(n2), .Y(n75) );
INVX1 U118 ( .A(n9), .Y(n105) );
INVX1 U119 ( .A(v11), .Y(n106) );
INVX1 U120 ( .A(n106), .Y(n107) );
INVX1 U121 ( .A(n12), .Y(n108) );
INVX1 U122 ( .A(v10), .Y(n109) );
INVX1 U123 ( .A(n109), .Y(n110) );
INVX1 U124 ( .A(v8), .Y(n111) );
INVX1 U125 ( .A(n111), .Y(n112) );
INVX1 U126 ( .A(v7), .Y(n113) );
INVX1 U127 ( .A(n113), .Y(n114) );
endmodule

Yosys 命令:

read_verilog s386.v
hierarchy -generate * o:Y o:Q i:*
torder -stop DFFSR Q

Yosys输出:

 loop O1
 loop O2
 loop O3
 loop O4
 loop O5
 loop O6
 loop O7
 cell U2
 cell U117
 cell U1
 cell U12
 cell U122
 cell U116
 cell U115
 cell U9
 cell U114
 cell U124
 cell U125
 cell U126
 cell U101
 cell U119
 cell U39
 cell U38
 cell U120
 cell U127
 cell U79
 cell U37
 cell U36
 cell U35
 cell U48
 cell U118
 cell U91
 cell U90
 cell U47
 cell U34
 cell DFF_0/Q_reg
 cell U111
 cell U110
 cell U5
 cell U6
 cell U109
 cell U43
 cell U45
 cell U44
 cell U42
 cell U41
 cell U7
 cell U46
 cell U40
 cell DFF_1/Q_reg
 cell U123
 cell U53
 cell U52
 cell U72
 cell U71
 cell U51
 cell U83
 cell U82
 cell U50
 cell U70
 cell U75
 cell U73
 cell U69
 cell U68
 cell U49
 cell DFF_2/Q_reg
 cell U57
 cell U121
 cell U81
 cell U56
 cell U55
 cell U59
 cell U58
 cell U54
 cell DFF_3/Q_reg
 cell U89
 cell U104
 cell U106
 cell U105
 cell U103
 cell U102
 cell U98
 cell U97
 cell U96
 cell U4
 cell U100
 cell U99
 cell U95
 cell U94
 cell U93
 cell U92
 cell U88
 cell U87
 cell DFF_4/Q_reg
 cell U113
 cell U112
 cell U108
 cell U107
 cell DFF_5/Q_reg
 cell U61
 cell U62
 cell U60
 cell O1
 cell U66
 cell U67
 cell U65
 cell U64
 cell U78
 cell U77
 cell U76
 cell U74
 cell U63
 cell O2
 cell U86
 cell U85
 cell U84
 cell U80
 cell O3
 cell U18
 cell U3
 cell U17
 cell U20
 cell U19
 cell U16
 cell U15
 cell O4
 cell U8
 cell U21
 cell O5
 cell U24
 cell U23
 cell U22
 cell O6
 cell U26
 cell U30
 cell U32
 cell U33
 cell U31
 cell U29
 cell U28
 cell U27
 cell U25
 cell O7

我非常感谢您的帮助和反馈。

4

0 回答 0