mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 06:03:23 +00:00
docs: moving code examples
Code now resides in `docs/source/code_examples`. `CHAPTER_Prog` -> `stubnets` `APPNOTE_011_Design_Investigation` -> `selections` and `show` `resources/PRESENTATION_Intro` -> `intro` `resources/PRESENTATION_ExSyn` -> `synth_flow` `resources/PRESENTATION_ExAdv` -> `techmap`, `macc`, and `selections` `resources/PRESENTATION_ExOth` -> `scrambler` and `axis` Note that generated images are not yet configured to build from the new code locations.
This commit is contained in:
parent
3d70867809
commit
dbc38d72cf
119 changed files with 264 additions and 905 deletions
|
@ -1,34 +0,0 @@
|
|||
digraph "cmos_demo" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n4 [ shape=octagon, label="a", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="b", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c10 [ shape=record, label="{{<p7> A|<p8> B|<p9> Y}|$g0\nNOR|{}}" ];
|
||||
c11 [ shape=record, label="{{<p7> A|<p9> Y}|$g1\nNOT|{}}" ];
|
||||
c12 [ shape=record, label="{{<p7> A|<p9> Y}|$g2\nNOT|{}}" ];
|
||||
c13 [ shape=record, label="{{<p7> A|<p8> B|<p9> Y}|$g3\nNOR|{}}" ];
|
||||
x0 [ shape=record, style=rounded, label="<s0> 1:1 - 0:0 " ];
|
||||
x0:e -> c13:p9:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
c14 [ shape=record, label="{{<p7> A|<p8> B|<p9> Y}|$g4\nNOR|{}}" ];
|
||||
x1 [ shape=record, style=rounded, label="<s0> 1:1 - 0:0 " ];
|
||||
x1:e -> c14:p8:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
x2 [ shape=record, style=rounded, label="<s0> 0:0 - 0:0 " ];
|
||||
x2:e -> c14:p9:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
n1 [ shape=diamond, label="$n4" ];
|
||||
n1:e -> c10:p9:w [color="black", label=""];
|
||||
n1:e -> c14:p7:w [color="black", label=""];
|
||||
n2 [ shape=diamond, label="$n5" ];
|
||||
n2:e -> c11:p9:w [color="black", label=""];
|
||||
n2:e -> c13:p7:w [color="black", label=""];
|
||||
n3 [ shape=diamond, label="$n6_1" ];
|
||||
n3:e -> c12:p9:w [color="black", label=""];
|
||||
n3:e -> c13:p8:w [color="black", label=""];
|
||||
n4:e -> c10:p8:w [color="black", label=""];
|
||||
n4:e -> c12:p7:w [color="black", label=""];
|
||||
n5:e -> c10:p7:w [color="black", label=""];
|
||||
n5:e -> c11:p7:w [color="black", label=""];
|
||||
n6:e -> x0:s0:w [color="black", label=""];
|
||||
n6:e -> x1:s0:w [color="black", label=""];
|
||||
n6:e -> x2:s0:w [color="black", label=""];
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
digraph "cmos_demo" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n4 [ shape=octagon, label="a", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="b", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="y[0]", color="black", fontcolor="black" ];
|
||||
n7 [ shape=octagon, label="y[1]", color="black", fontcolor="black" ];
|
||||
c11 [ shape=record, label="{{<p8> A|<p9> B}|$g0\nNOR|{<p10> Y}}" ];
|
||||
c12 [ shape=record, label="{{<p8> A}|$g1\nNOT|{<p10> Y}}" ];
|
||||
c13 [ shape=record, label="{{<p8> A}|$g2\nNOT|{<p10> Y}}" ];
|
||||
c14 [ shape=record, label="{{<p8> A|<p9> B}|$g3\nNOR|{<p10> Y}}" ];
|
||||
c15 [ shape=record, label="{{<p8> A|<p9> B}|$g4\nNOR|{<p10> Y}}" ];
|
||||
c11:p10:e -> c15:p8:w [color="black", label=""];
|
||||
c12:p10:e -> c14:p8:w [color="black", label=""];
|
||||
c13:p10:e -> c14:p9:w [color="black", label=""];
|
||||
n4:e -> c11:p9:w [color="black", label=""];
|
||||
n4:e -> c13:p8:w [color="black", label=""];
|
||||
n5:e -> c11:p8:w [color="black", label=""];
|
||||
n5:e -> c12:p8:w [color="black", label=""];
|
||||
c15:p10:e -> n6:w [color="black", label=""];
|
||||
c14:p10:e -> n7:w [color="black", label=""];
|
||||
n7:e -> c15:p9:w [color="black", label=""];
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
digraph "example" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n4 [ shape=octagon, label="a", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="b", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="c", color="black", fontcolor="black" ];
|
||||
n7 [ shape=octagon, label="clk", color="black", fontcolor="black" ];
|
||||
n8 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c12 [ shape=record, label="{{<p9> A|<p10> B}|$2\n$add|{<p11> Y}}" ];
|
||||
v0 [ label="2'00" ];
|
||||
c14 [ shape=record, label="{{<p9> A|<p10> B|<p13> S}|$3\n$mux|{<p11> Y}}" ];
|
||||
p1 [shape=box, style=rounded, label="PROC $1\nexample.v:3"];
|
||||
c12:p11:e -> c14:p10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c14:p11:e -> p1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n4:e -> c12:p9:w [color="black", label=""];
|
||||
n5:e -> c12:p10:w [color="black", label=""];
|
||||
n6:e -> c14:p13:w [color="black", label=""];
|
||||
n6:e -> p1:w [color="black", label=""];
|
||||
n7:e -> p1:w [color="black", label=""];
|
||||
p1:e -> n8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n8:e -> p1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v0:e -> c14:p9:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
digraph "example" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n6 [ shape=octagon, label="a", color="black", fontcolor="black" ];
|
||||
n7 [ shape=octagon, label="b", color="black", fontcolor="black" ];
|
||||
n8 [ shape=octagon, label="c", color="black", fontcolor="black" ];
|
||||
n9 [ shape=octagon, label="clk", color="black", fontcolor="black" ];
|
||||
n10 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c14 [ shape=record, label="{{<p11> A|<p12> B}|$2\n$add|{<p13> Y}}" ];
|
||||
c18 [ shape=record, label="{{<p15> CLK|<p16> D}|$7\n$dff|{<p17> Q}}" ];
|
||||
c20 [ shape=record, label="{{<p11> A|<p12> B|<p19> S}|$5\n$mux|{<p13> Y}}" ];
|
||||
v0 [ label="2'00" ];
|
||||
c21 [ shape=record, label="{{<p11> A|<p12> B|<p19> S}|$3\n$mux|{<p13> Y}}" ];
|
||||
x1 [shape=box, style=rounded, label="BUF"];
|
||||
x2 [shape=box, style=rounded, label="BUF"];
|
||||
n1 [ shape=diamond, label="$0\\y[1:0]" ];
|
||||
x2:e:e -> n1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c18:p17:e -> n10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n10:e -> c20:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c14:p13:e -> c21:p12:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3 [ shape=point ];
|
||||
c20:p13:e -> n3:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3:e -> c18:p16:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3:e -> x2:w:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x1:e:e -> c20:p19:w [color="black", label=""];
|
||||
c21:p13:e -> c20:p12:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> c14:p11:w [color="black", label=""];
|
||||
n7:e -> c14:p12:w [color="black", label=""];
|
||||
n8:e -> c21:p19:w [color="black", label=""];
|
||||
n8:e -> x1:w:w [color="black", label=""];
|
||||
n9:e -> c18:p15:w [color="black", label=""];
|
||||
v0:e -> c21:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
digraph "example" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n3 [ shape=octagon, label="a", color="black", fontcolor="black" ];
|
||||
n4 [ shape=octagon, label="b", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="c", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="clk", color="black", fontcolor="black" ];
|
||||
n7 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c11 [ shape=record, label="{{<p8> A|<p9> B}|$2\n$add|{<p10> Y}}" ];
|
||||
c15 [ shape=record, label="{{<p12> CLK|<p13> D}|$7\n$dff|{<p14> Q}}" ];
|
||||
c17 [ shape=record, label="{{<p8> A|<p9> B|<p16> S}|$5\n$mux|{<p10> Y}}" ];
|
||||
c17:p10:e -> c15:p13:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c11:p10:e -> c17:p9:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3:e -> c11:p8:w [color="black", label=""];
|
||||
n4:e -> c11:p9:w [color="black", label=""];
|
||||
n5:e -> c17:p16:w [color="black", label=""];
|
||||
n6:e -> c15:p12:w [color="black", label=""];
|
||||
c15:p14:e -> n7:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n7:e -> c17:p8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
digraph "example" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
v0 [ label="a" ];
|
||||
v1 [ label="b" ];
|
||||
v2 [ label="$2_Y" ];
|
||||
c4 [ shape=record, label="{{<p1> A|<p2> B}|$2\n$add|{<p3> Y}}" ];
|
||||
v0:e -> c4:p1:w [color="black", label=""];
|
||||
v1:e -> c4:p2:w [color="black", label=""];
|
||||
c4:p3:e -> v2:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -ex
|
||||
if false; then
|
||||
rm -f *.dot
|
||||
../../yosys example.ys
|
||||
../../yosys -p 'proc; opt; show -format dot -prefix splice' splice.v
|
||||
../../yosys -p 'techmap; abc -liberty ../../techlibs/cmos/cmos_cells.lib;; show -format dot -prefix cmos_00' cmos.v
|
||||
../../yosys -p 'techmap; splitnets -ports; abc -liberty ../../techlibs/cmos/cmos_cells.lib;; show -lib ../../techlibs/cmos/cmos_cells.v -format dot -prefix cmos_01' cmos.v
|
||||
../../yosys -p 'opt; cd sumprod; select a:sumstuff; show -format dot -prefix sumprod_00' sumprod.v
|
||||
../../yosys -p 'opt; cd sumprod; select a:sumstuff %x; show -format dot -prefix sumprod_01' sumprod.v
|
||||
../../yosys -p 'opt; cd sumprod; select prod; show -format dot -prefix sumprod_02' sumprod.v
|
||||
../../yosys -p 'opt; cd sumprod; select prod %ci; show -format dot -prefix sumprod_03' sumprod.v
|
||||
../../yosys -p 'opt; cd sumprod; select prod %ci2; show -format dot -prefix sumprod_04' sumprod.v
|
||||
../../yosys -p 'opt; cd sumprod; select prod %ci3; show -format dot -prefix sumprod_05' sumprod.v
|
||||
../../yosys -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_00' memdemo.v
|
||||
../../yosys -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_01 y %ci2:+$dff[Q,D] %ci*:-$mux[S]:-$dff' memdemo.v
|
||||
../../yosys submod.ys
|
||||
sed -i '/^label=/ d;' *.dot
|
||||
fi
|
||||
for dot_file in *.dot; do
|
||||
pdf_file=${dot_file%.dot}.pdf
|
||||
dot -Tpdf -o $pdf_file $dot_file
|
||||
done
|
|
@ -1,138 +0,0 @@
|
|||
digraph "memdemo" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n24 [ shape=octagon, label="clk", color="black", fontcolor="black" ];
|
||||
n25 [ shape=octagon, label="d", color="black", fontcolor="black" ];
|
||||
n26 [ shape=diamond, label="mem[0]", color="black", fontcolor="black" ];
|
||||
n27 [ shape=diamond, label="mem[1]", color="black", fontcolor="black" ];
|
||||
n28 [ shape=diamond, label="mem[2]", color="black", fontcolor="black" ];
|
||||
n29 [ shape=diamond, label="mem[3]", color="black", fontcolor="black" ];
|
||||
n30 [ shape=diamond, label="s1", color="black", fontcolor="black" ];
|
||||
n31 [ shape=diamond, label="s2", color="black", fontcolor="black" ];
|
||||
n32 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c36 [ shape=record, label="{{<p33> A|<p34> B}|$28\n$add|{<p35> Y}}" ];
|
||||
c37 [ shape=record, label="{{<p33> A|<p34> B}|$31\n$add|{<p35> Y}}" ];
|
||||
c38 [ shape=record, label="{{<p33> A|<p34> B}|$34\n$add|{<p35> Y}}" ];
|
||||
c39 [ shape=record, label="{{<p33> A|<p34> B}|$37\n$add|{<p35> Y}}" ];
|
||||
c41 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$110\n$mux|{<p35> Y}}" ];
|
||||
x0 [ shape=record, style=rounded, label="<s0> 1:1 - 0:0 " ];
|
||||
x0:e -> c41:p40:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
c42 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$113\n$mux|{<p35> Y}}" ];
|
||||
x1 [ shape=record, style=rounded, label="<s0> 0:0 - 0:0 " ];
|
||||
x1:e -> c42:p40:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
c43 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$116\n$mux|{<p35> Y}}" ];
|
||||
x2 [ shape=record, style=rounded, label="<s0> 0:0 - 0:0 " ];
|
||||
x2:e -> c43:p40:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
v3 [ label="1'1" ];
|
||||
c44 [ shape=record, label="{{<p33> A|<p34> B}|$145\n$and|{<p35> Y}}" ];
|
||||
v4 [ label="1'1" ];
|
||||
c45 [ shape=record, label="{{<p33> A|<p34> B}|$175\n$and|{<p35> Y}}" ];
|
||||
v5 [ label="1'1" ];
|
||||
c46 [ shape=record, label="{{<p33> A|<p34> B}|$205\n$and|{<p35> Y}}" ];
|
||||
v6 [ label="1'1" ];
|
||||
c47 [ shape=record, label="{{<p33> A|<p34> B}|$235\n$and|{<p35> Y}}" ];
|
||||
v7 [ label="2'00" ];
|
||||
c48 [ shape=record, label="{{<p33> A|<p34> B}|$143\n$eq|{<p35> Y}}" ];
|
||||
v8 [ label="2'01" ];
|
||||
c49 [ shape=record, label="{{<p33> A|<p34> B}|$173\n$eq|{<p35> Y}}" ];
|
||||
v9 [ label="2'10" ];
|
||||
c50 [ shape=record, label="{{<p33> A|<p34> B}|$203\n$eq|{<p35> Y}}" ];
|
||||
v10 [ label="2'11" ];
|
||||
c51 [ shape=record, label="{{<p33> A|<p34> B}|$233\n$eq|{<p35> Y}}" ];
|
||||
c52 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$147\n$mux|{<p35> Y}}" ];
|
||||
c53 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$177\n$mux|{<p35> Y}}" ];
|
||||
c54 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$207\n$mux|{<p35> Y}}" ];
|
||||
c55 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$237\n$mux|{<p35> Y}}" ];
|
||||
c59 [ shape=record, label="{{<p56> CLK|<p57> D}|$66\n$dff|{<p58> Q}}" ];
|
||||
c60 [ shape=record, label="{{<p56> CLK|<p57> D}|$68\n$dff|{<p58> Q}}" ];
|
||||
c61 [ shape=record, label="{{<p56> CLK|<p57> D}|$70\n$dff|{<p58> Q}}" ];
|
||||
c62 [ shape=record, label="{{<p56> CLK|<p57> D}|$72\n$dff|{<p58> Q}}" ];
|
||||
c63 [ shape=record, label="{{<p56> CLK|<p57> D}|$59\n$dff|{<p58> Q}}" ];
|
||||
c64 [ shape=record, label="{{<p56> CLK|<p57> D}|$63\n$dff|{<p58> Q}}" ];
|
||||
c65 [ shape=record, label="{{<p56> CLK|<p57> D}|$64\n$dff|{<p58> Q}}" ];
|
||||
c66 [ shape=record, label="{{<p33> A}|$39\n$reduce_bool|{<p35> Y}}" ];
|
||||
v11 [ label="4'0000" ];
|
||||
c67 [ shape=record, label="{{<p33> A|<p34> B|<p40> S}|$40\n$mux|{<p35> Y}}" ];
|
||||
x12 [ shape=record, style=rounded, label="<s1> 3:2 - 1:0 |<s0> 1:0 - 1:0 " ];
|
||||
c67:p35:e -> x12:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
c68 [ shape=record, label="{{<p33> A|<p34> B}|$38\n$xor|{<p35> Y}}" ];
|
||||
x13 [ shape=record, style=rounded, label="<s1> 1:0 - 3:2 |<s0> 1:0 - 1:0 " ];
|
||||
x13:e -> c68:p33:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
c36:p35:e -> c52:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c44:p35:e -> c52:p40:w [color="black", label=""];
|
||||
c45:p35:e -> c53:p40:w [color="black", label=""];
|
||||
c46:p35:e -> c54:p40:w [color="black", label=""];
|
||||
c47:p35:e -> c55:p40:w [color="black", label=""];
|
||||
c48:p35:e -> c44:p33:w [color="black", label=""];
|
||||
c49:p35:e -> c45:p33:w [color="black", label=""];
|
||||
c50:p35:e -> c46:p33:w [color="black", label=""];
|
||||
c51:p35:e -> c47:p33:w [color="black", label=""];
|
||||
c52:p35:e -> c59:p57:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c53:p35:e -> c60:p57:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c37:p35:e -> c53:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c54:p35:e -> c61:p57:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c55:p35:e -> c62:p57:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c66:p35:e -> c67:p40:w [color="black", label=""];
|
||||
c68:p35:e -> c67:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n24:e -> c59:p56:w [color="black", label=""];
|
||||
n24:e -> c60:p56:w [color="black", label=""];
|
||||
n24:e -> c61:p56:w [color="black", label=""];
|
||||
n24:e -> c62:p56:w [color="black", label=""];
|
||||
n24:e -> c63:p56:w [color="black", label=""];
|
||||
n24:e -> c64:p56:w [color="black", label=""];
|
||||
n24:e -> c65:p56:w [color="black", label=""];
|
||||
n25:e -> c52:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n25:e -> c53:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n25:e -> c54:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n25:e -> c55:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n25:e -> c66:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n25:e -> c68:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c59:p58:e -> n26:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n26:e -> c38:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n26:e -> c39:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n26:e -> c42:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c60:p58:e -> n27:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n27:e -> c36:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n27:e -> c39:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n27:e -> c42:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c61:p58:e -> n28:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n28:e -> c36:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n28:e -> c37:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n28:e -> c43:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c62:p58:e -> n29:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n29:e -> c37:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n29:e -> c38:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n29:e -> c43:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c38:p35:e -> c54:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c63:p58:e -> n30:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n30:e -> x13:s1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c64:p58:e -> n31:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n31:e -> x13:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c65:p58:e -> n32:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c39:p35:e -> c55:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5 [ shape=point ];
|
||||
x12:s0:e -> n5:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> c48:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> c49:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> c50:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> c51:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> c63:p57:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6 [ shape=point ];
|
||||
x12:s1:e -> n6:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> c64:p57:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> x0:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> x1:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> x2:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c41:p35:e -> c65:p57:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c42:p35:e -> c41:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c43:p35:e -> c41:p34:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v10:e -> c51:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v11:e -> c67:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v3:e -> c44:p34:w [color="black", label=""];
|
||||
v4:e -> c45:p34:w [color="black", label=""];
|
||||
v5:e -> c46:p34:w [color="black", label=""];
|
||||
v6:e -> c47:p34:w [color="black", label=""];
|
||||
v7:e -> c48:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v8:e -> c49:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v9:e -> c50:p33:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
digraph "memdemo" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n4 [ shape=diamond, label="mem[0]", color="black", fontcolor="black" ];
|
||||
n5 [ shape=diamond, label="mem[1]", color="black", fontcolor="black" ];
|
||||
n6 [ shape=diamond, label="mem[2]", color="black", fontcolor="black" ];
|
||||
n7 [ shape=diamond, label="mem[3]", color="black", fontcolor="black" ];
|
||||
n8 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
v0 [ label="$0\\s2[1:0] [1]" ];
|
||||
c13 [ shape=record, label="{{<p9> A|<p10> B|<p11> S}|$110\n$mux|{<p12> Y}}" ];
|
||||
v1 [ label="$0\\s2[1:0] [0]" ];
|
||||
c14 [ shape=record, label="{{<p9> A|<p10> B|<p11> S}|$113\n$mux|{<p12> Y}}" ];
|
||||
v2 [ label="$0\\s2[1:0] [0]" ];
|
||||
c15 [ shape=record, label="{{<p9> A|<p10> B|<p11> S}|$116\n$mux|{<p12> Y}}" ];
|
||||
v3 [ label="clk" ];
|
||||
c19 [ shape=record, label="{{<p16> CLK|<p17> D}|$64\n$dff|{<p18> Q}}" ];
|
||||
c13:p12:e -> c19:p17:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c14:p12:e -> c13:p9:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c15:p12:e -> c13:p10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n4:e -> c14:p9:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> c14:p10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> c15:p9:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n7:e -> c15:p10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c19:p18:e -> n8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v0:e -> c13:p11:w [color="black", label=""];
|
||||
v1:e -> c14:p11:w [color="black", label=""];
|
||||
v2:e -> c15:p11:w [color="black", label=""];
|
||||
v3:e -> c19:p16:w [color="black", label=""];
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
digraph "splice_demo" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n1 [ shape=octagon, label="a", color="black", fontcolor="black" ];
|
||||
n2 [ shape=octagon, label="b", color="black", fontcolor="black" ];
|
||||
n3 [ shape=octagon, label="c", color="black", fontcolor="black" ];
|
||||
n4 [ shape=octagon, label="d", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="e", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="f", color="black", fontcolor="black" ];
|
||||
n7 [ shape=octagon, label="x", color="black", fontcolor="black" ];
|
||||
n8 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c11 [ shape=record, label="{{<p9> A}|$2\n$neg|{<p10> Y}}" ];
|
||||
x0 [ shape=record, style=rounded, label="<s1> 1:0 - 3:2 |<s0> 1:0 - 1:0 " ];
|
||||
x0:e -> c11:p9:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
x1 [ shape=record, style=rounded, label="<s0> 3:0 - 7:4 " ];
|
||||
c11:p10:e -> x1:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
c12 [ shape=record, label="{{<p9> A}|$1\n$not|{<p10> Y}}" ];
|
||||
x2 [ shape=record, style=rounded, label="<s1> 1:0 - 3:2 |<s0> 1:0 - 1:0 " ];
|
||||
x2:e -> c12:p9:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
x3 [ shape=record, style=rounded, label="<s1> 3:2 - 1:0 |<s0> 1:0 - 3:2 " ];
|
||||
c12:p10:e -> x3:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
x4 [ shape=record, style=rounded, label="<s1> 0:0 - 1:1 |<s0> 1:1 - 0:0 " ];
|
||||
x5 [ shape=record, style=rounded, label="<s1> 1:0 - 3:2 |<s0> 1:0 - 1:0 " ];
|
||||
x6 [ shape=record, style=rounded, label="<s0> 3:0 - 11:8 " ];
|
||||
x5:e -> x6:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
n1:e -> x4:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n1:e -> x4:s1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n1:e -> x5:s1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n2:e -> x5:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3:e -> x0:s1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n4:e -> x0:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> x2:s1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> x2:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x4:e -> n7:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x1:s0:e -> n8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x3:s0:e -> n8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x3:s1:e -> n8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x6:s0:e -> n8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
digraph "memdemo" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n5 [ shape=octagon, label="clk", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="d", color="black", fontcolor="black" ];
|
||||
n7 [ shape=diamond, label="mem[0]", color="black", fontcolor="black" ];
|
||||
n8 [ shape=diamond, label="mem[1]", color="black", fontcolor="black" ];
|
||||
n9 [ shape=diamond, label="mem[2]", color="black", fontcolor="black" ];
|
||||
n10 [ shape=diamond, label="mem[3]", color="black", fontcolor="black" ];
|
||||
n11 [ shape=diamond, label="s1", color="black", fontcolor="black" ];
|
||||
n12 [ shape=diamond, label="s2", color="black", fontcolor="black" ];
|
||||
n13 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c17 [ shape=record, label="{{<p14> CLK|<p15> D}|$59\n$dff|{<p16> Q}}" ];
|
||||
c18 [ shape=record, label="{{<p14> CLK|<p15> D}|$63\n$dff|{<p16> Q}}" ];
|
||||
c20 [ shape=record, label="{{<p5> clk|<p7> mem[0]|<p8> mem[1]|<p9> mem[2]|<p10> mem[3]|<p19> n1}|outstage\noutstage|{<p13> y}}" ];
|
||||
c21 [ shape=record, label="{{<p5> clk|<p6> d|<p19> n1}|scramble\nscramble|{<p7> mem[0]|<p8> mem[1]|<p9> mem[2]|<p10> mem[3]}}" ];
|
||||
c23 [ shape=record, label="{{<p6> d|<p11> s1|<p12> s2}|selstage\nselstage|{<p19> n1|<p22> n2}}" ];
|
||||
n1 [ shape=point ];
|
||||
c23:p19:e -> n1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n1:e -> c17:p15:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n1:e -> c21:p19:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c21:p10:e -> n10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n10:e -> c20:p10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c17:p16:e -> n11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n11:e -> c23:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c18:p16:e -> n12:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n12:e -> c23:p12:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c20:p13:e -> n13:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n2 [ shape=point ];
|
||||
c23:p22:e -> n2:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n2:e -> c18:p15:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n2:e -> c20:p19:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n5:e -> c17:p14:w [color="black", label=""];
|
||||
n5:e -> c18:p14:w [color="black", label=""];
|
||||
n5:e -> c20:p5:w [color="black", label=""];
|
||||
n5:e -> c21:p5:w [color="black", label=""];
|
||||
n6:e -> c21:p6:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> c23:p6:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c21:p7:e -> n7:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n7:e -> c20:p7:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c21:p8:e -> n8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n8:e -> c20:p8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c21:p9:e -> n9:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n9:e -> c20:p9:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
digraph "scramble" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n17 [ shape=octagon, label="clk", color="black", fontcolor="black" ];
|
||||
n18 [ shape=octagon, label="d", color="black", fontcolor="black" ];
|
||||
n19 [ shape=octagon, label="mem[0]", color="black", fontcolor="black" ];
|
||||
n20 [ shape=octagon, label="mem[1]", color="black", fontcolor="black" ];
|
||||
n21 [ shape=octagon, label="mem[2]", color="black", fontcolor="black" ];
|
||||
n22 [ shape=octagon, label="mem[3]", color="black", fontcolor="black" ];
|
||||
n23 [ shape=octagon, label="n1", color="black", fontcolor="black" ];
|
||||
c27 [ shape=record, label="{{<p24> A|<p25> B}|$28\n$add|{<p26> Y}}" ];
|
||||
c28 [ shape=record, label="{{<p24> A|<p25> B}|$31\n$add|{<p26> Y}}" ];
|
||||
c29 [ shape=record, label="{{<p24> A|<p25> B}|$34\n$add|{<p26> Y}}" ];
|
||||
c30 [ shape=record, label="{{<p24> A|<p25> B}|$37\n$add|{<p26> Y}}" ];
|
||||
v0 [ label="1'1" ];
|
||||
c31 [ shape=record, label="{{<p24> A|<p25> B}|$145\n$and|{<p26> Y}}" ];
|
||||
v1 [ label="1'1" ];
|
||||
c32 [ shape=record, label="{{<p24> A|<p25> B}|$175\n$and|{<p26> Y}}" ];
|
||||
v2 [ label="1'1" ];
|
||||
c33 [ shape=record, label="{{<p24> A|<p25> B}|$205\n$and|{<p26> Y}}" ];
|
||||
v3 [ label="1'1" ];
|
||||
c34 [ shape=record, label="{{<p24> A|<p25> B}|$235\n$and|{<p26> Y}}" ];
|
||||
v4 [ label="2'00" ];
|
||||
c35 [ shape=record, label="{{<p24> A|<p25> B}|$143\n$eq|{<p26> Y}}" ];
|
||||
v5 [ label="2'01" ];
|
||||
c36 [ shape=record, label="{{<p24> A|<p25> B}|$173\n$eq|{<p26> Y}}" ];
|
||||
v6 [ label="2'10" ];
|
||||
c37 [ shape=record, label="{{<p24> A|<p25> B}|$203\n$eq|{<p26> Y}}" ];
|
||||
v7 [ label="2'11" ];
|
||||
c38 [ shape=record, label="{{<p24> A|<p25> B}|$233\n$eq|{<p26> Y}}" ];
|
||||
c40 [ shape=record, label="{{<p24> A|<p25> B|<p39> S}|$147\n$mux|{<p26> Y}}" ];
|
||||
c41 [ shape=record, label="{{<p24> A|<p25> B|<p39> S}|$177\n$mux|{<p26> Y}}" ];
|
||||
c42 [ shape=record, label="{{<p24> A|<p25> B|<p39> S}|$207\n$mux|{<p26> Y}}" ];
|
||||
c43 [ shape=record, label="{{<p24> A|<p25> B|<p39> S}|$237\n$mux|{<p26> Y}}" ];
|
||||
c47 [ shape=record, label="{{<p44> CLK|<p45> D}|$66\n$dff|{<p46> Q}}" ];
|
||||
c48 [ shape=record, label="{{<p44> CLK|<p45> D}|$68\n$dff|{<p46> Q}}" ];
|
||||
c49 [ shape=record, label="{{<p44> CLK|<p45> D}|$70\n$dff|{<p46> Q}}" ];
|
||||
c50 [ shape=record, label="{{<p44> CLK|<p45> D}|$72\n$dff|{<p46> Q}}" ];
|
||||
c27:p26:e -> c40:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c36:p26:e -> c32:p24:w [color="black", label=""];
|
||||
c37:p26:e -> c33:p24:w [color="black", label=""];
|
||||
c38:p26:e -> c34:p24:w [color="black", label=""];
|
||||
c40:p26:e -> c47:p45:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c41:p26:e -> c48:p45:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c42:p26:e -> c49:p45:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c43:p26:e -> c50:p45:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n17:e -> c47:p44:w [color="black", label=""];
|
||||
n17:e -> c48:p44:w [color="black", label=""];
|
||||
n17:e -> c49:p44:w [color="black", label=""];
|
||||
n17:e -> c50:p44:w [color="black", label=""];
|
||||
n18:e -> c40:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n18:e -> c41:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n18:e -> c42:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n18:e -> c43:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c47:p46:e -> n19:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n19:e -> c29:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n19:e -> c30:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c28:p26:e -> c41:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c48:p46:e -> n20:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n20:e -> c27:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n20:e -> c30:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c49:p46:e -> n21:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n21:e -> c27:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n21:e -> c28:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c50:p46:e -> n22:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n22:e -> c28:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n22:e -> c29:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n23:e -> c35:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n23:e -> c36:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n23:e -> c37:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n23:e -> c38:p25:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c29:p26:e -> c42:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c30:p26:e -> c43:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c31:p26:e -> c40:p39:w [color="black", label=""];
|
||||
c32:p26:e -> c41:p39:w [color="black", label=""];
|
||||
c33:p26:e -> c42:p39:w [color="black", label=""];
|
||||
c34:p26:e -> c43:p39:w [color="black", label=""];
|
||||
c35:p26:e -> c31:p24:w [color="black", label=""];
|
||||
v0:e -> c31:p25:w [color="black", label=""];
|
||||
v1:e -> c32:p25:w [color="black", label=""];
|
||||
v2:e -> c33:p25:w [color="black", label=""];
|
||||
v3:e -> c34:p25:w [color="black", label=""];
|
||||
v4:e -> c35:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v5:e -> c36:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v6:e -> c37:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v7:e -> c38:p24:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
digraph "outstage" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n4 [ shape=octagon, label="clk", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="mem[0]", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="mem[1]", color="black", fontcolor="black" ];
|
||||
n7 [ shape=octagon, label="mem[2]", color="black", fontcolor="black" ];
|
||||
n8 [ shape=octagon, label="mem[3]", color="black", fontcolor="black" ];
|
||||
n9 [ shape=octagon, label="n1", color="black", fontcolor="black" ];
|
||||
n10 [ shape=octagon, label="y", color="black", fontcolor="black" ];
|
||||
c15 [ shape=record, label="{{<p11> A|<p12> B|<p13> S}|$110\n$mux|{<p14> Y}}" ];
|
||||
x0 [ shape=record, style=rounded, label="<s0> 1:1 - 0:0 " ];
|
||||
x0:e -> c15:p13:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
c16 [ shape=record, label="{{<p11> A|<p12> B|<p13> S}|$113\n$mux|{<p14> Y}}" ];
|
||||
x1 [ shape=record, style=rounded, label="<s0> 0:0 - 0:0 " ];
|
||||
x1:e -> c16:p13:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
c17 [ shape=record, label="{{<p11> A|<p12> B|<p13> S}|$116\n$mux|{<p14> Y}}" ];
|
||||
x2 [ shape=record, style=rounded, label="<s0> 0:0 - 0:0 " ];
|
||||
x2:e -> c17:p13:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""];
|
||||
c21 [ shape=record, label="{{<p18> CLK|<p19> D}|$64\n$dff|{<p20> Q}}" ];
|
||||
c15:p14:e -> c21:p19:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c21:p20:e -> n10:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c16:p14:e -> c15:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c17:p14:e -> c15:p12:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n4:e -> c21:p18:w [color="black", label=""];
|
||||
n5:e -> c16:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> c16:p12:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n7:e -> c17:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n8:e -> c17:p12:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n9:e -> x0:s0:w [color="black", label=""];
|
||||
n9:e -> x1:s0:w [color="black", label=""];
|
||||
n9:e -> x2:s0:w [color="black", label=""];
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
digraph "selstage" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n3 [ shape=octagon, label="d", color="black", fontcolor="black" ];
|
||||
n4 [ shape=octagon, label="n1", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="n2", color="black", fontcolor="black" ];
|
||||
n6 [ shape=octagon, label="s1", color="black", fontcolor="black" ];
|
||||
n7 [ shape=octagon, label="s2", color="black", fontcolor="black" ];
|
||||
c10 [ shape=record, label="{{<p8> A}|$39\n$reduce_bool|{<p9> Y}}" ];
|
||||
v0 [ label="4'0000" ];
|
||||
c13 [ shape=record, label="{{<p8> A|<p11> B|<p12> S}|$40\n$mux|{<p9> Y}}" ];
|
||||
x1 [ shape=record, style=rounded, label="<s1> 3:2 - 1:0 |<s0> 1:0 - 1:0 " ];
|
||||
c13:p9:e -> x1:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
c14 [ shape=record, label="{{<p8> A|<p11> B}|$38\n$xor|{<p9> Y}}" ];
|
||||
x2 [ shape=record, style=rounded, label="<s1> 1:0 - 3:2 |<s0> 1:0 - 1:0 " ];
|
||||
x2:e -> c14:p8:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", style="setlinewidth(3)", label=""];
|
||||
c10:p9:e -> c13:p12:w [color="black", label=""];
|
||||
c14:p9:e -> c13:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3:e -> c10:p8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3:e -> c14:p11:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x1:s0:e -> n4:w [color="black", style="setlinewidth(3)", label=""];
|
||||
x1:s1:e -> n5:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n6:e -> x2:s1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n7:e -> x2:s0:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v0:e -> c13:p8:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
digraph "sumprod" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
v0 [ label="a" ];
|
||||
v1 [ label="b" ];
|
||||
v2 [ label="$1_Y" ];
|
||||
c4 [ shape=record, label="{{<p1> A|<p2> B}|$1\n$add|{<p3> Y}}" ];
|
||||
v3 [ label="$1_Y" ];
|
||||
v4 [ label="c" ];
|
||||
v5 [ label="sum" ];
|
||||
c5 [ shape=record, label="{{<p1> A|<p2> B}|$2\n$add|{<p3> Y}}" ];
|
||||
v0:e -> c4:p1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v1:e -> c4:p2:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c4:p3:e -> v2:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v3:e -> c5:p1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v4:e -> c5:p2:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c5:p3:e -> v5:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
digraph "sumprod" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n2 [ shape=octagon, label="a", color="black", fontcolor="black" ];
|
||||
n3 [ shape=octagon, label="b", color="black", fontcolor="black" ];
|
||||
n4 [ shape=octagon, label="c", color="black", fontcolor="black" ];
|
||||
n5 [ shape=octagon, label="sum", color="black", fontcolor="black" ];
|
||||
c9 [ shape=record, label="{{<p6> A|<p7> B}|$1\n$add|{<p8> Y}}" ];
|
||||
c10 [ shape=record, label="{{<p6> A|<p7> B}|$2\n$add|{<p8> Y}}" ];
|
||||
c9:p8:e -> c10:p6:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n2:e -> c9:p6:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n3:e -> c9:p7:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n4:e -> c10:p7:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c10:p8:e -> n5:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
digraph "sumprod" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n1 [ shape=octagon, label="prod", color="black", fontcolor="black" ];
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
digraph "sumprod" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n1 [ shape=octagon, label="prod", color="black", fontcolor="black" ];
|
||||
v0 [ label="$3_Y" ];
|
||||
v1 [ label="c" ];
|
||||
c5 [ shape=record, label="{{<p2> A|<p3> B}|$4\n$mul|{<p4> Y}}" ];
|
||||
c5:p4:e -> n1:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v0:e -> c5:p2:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v1:e -> c5:p3:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
digraph "sumprod" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n2 [ shape=octagon, label="c", color="black", fontcolor="black" ];
|
||||
n3 [ shape=octagon, label="prod", color="black", fontcolor="black" ];
|
||||
c7 [ shape=record, label="{{<p4> A|<p5> B}|$4\n$mul|{<p6> Y}}" ];
|
||||
n1 [ shape=diamond, label="$3_Y" ];
|
||||
n1:e -> c7:p4:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n2:e -> c7:p5:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c7:p6:e -> n3:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
digraph "sumprod" {
|
||||
rankdir="LR";
|
||||
remincross=true;
|
||||
n2 [ shape=octagon, label="c", color="black", fontcolor="black" ];
|
||||
n3 [ shape=octagon, label="prod", color="black", fontcolor="black" ];
|
||||
v0 [ label="a" ];
|
||||
v1 [ label="b" ];
|
||||
c7 [ shape=record, label="{{<p4> A|<p5> B}|$3\n$mul|{<p6> Y}}" ];
|
||||
c8 [ shape=record, label="{{<p4> A|<p5> B}|$4\n$mul|{<p6> Y}}" ];
|
||||
c7:p6:e -> c8:p4:w [color="black", style="setlinewidth(3)", label=""];
|
||||
n2:e -> c8:p5:w [color="black", style="setlinewidth(3)", label=""];
|
||||
c8:p6:e -> n3:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v0:e -> c7:p4:w [color="black", style="setlinewidth(3)", label=""];
|
||||
v1:e -> c7:p5:w [color="black", style="setlinewidth(3)", label=""];
|
||||
}
|
2
docs/source/code_examples/.gitignore
vendored
Normal file
2
docs/source/code_examples/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.dot
|
||||
*.pdf
|
27
docs/source/code_examples/axis/axis_master.v
Normal file
27
docs/source/code_examples/axis/axis_master.v
Normal file
|
@ -0,0 +1,27 @@
|
|||
module axis_master(aclk, aresetn, tvalid, tready, tdata);
|
||||
input aclk, aresetn, tready;
|
||||
output reg tvalid;
|
||||
output reg [7:0] tdata;
|
||||
|
||||
reg [31:0] state;
|
||||
always @(posedge aclk) begin
|
||||
if (!aresetn) begin
|
||||
state <= 314159265;
|
||||
tvalid <= 0;
|
||||
tdata <= 'bx;
|
||||
end else begin
|
||||
if (tvalid && tready)
|
||||
tvalid <= 0;
|
||||
if (!tvalid || !tready) begin
|
||||
// ^- should not be inverted!
|
||||
state = state ^ state << 13;
|
||||
state = state ^ state >> 7;
|
||||
state = state ^ state << 17;
|
||||
if (state[9:8] == 0) begin
|
||||
tvalid <= 1;
|
||||
tdata <= state;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
endmodule
|
27
docs/source/code_examples/axis/axis_test.v
Normal file
27
docs/source/code_examples/axis/axis_test.v
Normal file
|
@ -0,0 +1,27 @@
|
|||
module axis_test(aclk, tready);
|
||||
input aclk, tready;
|
||||
wire aresetn, tvalid;
|
||||
wire [7:0] tdata;
|
||||
|
||||
integer counter = 0;
|
||||
reg aresetn = 0;
|
||||
|
||||
axis_master uut (aclk, aresetn, tvalid, tready, tdata);
|
||||
|
||||
always @(posedge aclk) begin
|
||||
if (aresetn && tready && tvalid) begin
|
||||
if (counter == 0) assert(tdata == 19);
|
||||
if (counter == 1) assert(tdata == 99);
|
||||
if (counter == 2) assert(tdata == 1);
|
||||
if (counter == 3) assert(tdata == 244);
|
||||
if (counter == 4) assert(tdata == 133);
|
||||
if (counter == 5) assert(tdata == 209);
|
||||
if (counter == 6) assert(tdata == 241);
|
||||
if (counter == 7) assert(tdata == 137);
|
||||
if (counter == 8) assert(tdata == 176);
|
||||
if (counter == 9) assert(tdata == 6);
|
||||
counter <= counter + 1;
|
||||
end
|
||||
aresetn <= 1;
|
||||
end
|
||||
endmodule
|
5
docs/source/code_examples/axis/axis_test.ys
Normal file
5
docs/source/code_examples/axis/axis_test.ys
Normal file
|
@ -0,0 +1,5 @@
|
|||
read_verilog -sv axis_master.v axis_test.v
|
||||
hierarchy -top axis_test
|
||||
|
||||
proc; flatten;;
|
||||
sat -seq 50 -prove-asserts
|
13
docs/source/code_examples/intro/Makefile
Normal file
13
docs/source/code_examples/intro/Makefile
Normal file
|
@ -0,0 +1,13 @@
|
|||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
all: counter_00.dot counter_01.dot counter_02.dot counter_03.dot
|
||||
|
||||
counter_00.dot: counter.v counter.ys mycells.lib
|
||||
$(YOSYS) counter_outputs.ys
|
||||
|
||||
counter_01.dot: counter_00.dot
|
||||
counter_02.dot: counter_00.dot
|
||||
counter_03.dot: counter_00.dot
|
||||
|
12
docs/source/code_examples/intro/counter.v
Normal file
12
docs/source/code_examples/intro/counter.v
Normal file
|
@ -0,0 +1,12 @@
|
|||
module counter (clk, rst, en, count);
|
||||
|
||||
input clk, rst, en;
|
||||
output reg [1:0] count;
|
||||
|
||||
always @(posedge clk)
|
||||
if (rst)
|
||||
count <= 2'd0;
|
||||
else if (en)
|
||||
count <= count + 2'd1;
|
||||
|
||||
endmodule
|
21
docs/source/code_examples/intro/counter.ys
Normal file
21
docs/source/code_examples/intro/counter.ys
Normal file
|
@ -0,0 +1,21 @@
|
|||
# read design
|
||||
read_verilog counter.v
|
||||
hierarchy -check -top counter
|
||||
|
||||
# the high-level stuff
|
||||
proc; opt; memory; opt; fsm; opt
|
||||
|
||||
# mapping to internal cell library
|
||||
techmap; opt
|
||||
|
||||
# mapping flip-flops to mycells.lib
|
||||
dfflibmap -liberty mycells.lib
|
||||
|
||||
# mapping logic to mycells.lib
|
||||
abc -liberty mycells.lib
|
||||
|
||||
# cleanup
|
||||
clean
|
||||
|
||||
# write synthesized design
|
||||
write_verilog synth.v
|
27
docs/source/code_examples/intro/counter_outputs.ys
Normal file
27
docs/source/code_examples/intro/counter_outputs.ys
Normal file
|
@ -0,0 +1,27 @@
|
|||
# read design
|
||||
read_verilog counter.v
|
||||
hierarchy -check -top counter
|
||||
|
||||
show -notitle -format dot -prefix counter_00
|
||||
|
||||
# the high-level stuff
|
||||
proc; opt; memory; opt; fsm; opt
|
||||
|
||||
show -notitle -format dot -prefix counter_01
|
||||
|
||||
# mapping to internal cell library
|
||||
techmap; opt
|
||||
|
||||
splitnets -ports;;
|
||||
show -notitle -format dot -prefix counter_02
|
||||
|
||||
# mapping flip-flops to mycells.lib
|
||||
dfflibmap -liberty mycells.lib
|
||||
|
||||
# mapping logic to mycells.lib
|
||||
abc -liberty mycells.lib
|
||||
|
||||
# cleanup
|
||||
clean
|
||||
|
||||
show -notitle -lib mycells.v -format dot -prefix counter_03
|
38
docs/source/code_examples/intro/mycells.lib
Normal file
38
docs/source/code_examples/intro/mycells.lib
Normal file
|
@ -0,0 +1,38 @@
|
|||
library(demo) {
|
||||
cell(BUF) {
|
||||
area: 6;
|
||||
pin(A) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "A"; }
|
||||
}
|
||||
cell(NOT) {
|
||||
area: 3;
|
||||
pin(A) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "A'"; }
|
||||
}
|
||||
cell(NAND) {
|
||||
area: 4;
|
||||
pin(A) { direction: input; }
|
||||
pin(B) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "(A*B)'"; }
|
||||
}
|
||||
cell(NOR) {
|
||||
area: 4;
|
||||
pin(A) { direction: input; }
|
||||
pin(B) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "(A+B)'"; }
|
||||
}
|
||||
cell(DFF) {
|
||||
area: 18;
|
||||
ff(IQ, IQN) { clocked_on: C;
|
||||
next_state: D; }
|
||||
pin(C) { direction: input;
|
||||
clock: true; }
|
||||
pin(D) { direction: input; }
|
||||
pin(Q) { direction: output;
|
||||
function: "IQ"; }
|
||||
}
|
||||
}
|
23
docs/source/code_examples/intro/mycells.v
Normal file
23
docs/source/code_examples/intro/mycells.v
Normal file
|
@ -0,0 +1,23 @@
|
|||
|
||||
module NOT(A, Y);
|
||||
input A;
|
||||
output Y = ~A;
|
||||
endmodule
|
||||
|
||||
module NAND(A, B, Y);
|
||||
input A, B;
|
||||
output Y = ~(A & B);
|
||||
endmodule
|
||||
|
||||
module NOR(A, B, Y);
|
||||
input A, B;
|
||||
output Y = ~(A | B);
|
||||
endmodule
|
||||
|
||||
module DFF(C, D, Q);
|
||||
input C, D;
|
||||
output reg Q;
|
||||
always @(posedge C)
|
||||
Q <= D;
|
||||
endmodule
|
||||
|
12
docs/source/code_examples/macc/Makefile
Normal file
12
docs/source/code_examples/macc/Makefile
Normal file
|
@ -0,0 +1,12 @@
|
|||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
all: macc_simple_xmap.pdf macc_xilinx_xmap.pdf
|
||||
|
||||
macc_simple_xmap.pdf: macc_simple_*.v macc_simple_test.ys
|
||||
$(YOSYS) macc_simple_test.ys
|
||||
|
||||
macc_xilinx_xmap.pdf: macc_xilinx_*.v macc_xilinx_test.ys
|
||||
$(YOSYS) macc_xilinx_test.ys
|
||||
|
6
docs/source/code_examples/macc/macc_simple_test.v
Normal file
6
docs/source/code_examples/macc/macc_simple_test.v
Normal file
|
@ -0,0 +1,6 @@
|
|||
module test(a, b, c, d, y);
|
||||
input [15:0] a, b;
|
||||
input [31:0] c, d;
|
||||
output [31:0] y;
|
||||
assign y = a * b + c + d;
|
||||
endmodule
|
37
docs/source/code_examples/macc/macc_simple_test.ys
Normal file
37
docs/source/code_examples/macc/macc_simple_test.ys
Normal file
|
@ -0,0 +1,37 @@
|
|||
read_verilog macc_simple_test.v
|
||||
hierarchy -check -top test;;
|
||||
|
||||
show -prefix macc_simple_test_00a -format pdf -notitle -lib macc_simple_xmap.v
|
||||
|
||||
extract -constports -map macc_simple_xmap.v;;
|
||||
show -prefix macc_simple_test_00b -format pdf -notitle -lib macc_simple_xmap.v
|
||||
|
||||
#################################################
|
||||
|
||||
design -reset
|
||||
read_verilog macc_simple_test_01.v
|
||||
hierarchy -check -top test;;
|
||||
|
||||
show -prefix macc_simple_test_01a -format pdf -notitle -lib macc_simple_xmap.v
|
||||
|
||||
extract -map macc_simple_xmap.v;;
|
||||
show -prefix macc_simple_test_01b -format pdf -notitle -lib macc_simple_xmap.v
|
||||
|
||||
#################################################
|
||||
|
||||
design -reset
|
||||
read_verilog macc_simple_test_02.v
|
||||
hierarchy -check -top test;;
|
||||
|
||||
show -prefix macc_simple_test_02a -format pdf -notitle -lib macc_simple_xmap.v
|
||||
|
||||
extract -map macc_simple_xmap.v;;
|
||||
show -prefix macc_simple_test_02b -format pdf -notitle -lib macc_simple_xmap.v
|
||||
|
||||
#################################################
|
||||
|
||||
design -reset
|
||||
read_verilog macc_simple_xmap.v
|
||||
hierarchy -check -top macc_16_16_32;;
|
||||
|
||||
show -prefix macc_simple_xmap -format pdf -notitle
|
6
docs/source/code_examples/macc/macc_simple_test_01.v
Normal file
6
docs/source/code_examples/macc/macc_simple_test_01.v
Normal file
|
@ -0,0 +1,6 @@
|
|||
module test(a, b, c, d, x, y);
|
||||
input [15:0] a, b, c, d;
|
||||
input [31:0] x;
|
||||
output [31:0] y;
|
||||
assign y = a*b + c*d + x;
|
||||
endmodule
|
6
docs/source/code_examples/macc/macc_simple_test_02.v
Normal file
6
docs/source/code_examples/macc/macc_simple_test_02.v
Normal file
|
@ -0,0 +1,6 @@
|
|||
module test(a, b, c, d, x, y);
|
||||
input [15:0] a, b, c, d;
|
||||
input [31:0] x;
|
||||
output [31:0] y;
|
||||
assign y = a*b + (c*d + x);
|
||||
endmodule
|
6
docs/source/code_examples/macc/macc_simple_xmap.v
Normal file
6
docs/source/code_examples/macc/macc_simple_xmap.v
Normal file
|
@ -0,0 +1,6 @@
|
|||
module macc_16_16_32(a, b, c, y);
|
||||
input [15:0] a, b;
|
||||
input [31:0] c;
|
||||
output [31:0] y;
|
||||
assign y = a*b + c;
|
||||
endmodule
|
28
docs/source/code_examples/macc/macc_xilinx_swap_map.v
Normal file
28
docs/source/code_examples/macc/macc_xilinx_swap_map.v
Normal file
|
@ -0,0 +1,28 @@
|
|||
(* techmap_celltype = "$mul" *)
|
||||
module mul_swap_ports (A, B, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter B_SIGNED = 0;
|
||||
parameter A_WIDTH = 1;
|
||||
parameter B_WIDTH = 1;
|
||||
parameter Y_WIDTH = 1;
|
||||
|
||||
input [A_WIDTH-1:0] A;
|
||||
input [B_WIDTH-1:0] B;
|
||||
output [Y_WIDTH-1:0] Y;
|
||||
|
||||
wire _TECHMAP_FAIL_ = A_WIDTH <= B_WIDTH;
|
||||
|
||||
\$mul #(
|
||||
.A_SIGNED(B_SIGNED),
|
||||
.B_SIGNED(A_SIGNED),
|
||||
.A_WIDTH(B_WIDTH),
|
||||
.B_WIDTH(A_WIDTH),
|
||||
.Y_WIDTH(Y_WIDTH)
|
||||
) _TECHMAP_REPLACE_ (
|
||||
.A(B),
|
||||
.B(A),
|
||||
.Y(Y)
|
||||
);
|
||||
|
||||
endmodule
|
13
docs/source/code_examples/macc/macc_xilinx_test.v
Normal file
13
docs/source/code_examples/macc/macc_xilinx_test.v
Normal file
|
@ -0,0 +1,13 @@
|
|||
module test1(a, b, c, d, e, f, y);
|
||||
input [19:0] a, b, c;
|
||||
input [15:0] d, e, f;
|
||||
output [41:0] y;
|
||||
assign y = a*b + c*d + e*f;
|
||||
endmodule
|
||||
|
||||
module test2(a, b, c, d, e, f, y);
|
||||
input [19:0] a, b, c;
|
||||
input [15:0] d, e, f;
|
||||
output [41:0] y;
|
||||
assign y = a*b + (c*d + e*f);
|
||||
endmodule
|
43
docs/source/code_examples/macc/macc_xilinx_test.ys
Normal file
43
docs/source/code_examples/macc/macc_xilinx_test.ys
Normal file
|
@ -0,0 +1,43 @@
|
|||
read_verilog macc_xilinx_test.v
|
||||
read_verilog -lib -icells macc_xilinx_unwrap_map.v
|
||||
read_verilog -lib -icells macc_xilinx_xmap.v
|
||||
hierarchy -check ;;
|
||||
|
||||
show -prefix macc_xilinx_test1a -format pdf -notitle test1
|
||||
show -prefix macc_xilinx_test2a -format pdf -notitle test2
|
||||
|
||||
techmap -map macc_xilinx_swap_map.v;;
|
||||
|
||||
show -prefix macc_xilinx_test1b -format pdf -notitle test1
|
||||
show -prefix macc_xilinx_test2b -format pdf -notitle test2
|
||||
|
||||
techmap -map macc_xilinx_wrap_map.v
|
||||
|
||||
connwrappers -unsigned $__mul_wrapper Y Y_WIDTH \
|
||||
-unsigned $__add_wrapper Y Y_WIDTH;;
|
||||
|
||||
show -prefix macc_xilinx_test1c -format pdf -notitle test1
|
||||
show -prefix macc_xilinx_test2c -format pdf -notitle test2
|
||||
|
||||
design -push
|
||||
read_verilog macc_xilinx_xmap.v
|
||||
techmap -map macc_xilinx_swap_map.v
|
||||
techmap -map macc_xilinx_wrap_map.v;;
|
||||
design -save __macc_xilinx_xmap
|
||||
design -pop
|
||||
|
||||
extract -constports -ignore_parameters \
|
||||
-map %__macc_xilinx_xmap \
|
||||
-swap $__add_wrapper A,B ;;
|
||||
|
||||
show -prefix macc_xilinx_test1d -format pdf -notitle test1
|
||||
show -prefix macc_xilinx_test2d -format pdf -notitle test2
|
||||
|
||||
techmap -map macc_xilinx_unwrap_map.v;;
|
||||
|
||||
show -prefix macc_xilinx_test1e -format pdf -notitle test1
|
||||
show -prefix macc_xilinx_test2e -format pdf -notitle test2
|
||||
|
||||
design -load __macc_xilinx_xmap
|
||||
show -prefix macc_xilinx_xmap -format pdf -notitle
|
||||
|
61
docs/source/code_examples/macc/macc_xilinx_unwrap_map.v
Normal file
61
docs/source/code_examples/macc/macc_xilinx_unwrap_map.v
Normal file
|
@ -0,0 +1,61 @@
|
|||
module \$__mul_wrapper (A, B, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter B_SIGNED = 0;
|
||||
parameter A_WIDTH = 1;
|
||||
parameter B_WIDTH = 1;
|
||||
parameter Y_WIDTH = 1;
|
||||
|
||||
input [17:0] A;
|
||||
input [24:0] B;
|
||||
output [47:0] Y;
|
||||
|
||||
wire [A_WIDTH-1:0] A_ORIG = A;
|
||||
wire [B_WIDTH-1:0] B_ORIG = B;
|
||||
wire [Y_WIDTH-1:0] Y_ORIG;
|
||||
assign Y = Y_ORIG;
|
||||
|
||||
\$mul #(
|
||||
.A_SIGNED(A_SIGNED),
|
||||
.B_SIGNED(B_SIGNED),
|
||||
.A_WIDTH(A_WIDTH),
|
||||
.B_WIDTH(B_WIDTH),
|
||||
.Y_WIDTH(Y_WIDTH)
|
||||
) _TECHMAP_REPLACE_ (
|
||||
.A(A_ORIG),
|
||||
.B(B_ORIG),
|
||||
.Y(Y_ORIG)
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
module \$__add_wrapper (A, B, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter B_SIGNED = 0;
|
||||
parameter A_WIDTH = 1;
|
||||
parameter B_WIDTH = 1;
|
||||
parameter Y_WIDTH = 1;
|
||||
|
||||
input [47:0] A;
|
||||
input [47:0] B;
|
||||
output [47:0] Y;
|
||||
|
||||
wire [A_WIDTH-1:0] A_ORIG = A;
|
||||
wire [B_WIDTH-1:0] B_ORIG = B;
|
||||
wire [Y_WIDTH-1:0] Y_ORIG;
|
||||
assign Y = Y_ORIG;
|
||||
|
||||
\$add #(
|
||||
.A_SIGNED(A_SIGNED),
|
||||
.B_SIGNED(B_SIGNED),
|
||||
.A_WIDTH(A_WIDTH),
|
||||
.B_WIDTH(B_WIDTH),
|
||||
.Y_WIDTH(Y_WIDTH)
|
||||
) _TECHMAP_REPLACE_ (
|
||||
.A(A_ORIG),
|
||||
.B(B_ORIG),
|
||||
.Y(Y_ORIG)
|
||||
);
|
||||
|
||||
endmodule
|
89
docs/source/code_examples/macc/macc_xilinx_wrap_map.v
Normal file
89
docs/source/code_examples/macc/macc_xilinx_wrap_map.v
Normal file
|
@ -0,0 +1,89 @@
|
|||
(* techmap_celltype = "$mul" *)
|
||||
module mul_wrap (A, B, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter B_SIGNED = 0;
|
||||
parameter A_WIDTH = 1;
|
||||
parameter B_WIDTH = 1;
|
||||
parameter Y_WIDTH = 1;
|
||||
|
||||
input [A_WIDTH-1:0] A;
|
||||
input [B_WIDTH-1:0] B;
|
||||
output [Y_WIDTH-1:0] Y;
|
||||
|
||||
wire [17:0] A_18 = A;
|
||||
wire [24:0] B_25 = B;
|
||||
wire [47:0] Y_48;
|
||||
assign Y = Y_48;
|
||||
|
||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
|
||||
|
||||
reg _TECHMAP_FAIL_;
|
||||
initial begin
|
||||
_TECHMAP_FAIL_ <= 0;
|
||||
if (A_SIGNED || B_SIGNED)
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
if (A_WIDTH < 4 || B_WIDTH < 4)
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
if (A_WIDTH > 18 || B_WIDTH > 25)
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
if (A_WIDTH*B_WIDTH < 100)
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
end
|
||||
|
||||
\$__mul_wrapper #(
|
||||
.A_SIGNED(A_SIGNED),
|
||||
.B_SIGNED(B_SIGNED),
|
||||
.A_WIDTH(A_WIDTH),
|
||||
.B_WIDTH(B_WIDTH),
|
||||
.Y_WIDTH(Y_WIDTH)
|
||||
) _TECHMAP_REPLACE_ (
|
||||
.A(A_18),
|
||||
.B(B_25),
|
||||
.Y(Y_48)
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
(* techmap_celltype = "$add" *)
|
||||
module add_wrap (A, B, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter B_SIGNED = 0;
|
||||
parameter A_WIDTH = 1;
|
||||
parameter B_WIDTH = 1;
|
||||
parameter Y_WIDTH = 1;
|
||||
|
||||
input [A_WIDTH-1:0] A;
|
||||
input [B_WIDTH-1:0] B;
|
||||
output [Y_WIDTH-1:0] Y;
|
||||
|
||||
wire [47:0] A_48 = A;
|
||||
wire [47:0] B_48 = B;
|
||||
wire [47:0] Y_48;
|
||||
assign Y = Y_48;
|
||||
|
||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
|
||||
|
||||
reg _TECHMAP_FAIL_;
|
||||
initial begin
|
||||
_TECHMAP_FAIL_ <= 0;
|
||||
if (A_SIGNED || B_SIGNED)
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
if (A_WIDTH < 10 && B_WIDTH < 10)
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
end
|
||||
|
||||
\$__add_wrapper #(
|
||||
.A_SIGNED(A_SIGNED),
|
||||
.B_SIGNED(B_SIGNED),
|
||||
.A_WIDTH(A_WIDTH),
|
||||
.B_WIDTH(B_WIDTH),
|
||||
.Y_WIDTH(Y_WIDTH)
|
||||
) _TECHMAP_REPLACE_ (
|
||||
.A(A_48),
|
||||
.B(B_48),
|
||||
.Y(Y_48)
|
||||
);
|
||||
|
||||
endmodule
|
10
docs/source/code_examples/macc/macc_xilinx_xmap.v
Normal file
10
docs/source/code_examples/macc/macc_xilinx_xmap.v
Normal file
|
@ -0,0 +1,10 @@
|
|||
module DSP48_MACC (a, b, c, y);
|
||||
|
||||
input [17:0] a;
|
||||
input [24:0] b;
|
||||
input [47:0] c;
|
||||
output [47:0] y;
|
||||
|
||||
assign y = a*b + c;
|
||||
|
||||
endmodule
|
8
docs/source/code_examples/scrambler/Makefile
Normal file
8
docs/source/code_examples/scrambler/Makefile
Normal file
|
@ -0,0 +1,8 @@
|
|||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
all: scrambler_p01.dot scrambler_p02.dot
|
||||
|
||||
scrambler_p01.dot scrambler_p02.dot: scrambler.ys scrambler.v
|
||||
$(YOSYS) scrambler.ys
|
14
docs/source/code_examples/scrambler/scrambler.v
Normal file
14
docs/source/code_examples/scrambler/scrambler.v
Normal file
|
@ -0,0 +1,14 @@
|
|||
module scrambler(
|
||||
input clk, rst, in_bit,
|
||||
output reg out_bit
|
||||
);
|
||||
reg [31:0] xs;
|
||||
always @(posedge clk) begin
|
||||
if (rst)
|
||||
xs = 1;
|
||||
xs = xs ^ (xs << 13);
|
||||
xs = xs ^ (xs >> 17);
|
||||
xs = xs ^ (xs << 5);
|
||||
out_bit <= in_bit ^ xs[0];
|
||||
end
|
||||
endmodule
|
22
docs/source/code_examples/scrambler/scrambler.ys
Normal file
22
docs/source/code_examples/scrambler/scrambler.ys
Normal file
|
@ -0,0 +1,22 @@
|
|||
read_verilog scrambler.v
|
||||
|
||||
hierarchy; proc;;
|
||||
|
||||
cd scrambler
|
||||
submod -name xorshift32 xs %c %ci %D %c %ci:+[D] %D %ci*:-$dff xs %co %ci %d
|
||||
cd ..
|
||||
|
||||
show -prefix scrambler_p01 -format dot -notitle scrambler
|
||||
show -prefix scrambler_p02 -format dot -notitle xorshift32
|
||||
|
||||
echo on
|
||||
|
||||
cd xorshift32
|
||||
rename n2 in
|
||||
rename n1 out
|
||||
|
||||
eval -set in 1 -show out
|
||||
eval -set in 270369 -show out
|
||||
|
||||
sat -set out 632435482
|
||||
|
32
docs/source/code_examples/selections/Makefile
Normal file
32
docs/source/code_examples/selections/Makefile
Normal file
|
@ -0,0 +1,32 @@
|
|||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
SUMPROD = sumprod_00 sumprod_01 sumprod_02 sumprod_03 sumprod_04 sumprod_05
|
||||
SUMPROD_DOTS := $(addsuffix .dot,$(SUMPROD))
|
||||
|
||||
MEMDEMO = memdemo_00 memdemo_01
|
||||
MEMDEMO_DOTS := $(addsuffix .dot,$(MEMDEMO))
|
||||
|
||||
SUBMOD = submod_00 submod_01 submod_02 submod_03
|
||||
SUBMOD_DOTS := $(addsuffix .dot,$(SUBMOD))
|
||||
|
||||
all: select.dot $(SUMPROD_DOTS) $(MEMDEMO_DOTS)
|
||||
|
||||
select.dot: select.v select.ys
|
||||
$(YOSYS) select.ys
|
||||
|
||||
$(SUMPROD_DOTS): sumprod.v
|
||||
$(YOSYS) -p 'opt; cd sumprod; select a:sumstuff; show -format dot -prefix sumprod_00' sumprod.v
|
||||
$(YOSYS) -p 'opt; cd sumprod; select a:sumstuff %x; show -format dot -prefix sumprod_01' sumprod.v
|
||||
$(YOSYS) -p 'opt; cd sumprod; select prod; show -format dot -prefix sumprod_02' sumprod.v
|
||||
$(YOSYS) -p 'opt; cd sumprod; select prod %ci; show -format dot -prefix sumprod_03' sumprod.v
|
||||
$(YOSYS) -p 'opt; cd sumprod; select prod %ci2; show -format dot -prefix sumprod_04' sumprod.v
|
||||
$(YOSYS) -p 'opt; cd sumprod; select prod %ci3; show -format dot -prefix sumprod_05' sumprod.v
|
||||
|
||||
$(MEMDEMO_DOTS): memdemo.v
|
||||
$(YOSYS) -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_00' memdemo.v
|
||||
$(YOSYS) -p 'proc; opt; memory; opt; cd memdemo; show -format dot -prefix memdemo_01 y %ci2:+$dff[Q,D] %ci*:-$mux[S]:-$dff' memdemo.v
|
||||
|
||||
$(SUBMOD_DOTS): submod.ys memdemo.v
|
||||
$(YOSYS) submod.ys
|
15
docs/source/code_examples/selections/select.v
Normal file
15
docs/source/code_examples/selections/select.v
Normal file
|
@ -0,0 +1,15 @@
|
|||
module test(clk, s, a, y);
|
||||
input clk, s;
|
||||
input [15:0] a;
|
||||
output [15:0] y;
|
||||
reg [15:0] b, c;
|
||||
|
||||
always @(posedge clk) begin
|
||||
b <= a;
|
||||
c <= b;
|
||||
end
|
||||
|
||||
wire [15:0] state_a = (a ^ b) + c;
|
||||
wire [15:0] state_b = (a ^ b) - c;
|
||||
assign y = !s ? state_a : state_b;
|
||||
endmodule
|
10
docs/source/code_examples/selections/select.ys
Normal file
10
docs/source/code_examples/selections/select.ys
Normal file
|
@ -0,0 +1,10 @@
|
|||
read_verilog select.v
|
||||
hierarchy -check -top test
|
||||
proc; opt
|
||||
cd test
|
||||
select -set cone_a state_a %ci*:-$dff
|
||||
select -set cone_b state_b %ci*:-$dff
|
||||
select -set cone_ab @cone_a @cone_b %i
|
||||
show -prefix select -format dot -notitle \
|
||||
-color red @cone_ab -color magenta @cone_a \
|
||||
-color blue @cone_b
|
23
docs/source/code_examples/show/Makefile
Normal file
23
docs/source/code_examples/show/Makefile
Normal file
|
@ -0,0 +1,23 @@
|
|||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
EXAMPLE = example_00 example_01 example_02 example_03
|
||||
EXAMPLE_DOTS := $(addsuffix .dot,$(EXAMPLE))
|
||||
|
||||
CMOS = cmos_00 cmos_01
|
||||
CMOS_DOTS := $(addsuffix .dot,$(CMOS))
|
||||
|
||||
all: splice.dot $(EXAMPLE_DOTS) $(CMOS_DOTS)
|
||||
|
||||
splice.dot: splice.v
|
||||
$(YOSYS) -p 'proc; opt; show -format dot -prefix splice' splice.v
|
||||
|
||||
$(EXAMPLE_DOTS): example.v example.ys
|
||||
$(YOSYS) example.ys
|
||||
|
||||
cmos_00.dot: cmos.v
|
||||
$(YOSYS) -p 'read_verilog cmos.v; techmap; abc -liberty ../intro/mycells.lib;; show -format dot -prefix cmos_00'
|
||||
|
||||
cmos_01.dot: cmos.v
|
||||
$(YOSYS) -p 'read_verilog cmos.v; techmap; splitnets -ports; abc -liberty ../intro/mycells.lib;; show -lib ../intro/mycells.v -format dot -prefix cmos_01'
|
24
docs/source/code_examples/synth_flow/Makefile
Normal file
24
docs/source/code_examples/synth_flow/Makefile
Normal file
|
@ -0,0 +1,24 @@
|
|||
|
||||
TARGETS += proc_01 proc_02 proc_03
|
||||
TARGETS += opt_01 opt_02 opt_03 opt_04
|
||||
TARGETS += memory_01 memory_02
|
||||
TARGETS += techmap_01
|
||||
TARGETS += abc_01
|
||||
|
||||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
all: $(addsuffix .pdf,$(TARGETS))
|
||||
|
||||
define make_pdf_template
|
||||
$(1).pdf: $(1)*.v $(1)*.ys
|
||||
$(YOSYS) -p 'script $(1).ys; show -notitle -prefix $(1) -format pdf'
|
||||
endef
|
||||
|
||||
$(foreach trg,$(TARGETS),$(eval $(call make_pdf_template,$(trg))))
|
||||
|
||||
clean:
|
||||
rm -f $(addsuffix .pdf,$(TARGETS))
|
||||
rm -f $(addsuffix .dot,$(TARGETS))
|
||||
|
10
docs/source/code_examples/synth_flow/abc_01.v
Normal file
10
docs/source/code_examples/synth_flow/abc_01.v
Normal file
|
@ -0,0 +1,10 @@
|
|||
module test(input clk, a, b, c,
|
||||
output reg y);
|
||||
|
||||
reg [2:0] q1, q2;
|
||||
always @(posedge clk) begin
|
||||
q1 <= { a, b, c };
|
||||
q2 <= q1;
|
||||
y <= ^q2;
|
||||
end
|
||||
endmodule
|
5
docs/source/code_examples/synth_flow/abc_01.ys
Normal file
5
docs/source/code_examples/synth_flow/abc_01.ys
Normal file
|
@ -0,0 +1,5 @@
|
|||
read_verilog abc_01.v
|
||||
read_verilog -lib abc_01_cells.v
|
||||
hierarchy -check -top test
|
||||
proc; opt; techmap
|
||||
abc -dff -liberty abc_01_cells.lib;;
|
54
docs/source/code_examples/synth_flow/abc_01_cells.lib
Normal file
54
docs/source/code_examples/synth_flow/abc_01_cells.lib
Normal file
|
@ -0,0 +1,54 @@
|
|||
// test comment
|
||||
/* test comment */
|
||||
library(demo) {
|
||||
cell(BUF) {
|
||||
area: 6;
|
||||
pin(A) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "A"; }
|
||||
}
|
||||
cell(NOT) {
|
||||
area: 3;
|
||||
pin(A) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "A'"; }
|
||||
}
|
||||
cell(NAND) {
|
||||
area: 4;
|
||||
pin(A) { direction: input; }
|
||||
pin(B) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "(A*B)'"; }
|
||||
}
|
||||
cell(NOR) {
|
||||
area: 4;
|
||||
pin(A) { direction: input; }
|
||||
pin(B) { direction: input; }
|
||||
pin(Y) { direction: output;
|
||||
function: "(A+B)'"; }
|
||||
}
|
||||
cell(DFF) {
|
||||
area: 18;
|
||||
ff(IQ, IQN) { clocked_on: C;
|
||||
next_state: D; }
|
||||
pin(C) { direction: input;
|
||||
clock: true; }
|
||||
pin(D) { direction: input; }
|
||||
pin(Q) { direction: output;
|
||||
function: "IQ"; }
|
||||
}
|
||||
cell(DFFSR) {
|
||||
area: 18;
|
||||
ff(IQ, IQN) { clocked_on: C;
|
||||
next_state: D;
|
||||
preset: S;
|
||||
clear: R; }
|
||||
pin(C) { direction: input;
|
||||
clock: true; }
|
||||
pin(D) { direction: input; }
|
||||
pin(Q) { direction: output;
|
||||
function: "IQ"; }
|
||||
pin(S) { direction: input; }
|
||||
pin(R) { direction: input; }
|
||||
}
|
||||
}
|
40
docs/source/code_examples/synth_flow/abc_01_cells.v
Normal file
40
docs/source/code_examples/synth_flow/abc_01_cells.v
Normal file
|
@ -0,0 +1,40 @@
|
|||
|
||||
module BUF(A, Y);
|
||||
input A;
|
||||
output Y = A;
|
||||
endmodule
|
||||
|
||||
module NOT(A, Y);
|
||||
input A;
|
||||
output Y = ~A;
|
||||
endmodule
|
||||
|
||||
module NAND(A, B, Y);
|
||||
input A, B;
|
||||
output Y = ~(A & B);
|
||||
endmodule
|
||||
|
||||
module NOR(A, B, Y);
|
||||
input A, B;
|
||||
output Y = ~(A | B);
|
||||
endmodule
|
||||
|
||||
module DFF(C, D, Q);
|
||||
input C, D;
|
||||
output reg Q;
|
||||
always @(posedge C)
|
||||
Q <= D;
|
||||
endmodule
|
||||
|
||||
module DFFSR(C, D, Q, S, R);
|
||||
input C, D, S, R;
|
||||
output reg Q;
|
||||
always @(posedge C, posedge S, posedge R)
|
||||
if (S)
|
||||
Q <= 1'b1;
|
||||
else if (R)
|
||||
Q <= 1'b0;
|
||||
else
|
||||
Q <= D;
|
||||
endmodule
|
||||
|
9
docs/source/code_examples/synth_flow/memory_01.v
Normal file
9
docs/source/code_examples/synth_flow/memory_01.v
Normal file
|
@ -0,0 +1,9 @@
|
|||
module test(input CLK, ADDR,
|
||||
input [7:0] DIN,
|
||||
output reg [7:0] DOUT);
|
||||
reg [7:0] mem [0:1];
|
||||
always @(posedge CLK) begin
|
||||
mem[ADDR] <= DIN;
|
||||
DOUT <= mem[ADDR];
|
||||
end
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/memory_01.ys
Normal file
3
docs/source/code_examples/synth_flow/memory_01.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog memory_01.v
|
||||
hierarchy -check -top test
|
||||
proc;; memory; opt
|
27
docs/source/code_examples/synth_flow/memory_02.v
Normal file
27
docs/source/code_examples/synth_flow/memory_02.v
Normal file
|
@ -0,0 +1,27 @@
|
|||
module test(
|
||||
input WR1_CLK, WR2_CLK,
|
||||
input WR1_WEN, WR2_WEN,
|
||||
input [7:0] WR1_ADDR, WR2_ADDR,
|
||||
input [7:0] WR1_DATA, WR2_DATA,
|
||||
input RD1_CLK, RD2_CLK,
|
||||
input [7:0] RD1_ADDR, RD2_ADDR,
|
||||
output reg [7:0] RD1_DATA, RD2_DATA
|
||||
);
|
||||
|
||||
reg [7:0] memory [0:255];
|
||||
|
||||
always @(posedge WR1_CLK)
|
||||
if (WR1_WEN)
|
||||
memory[WR1_ADDR] <= WR1_DATA;
|
||||
|
||||
always @(posedge WR2_CLK)
|
||||
if (WR2_WEN)
|
||||
memory[WR2_ADDR] <= WR2_DATA;
|
||||
|
||||
always @(posedge RD1_CLK)
|
||||
RD1_DATA <= memory[RD1_ADDR];
|
||||
|
||||
always @(posedge RD2_CLK)
|
||||
RD2_DATA <= memory[RD2_ADDR];
|
||||
|
||||
endmodule
|
4
docs/source/code_examples/synth_flow/memory_02.ys
Normal file
4
docs/source/code_examples/synth_flow/memory_02.ys
Normal file
|
@ -0,0 +1,4 @@
|
|||
read_verilog memory_02.v
|
||||
hierarchy -check -top test
|
||||
proc;; memory -nomap
|
||||
opt -mux_undef -mux_bool
|
3
docs/source/code_examples/synth_flow/opt_01.v
Normal file
3
docs/source/code_examples/synth_flow/opt_01.v
Normal file
|
@ -0,0 +1,3 @@
|
|||
module test(input A, B, output Y);
|
||||
assign Y = A ? A ? B : 1'b1 : B;
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/opt_01.ys
Normal file
3
docs/source/code_examples/synth_flow/opt_01.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog opt_01.v
|
||||
hierarchy -check -top test
|
||||
opt
|
3
docs/source/code_examples/synth_flow/opt_02.v
Normal file
3
docs/source/code_examples/synth_flow/opt_02.v
Normal file
|
@ -0,0 +1,3 @@
|
|||
module test(input A, output Y, Z);
|
||||
assign Y = A == A, Z = A != A;
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/opt_02.ys
Normal file
3
docs/source/code_examples/synth_flow/opt_02.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog opt_02.v
|
||||
hierarchy -check -top test
|
||||
opt
|
4
docs/source/code_examples/synth_flow/opt_03.v
Normal file
4
docs/source/code_examples/synth_flow/opt_03.v
Normal file
|
@ -0,0 +1,4 @@
|
|||
module test(input [3:0] A, B,
|
||||
output [3:0] Y, Z);
|
||||
assign Y = A + B, Z = B + A;
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/opt_03.ys
Normal file
3
docs/source/code_examples/synth_flow/opt_03.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog opt_03.v
|
||||
hierarchy -check -top test
|
||||
opt
|
19
docs/source/code_examples/synth_flow/opt_04.v
Normal file
19
docs/source/code_examples/synth_flow/opt_04.v
Normal file
|
@ -0,0 +1,19 @@
|
|||
module test(input CLK, ARST,
|
||||
output [7:0] Q1, Q2, Q3);
|
||||
|
||||
wire NO_CLK = 0;
|
||||
|
||||
always @(posedge CLK, posedge ARST)
|
||||
if (ARST)
|
||||
Q1 <= 42;
|
||||
|
||||
always @(posedge NO_CLK, posedge ARST)
|
||||
if (ARST)
|
||||
Q2 <= 42;
|
||||
else
|
||||
Q2 <= 23;
|
||||
|
||||
always @(posedge CLK)
|
||||
Q3 <= 42;
|
||||
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/opt_04.ys
Normal file
3
docs/source/code_examples/synth_flow/opt_04.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog opt_04.v
|
||||
hierarchy -check -top test
|
||||
proc; opt
|
7
docs/source/code_examples/synth_flow/proc_01.v
Normal file
7
docs/source/code_examples/synth_flow/proc_01.v
Normal file
|
@ -0,0 +1,7 @@
|
|||
module test(input D, C, R, output reg Q);
|
||||
always @(posedge C, posedge R)
|
||||
if (R)
|
||||
Q <= 0;
|
||||
else
|
||||
Q <= D;
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/proc_01.ys
Normal file
3
docs/source/code_examples/synth_flow/proc_01.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog proc_01.v
|
||||
hierarchy -check -top test
|
||||
proc;;
|
8
docs/source/code_examples/synth_flow/proc_02.v
Normal file
8
docs/source/code_examples/synth_flow/proc_02.v
Normal file
|
@ -0,0 +1,8 @@
|
|||
module test(input D, C, R, RV,
|
||||
output reg Q);
|
||||
always @(posedge C, posedge R)
|
||||
if (R)
|
||||
Q <= RV;
|
||||
else
|
||||
Q <= D;
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/proc_02.ys
Normal file
3
docs/source/code_examples/synth_flow/proc_02.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog proc_02.v
|
||||
hierarchy -check -top test
|
||||
proc;;
|
10
docs/source/code_examples/synth_flow/proc_03.v
Normal file
10
docs/source/code_examples/synth_flow/proc_03.v
Normal file
|
@ -0,0 +1,10 @@
|
|||
module test(input A, B, C, D, E,
|
||||
output reg Y);
|
||||
always @* begin
|
||||
Y <= A;
|
||||
if (B)
|
||||
Y <= C;
|
||||
if (D)
|
||||
Y <= E;
|
||||
end
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/proc_03.ys
Normal file
3
docs/source/code_examples/synth_flow/proc_03.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog proc_03.v
|
||||
hierarchy -check -top test
|
||||
proc;;
|
4
docs/source/code_examples/synth_flow/techmap_01.v
Normal file
4
docs/source/code_examples/synth_flow/techmap_01.v
Normal file
|
@ -0,0 +1,4 @@
|
|||
module test(input [31:0] a, b,
|
||||
output [31:0] y);
|
||||
assign y = a + b;
|
||||
endmodule
|
3
docs/source/code_examples/synth_flow/techmap_01.ys
Normal file
3
docs/source/code_examples/synth_flow/techmap_01.ys
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_verilog techmap_01.v
|
||||
hierarchy -check -top test
|
||||
techmap -map techmap_01_map.v;;
|
24
docs/source/code_examples/synth_flow/techmap_01_map.v
Normal file
24
docs/source/code_examples/synth_flow/techmap_01_map.v
Normal file
|
@ -0,0 +1,24 @@
|
|||
module \$add (A, B, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter B_SIGNED = 0;
|
||||
parameter A_WIDTH = 1;
|
||||
parameter B_WIDTH = 1;
|
||||
parameter Y_WIDTH = 1;
|
||||
|
||||
input [A_WIDTH-1:0] A;
|
||||
input [B_WIDTH-1:0] B;
|
||||
output [Y_WIDTH-1:0] Y;
|
||||
|
||||
generate
|
||||
if ((A_WIDTH == 32) && (B_WIDTH == 32))
|
||||
begin
|
||||
wire [16:0] S1 = A[15:0] + B[15:0];
|
||||
wire [15:0] S2 = A[31:16] + B[31:16] + S1[16];
|
||||
assign Y = {S2[15:0], S1[15:0]};
|
||||
end
|
||||
else
|
||||
wire _TECHMAP_FAIL_ = 1;
|
||||
endgenerate
|
||||
|
||||
endmodule
|
21
docs/source/code_examples/techmap/Makefile
Normal file
21
docs/source/code_examples/techmap/Makefile
Normal file
|
@ -0,0 +1,21 @@
|
|||
PROGRAM_PREFIX :=
|
||||
|
||||
YOSYS ?= ../../../$(PROGRAM_PREFIX)yosys
|
||||
|
||||
all: red_or3x1.dot sym_mul.dot mymul.dot mulshift.dot addshift.dot
|
||||
|
||||
red_or3x1.dot: red_or3x1_*
|
||||
$(YOSYS) red_or3x1_test.ys
|
||||
|
||||
sym_mul.dot: sym_mul_*
|
||||
$(YOSYS) sym_mul_test.ys
|
||||
|
||||
mymul.dot: mymul_*
|
||||
$(YOSYS) mymul_test.ys
|
||||
|
||||
mulshift.dot: mulshift_*
|
||||
$(YOSYS) mulshift_test.ys
|
||||
|
||||
addshift.dot: addshift_*
|
||||
$(YOSYS) addshift_test.ys
|
||||
|
20
docs/source/code_examples/techmap/addshift_map.v
Normal file
20
docs/source/code_examples/techmap/addshift_map.v
Normal file
|
@ -0,0 +1,20 @@
|
|||
module \$add (A, B, Y);
|
||||
parameter A_SIGNED = 0;
|
||||
parameter B_SIGNED = 0;
|
||||
parameter A_WIDTH = 1;
|
||||
parameter B_WIDTH = 1;
|
||||
parameter Y_WIDTH = 1;
|
||||
|
||||
input [A_WIDTH-1:0] A;
|
||||
input [B_WIDTH-1:0] B;
|
||||
output [Y_WIDTH-1:0] Y;
|
||||
|
||||
parameter _TECHMAP_BITS_CONNMAP_ = 0;
|
||||
parameter _TECHMAP_CONNMAP_A_ = 0;
|
||||
parameter _TECHMAP_CONNMAP_B_ = 0;
|
||||
|
||||
wire _TECHMAP_FAIL_ = A_WIDTH != B_WIDTH || B_WIDTH < Y_WIDTH ||
|
||||
_TECHMAP_CONNMAP_A_ != _TECHMAP_CONNMAP_B_;
|
||||
|
||||
assign Y = A << 1;
|
||||
endmodule
|
5
docs/source/code_examples/techmap/addshift_test.v
Normal file
5
docs/source/code_examples/techmap/addshift_test.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module test (A, B, X, Y);
|
||||
input [7:0] A, B;
|
||||
output [7:0] X = A + B;
|
||||
output [7:0] Y = A + A;
|
||||
endmodule
|
6
docs/source/code_examples/techmap/addshift_test.ys
Normal file
6
docs/source/code_examples/techmap/addshift_test.ys
Normal file
|
@ -0,0 +1,6 @@
|
|||
read_verilog addshift_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map addshift_map.v;;
|
||||
|
||||
show -prefix addshift -format dot -notitle
|
26
docs/source/code_examples/techmap/mulshift_map.v
Normal file
26
docs/source/code_examples/techmap/mulshift_map.v
Normal file
|
@ -0,0 +1,26 @@
|
|||
module MYMUL(A, B, Y);
|
||||
parameter WIDTH = 1;
|
||||
input [WIDTH-1:0] A, B;
|
||||
output reg [WIDTH-1:0] Y;
|
||||
|
||||
parameter _TECHMAP_CONSTVAL_A_ = WIDTH'bx;
|
||||
parameter _TECHMAP_CONSTVAL_B_ = WIDTH'bx;
|
||||
|
||||
reg _TECHMAP_FAIL_;
|
||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
|
||||
|
||||
integer i;
|
||||
always @* begin
|
||||
_TECHMAP_FAIL_ <= 1;
|
||||
for (i = 0; i < WIDTH; i=i+1) begin
|
||||
if (_TECHMAP_CONSTVAL_A_ === WIDTH'd1 << i) begin
|
||||
_TECHMAP_FAIL_ <= 0;
|
||||
Y <= B << i;
|
||||
end
|
||||
if (_TECHMAP_CONSTVAL_B_ === WIDTH'd1 << i) begin
|
||||
_TECHMAP_FAIL_ <= 0;
|
||||
Y <= A << i;
|
||||
end
|
||||
end
|
||||
end
|
||||
endmodule
|
5
docs/source/code_examples/techmap/mulshift_test.v
Normal file
5
docs/source/code_examples/techmap/mulshift_test.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module test (A, X, Y);
|
||||
input [7:0] A;
|
||||
output [7:0] X = A * 8'd 6;
|
||||
output [7:0] Y = A * 8'd 8;
|
||||
endmodule
|
7
docs/source/code_examples/techmap/mulshift_test.ys
Normal file
7
docs/source/code_examples/techmap/mulshift_test.ys
Normal file
|
@ -0,0 +1,7 @@
|
|||
read_verilog mulshift_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map sym_mul_map.v \
|
||||
-map mulshift_map.v;;
|
||||
|
||||
show -prefix mulshift -format dot -notitle -lib sym_mul_cells.v
|
15
docs/source/code_examples/techmap/mymul_map.v
Normal file
15
docs/source/code_examples/techmap/mymul_map.v
Normal file
|
@ -0,0 +1,15 @@
|
|||
module MYMUL(A, B, Y);
|
||||
parameter WIDTH = 1;
|
||||
input [WIDTH-1:0] A, B;
|
||||
output reg [WIDTH-1:0] Y;
|
||||
|
||||
wire [1023:0] _TECHMAP_DO_ = "proc; clean";
|
||||
|
||||
integer i;
|
||||
always @* begin
|
||||
Y = 0;
|
||||
for (i = 0; i < WIDTH; i=i+1)
|
||||
if (A[i])
|
||||
Y = Y + (B << i);
|
||||
end
|
||||
endmodule
|
4
docs/source/code_examples/techmap/mymul_test.v
Normal file
4
docs/source/code_examples/techmap/mymul_test.v
Normal file
|
@ -0,0 +1,4 @@
|
|||
module test(A, B, Y);
|
||||
input [1:0] A, B;
|
||||
output [1:0] Y = A * B;
|
||||
endmodule
|
15
docs/source/code_examples/techmap/mymul_test.ys
Normal file
15
docs/source/code_examples/techmap/mymul_test.ys
Normal file
|
@ -0,0 +1,15 @@
|
|||
read_verilog mymul_test.v
|
||||
hierarchy -check -top test
|
||||
|
||||
techmap -map sym_mul_map.v \
|
||||
-map mymul_map.v;;
|
||||
|
||||
rename test test_mapped
|
||||
read_verilog mymul_test.v
|
||||
miter -equiv test test_mapped miter
|
||||
flatten miter
|
||||
|
||||
sat -verify -prove trigger 0 miter
|
||||
|
||||
splitnets -ports test_mapped/A
|
||||
show -prefix mymul -format dot -notitle test_mapped
|
5
docs/source/code_examples/techmap/red_or3x1_cells.v
Normal file
5
docs/source/code_examples/techmap/red_or3x1_cells.v
Normal file
|
@ -0,0 +1,5 @@
|
|||
module OR3X1(A, B, C, Y);
|
||||
input A, B, C;
|
||||
output Y;
|
||||
assign Y = A | B | C;
|
||||
endmodule
|
48
docs/source/code_examples/techmap/red_or3x1_map.v
Normal file
48
docs/source/code_examples/techmap/red_or3x1_map.v
Normal file
|
@ -0,0 +1,48 @@
|
|||
module \$reduce_or (A, Y);
|
||||
|
||||
parameter A_SIGNED = 0;
|
||||
parameter A_WIDTH = 0;
|
||||
parameter Y_WIDTH = 0;
|
||||
|
||||
input [A_WIDTH-1:0] A;
|
||||
output [Y_WIDTH-1:0] Y;
|
||||
|
||||
function integer min;
|
||||
input integer a, b;
|
||||
begin
|
||||
if (a < b)
|
||||
min = a;
|
||||
else
|
||||
min = b;
|
||||
end
|
||||
endfunction
|
||||
|
||||
genvar i;
|
||||
generate begin
|
||||
if (A_WIDTH == 0) begin
|
||||
assign Y = 0;
|
||||
end
|
||||
if (A_WIDTH == 1) begin
|
||||
assign Y = A;
|
||||
end
|
||||
if (A_WIDTH == 2) begin
|
||||
wire ybuf;
|
||||
OR3X1 g (.A(A[0]), .B(A[1]), .C(1'b0), .Y(ybuf));
|
||||
assign Y = ybuf;
|
||||
end
|
||||
if (A_WIDTH == 3) begin
|
||||
wire ybuf;
|
||||
OR3X1 g (.A(A[0]), .B(A[1]), .C(A[2]), .Y(ybuf));
|
||||
assign Y = ybuf;
|
||||
end
|
||||
if (A_WIDTH > 3) begin
|
||||
localparam next_stage_sz = (A_WIDTH+2) / 3;
|
||||
wire [next_stage_sz-1:0] next_stage;
|
||||
for (i = 0; i < next_stage_sz; i = i+1) begin
|
||||
localparam bits = min(A_WIDTH - 3*i, 3);
|
||||
assign next_stage[i] = |A[3*i +: bits];
|
||||
end
|
||||
assign Y = |next_stage;
|
||||
end
|
||||
end endgenerate
|
||||
endmodule
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue