我正在开发隐私保护验证工具,我使用 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
我非常感谢您的帮助和反馈。