【问题标题】:gate level parsing using yosys使用 yosys 进行门级解析
【发布时间】:2015-11-19 22:42:08
【问题描述】:

我想解析以下顺序门级网表。我希望输出会给我门序(端口序),这样我就可以对代码进行其他计算。 我尝试使用 yosys 命令read_verilog s27.v 来做到这一点。我能够调试代码,但我无法获得单元库或任何可以让我获得门序的东西。

P.S:我尝试使用 abc 编译器,我只得到了主要的输入和输出顺序而不是门,我之前问过 yosys 是否可以这样做,我得到了积极的反馈。

module s27 ( GND, VDD, CK, R, G0, G1, G17, G2, G3 );
  input  GND, VDD, CK, R, G0, G1, G2, G3;
  output G17;
  wire   G5, G10, G6, G7, G13, n1, n2, n3, n4, n5, n6, n7, n8, n9, n11,    
         n12,n13, n14;
  DFFSR \DFF_2/Q_reg  ( .D(G13), .CLK(CK), .R(R), .Q(G7) );
  DFFSR \DFF_0/Q_reg  ( .D(G10), .CLK(CK), .R(R), .Q(G5) );
  DFFSR \DFF_1/Q_reg  ( .D(n1), .CLK(CK), .R(R), .Q(G6) );
  INVX1 U1 ( .A(G17), .Y(n1) );
  INVX1 U2 ( .A(G2), .Y(n2) );
  INVX1 U3 ( .A(G3), .Y(n3) );
  INVX1 U4 ( .A(G6), .Y(n4) );
  AND2X1 U5 ( .A(n5), .B(n2), .Y(G13) );
  AND2X1 U6 ( .A(G0), .B(G17), .Y(G10) );
  OR2X1 U7 ( .A(n6), .B(n7), .Y(G17) );
  OR2X1 U8 ( .A(n14), .B(n8), .Y(n7) );
  AND2X1 U9 ( .A(n5), .B(n9), .Y(n8) );
  OR2X1 U10 ( .A(G1), .B(n12), .Y(n5) );
  AND2X1 U11 ( .A(n3), .B(n9), .Y(n6) );
  OR2X1 U12 ( .A(G0), .B(n4), .Y(n9) );
  INVX1 U13 ( .A(G7), .Y(n11) );
  INVX1 U14 ( .A(n11), .Y(n12) );
  INVX1 U15 ( .A(G5), .Y(n13) );
  INVX1 U16 ( .A(n13), .Y(n14) );
endmodule

【问题讨论】:

  • 显然问题不在于解析(yosys 可以很好地解析这段代码)。但我并不完全清楚您希望 yosys 使用此代码做什么。您想确定门的拓扑顺序吗?这很简单:没有!此网表包含循环:./yosys -p 'hierarchy -generate * o:Y o:Q i:*; show' test.vi.imgur.com/bg11Qqu.png
  • @CliffordVienna 非常感谢。是的,我想确定门的拓扑顺序,不一定是这个 verilog 代码,并将这个顺序写入单独的文本文件。我想问你的第二件事,层次输出(网表循环)可以存储在文本文件或任何其他类型的数据文件中吗?非常感谢并感谢您的帮助
  • 您可以使用tee 命令将命令的输出写入文件:例如tee -o hierarchy_out.txt hierarchy。不确定这与“网表周期”思想有什么关系。如果你想获得周期(也就是强连接组件):使用例如scc -all_cell_types。目前还没有专门的命令来进行拓扑排序。如果您稍微描述一下您实际尝试对拓扑排序进行的操作,我会考虑编写一个打印该信息的 yosys 命令。但前提是我可以确信它对某些东西有用,当然..
  • 我正在扩展隐私保护验证工具 [dl.acm.org/citation.cfm?id=2755829],这将确保 IP 所有者和 IP 用户的隐私。然而,在本文中,只考虑了组合门,而不是顺序的,而且正如您所知,在顺序级别中,拓扑顺序非常重要,所以我需要它以正确的顺序在每个门中编写加密代码。我希望这很清楚,如果不是我可以解释更多,我真的不需要从头开始构建一个门解析器来获得门排序,并且 yosys 在解析方面已经做得很好
  • @CliffordVienna 除了上面的评论,我想告诉你,我们在纸质版中使用了 Veriwell 模拟器,它在组合基准测试中运行良好,因为我们并不关心评估顺序,但由于我们需要扩展它,我们希望包括我们有 DFF 和延迟的顺序,并且在那个级联中我们需要门的拓扑顺序。非常感谢

标签: yosys


【解决方案1】:

newly added torder command 按拓扑顺序打印设计中的单元格(如果存在这样的顺序)。例如:

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

此脚本应用于您发布的代码会产生以下输出:

module s27
  cell U4
  cell U12
  cell U3
  cell U11
  cell U15
  cell U16
  cell U13
  cell U14
  cell U10
  cell U9
  cell U8
  cell U7
  cell U6
  cell DFF_0/Q_reg
  cell U1
  cell DFF_1/Q_reg
  cell U2
  cell U5
  cell DFF_2/Q_reg

如果没有 -stop 选项,该命令还会为 DFF 输出端口创建依赖关系,这将导致循环。在这种情况下,该命令将打印循环并为剩余图形创建拓扑排序:

module s27
  loop DFF_2/Q_reg U10 U13 U14 U5
  loop DFF_0/Q_reg U15 U16 U6 U7 U8
  loop DFF_1/Q_reg U1 U11 U12 U4 U7
  cell U1
  cell DFF_1/Q_reg
  cell U4
  cell U12
  cell U3
  cell U11
  cell U15
  cell U16
  cell U2
  cell U5
  cell DFF_2/Q_reg
  cell U13
  cell U14
  cell U10
  cell U9
  cell U8
  cell U7
  cell U6
  cell DFF_0/Q_reg

我希望这会有所帮助。

【讨论】:

  • 这正是我们所需要的,我实现了它并且效果很好。非常感谢....
  • 您好,Cliforod 先生,我只想评论一下,在 torder 命令中没有包含分配操作,并且一些网表包含它,您能在这方面帮助我吗?
  • @Nevertoolate 请使用 Yosys 标签打开一个新问题。确保包含示例 verilog 代码、yosys 脚本和您获得的输出以及它与您想要的输出的不同之处。
  • 有没有将torder输出写入文本文件的命令,我知道write_verilog会写入设计输出,但是torder呢????
  • 试试“tee -o filename torder”。
猜你喜欢
  • 2019-03-14
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多