如何解决创建Graphviz点库/导入 lib.dot rtl.dot
TLDR
为了使我拥有尽可能自动生成的基于文本的图形文档,我希望能够定义几种节点类型,并使这些定义可导入
详细说明
我正在研究project,在这里我会自动生成以VHDL编写的硬件设计的Graphviz点RTL图。我正在定义的节点的定义很复杂而且很粗糙,应该对用户隐藏。我希望能够定义几种节点类型,并使这些定义可导入并易于实例化。我开始感觉到graphviz / dot可能不是正确的解决方案,而我会高兴地放弃Graphviz以获得更好的东西。我只想生成尽可能自动生成的基于文本的图形文档。目前,我生成了一个复杂的节点定义,例如:
Full_Adder_1bit [shape=plaintext,label=<
<table border='1' cellborder='0' cellspacing='0'>
<tr><td>Full_Adder_1bit</td></tr>
<tr>
<td><table border='0' cellborder='1' cellspacing='0' color='green'>
<tr><td port='A'> A </td></tr>
<tr><td port='B'> B </td></tr>
<tr><td port='Cin'> Cin </td></tr>
</table></td>
<td><table border='0' cellborder='1' cellspacing='0' color='red'>
<tr><td port='Sum'> Sum </td></tr>
<tr><td port='Cout'> Cout </td></tr>
</table></td>
</tr>
</table> >]
并且为了使用户能够使用它来记录其设计,他们必须正确使用node关键字,然后创建要连接的节点/端口。
node [shape=plaintext,label=<
<table border='1' cellborder='0' cellspacing='0'>
<tr><td>Full_Adder_1bit</td></tr>
<tr>
<td><table border='0' cellborder='1' cellspacing='0' color='green'>
<tr><td port='A'> A </td></tr>
<tr><td port='B'> B </td></tr>
<tr><td port='Cin'> Cin </td></tr>
</table></td>
<td><table border='0' cellborder='1' cellspacing='0' color='red'>
<tr><td port='Sum'> Sum </td></tr>
<tr><td port='Cout'> Cout </td></tr>
</table></td>
</tr>
</table> >]
// -- MAIN --
add1:Cout -> add2:Cin
add2:Cout -> add3:Cin
add3:Cout -> add4:Cin
This question没有回答我的问题,因为我想做的是这样:
lib.dot
Full_Adder_1bit [shape=plaintext,label=<
<table border='1' cellborder='0' cellspacing='0'>
<tr><td>Full_Adder_1bit</td></tr>
<tr>
<td><table border='0' cellborder='1' cellspacing='0' color='green'>
<tr><td port='A'> A </td></tr>
<tr><td port='B'> B </td></tr>
<tr><td port='Cin'> Cin </td></tr>
</table></td>
<td><table border='0' cellborder='1' cellspacing='0' color='red'>
<tr><td port='Sum'> Sum </td></tr>
<tr><td port='Cout'> Cout </td></tr>
</table></td>
</tr>
</table> >]
rtl.dot
include(`lib.dot')
add1 : instance of (Full_Adder_1bit)
add2 : instance of (Full_Adder_1bit)
add3 : instance of (Full_Adder_1bit)
add4 : instance of (Full_Adder_1bit)
// -- MAIN --
add1:Cout -> add2:Cin
add2:Cout -> add3:Cin
add3:Cout -> add4:Cin
解决方法
您可以使用c预处理器
或使用子图来控制哪些节点获得哪个标签标签 (添加了一些闸门以获得更多说明性示例)
例如
digraph G {
rankdir=LR
// definitions
subgraph Full_Adder_1bit { node [shape=plaintext,label=<
<table border='1' cellborder='0' cellspacing='0'>
<tr><td>Full_Adder_1bit</td></tr>
<tr>
<td><table border='0' cellborder='1' cellspacing='0' color='green'>
<tr><td port='A'> A </td></tr>
<tr><td port='B'> B </td></tr>
<tr><td port='Cin'> Cin </td></tr>
</table></td>
<td><table border='0' cellborder='1' cellspacing='0' color='red'>
<tr><td port='Sum'> Sum </td></tr>
<tr><td port='Cout'> Cout </td></tr>
</table></td>
</tr>
</table> >]
}
subgraph NAND {
node[label=<<table border="0" cellspacing="0" cellborder="1">
<tr><td port='A'>A</td><td port='out' rowspan="2">NAND</td></tr>
<tr><td port='B'>B</td></tr>
</table>> shape=none margin=0]
}
subgraph AND {
node[label=<<table border="0" cellspacing="0" cellborder="1">
<tr><td port='A'>A</td><td port='out' rowspan="2">AND</td></tr>
<tr><td port='B'>B</td></tr>
</table>> shape=none margin=0]
}
subgraph NOR {
node[label=<<table border="0" cellspacing="0" cellborder="1">
<tr><td port='A'>A</td><td port='out' rowspan="2">NOR</td></tr>
<tr><td port='B'>B</td></tr>
</table>> shape=none margin=0]
}
subgraph OR {
node[label=<<table border="0" cellspacing="0" cellborder="1">
<tr><td port='A'>A</td><td port='out' rowspan="2">OR</td></tr>
<tr><td port='B'>B</td></tr>
</table>> shape=none margin=0]
}
subgraph NOT {
node[label=<<table border="0" cellspacing="0" cellborder="1">
<tr><td port='A'>A</td><td port='out' >NOT</td></tr>
</table>> shape=none margin=0]
}
subgraph Point { node[shape=point xlabel="\N"] }
// declarations
subgraph Point { A_xor B_xor out_xor }
subgraph AND { and1 and2 }
subgraph NOT { not1 not2 }
subgraph OR { or1 }
// connections
A_xor->and1:A
A_xor->not1:A not1:out->and2:A
B_xor->and2:B
B_xor->not2:A not2:out->and1:B
and1:out->or1:A
and2:out->or1:B
or1:out->out_xor
subgraph Full_Adder_1bit {
add1:Cout -> add2:Cin
add2:Cout -> add3:Cin
add3:Cout -> add4:Cin
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。