abc9: generate $abc9_holes design instead of <name>$holes
[yosys.git] / misc / yosysjs / demo02.html
1 <html><head>
2 <title>YosysJS Example Application #02</title>
3 <script type="text/javascript" src="yosysjs.js"></script>
4 </head><body>
5 <div id="popup" style="position: fixed; left: 0; top: 0; width:100%; height:100%; text-align:center; z-index: 1000;"><div
6 style="width:300px; margin: 200px auto; background-color: #88f; border:3px dashed #000;
7 padding:15px; text-align:center;"><span id="popupmsg">Loading...</span></div>
8 </div>
9 <h1>YosysJS Example Application #02</h1>
10 <textarea id="code" style="width: 800px; height: 300px;">
11 // borrowed with some modifications from
12 // http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual/Example/lrgeEx2/cooley.html
13 module up3down5(clock, data_in, up, down, carry_out, borrow_out, count_out, parity_out);
14
15 input [8:0] data_in;
16 input clock, up, down;
17
18 output reg [8:0] count_out;
19 output reg carry_out, borrow_out, parity_out;
20
21 reg [9:0] cnt_up, cnt_dn;
22 reg [8:0] count_nxt;
23
24 always @(posedge clock)
25 begin
26 cnt_dn = count_out - 3'b 101;
27 cnt_up = count_out + 2'b 11;
28
29 case ({up,down})
30 2'b 00 : count_nxt = data_in;
31 2'b 01 : count_nxt = cnt_dn;
32 2'b 10 : count_nxt = cnt_up;
33 2'b 11 : count_nxt = count_out;
34 default : count_nxt = 9'bX;
35 endcase
36
37 parity_out &lt;= ^count_nxt;
38 carry_out &lt;= up &amp; cnt_up[9];
39 borrow_out &lt;= down &amp; cnt_dn[9];
40 count_out &lt;= count_nxt;
41 end
42
43 endmodule
44 </textarea><p/>
45 <input type="button" value="Before Behavioral Synth" onclick="synth1()">
46 <input type="button" value="After Behavioral Synth" onclick="synth2()">
47 <input type="button" value="After RTL Synth" onclick="synth3()">
48 <input type="button" value="After Gate-Level Synth" onclick="synth4()"><p/>
49 <svg id="svg" width="800"></svg>
50 </td></tr></table>
51 <script type="text/javascript">
52 YosysJS.load_viz();
53 function on_ys_ready() {
54 document.getElementById('popup').style.visibility = 'hidden';
55 document.getElementById('popupmsg').textContent = 'Please wait..';
56 }
57 function handle_run_errors(logmsg, errmsg) {
58 if (errmsg != "") {
59 window.alert(errmsg);
60 document.getElementById('popup').style.visibility = 'hidden';
61 }
62 }
63 function synth1() {
64 document.getElementById('popup').style.visibility = 'visible';
65 ys.write_file("input.v", document.getElementById('code').value);
66 ys.run('design -reset; read_verilog input.v; show -stretch', handle_run_errors);
67 ys.read_file('show.dot', (function(text){
68 console.log(ys.errmsg);
69 if (ys.errmsg == "") YosysJS.dot_into_svg(text, 'svg');
70 document.getElementById('popup').style.visibility = 'hidden';
71 }));
72 }
73 function synth2() {
74 document.getElementById('popup').style.visibility = 'visible';
75 ys.write_file("input.v", document.getElementById('code').value);
76 ys.run('design -reset; read_verilog input.v; proc; opt_clean; show -stretch', handle_run_errors);
77 ys.read_file('show.dot', (function(text){
78 if (ys.errmsg == "") YosysJS.dot_into_svg(text, 'svg');
79 document.getElementById('popup').style.visibility = 'hidden';
80 }));
81 }
82 function synth3() {
83 document.getElementById('popup').style.visibility = 'visible';
84 ys.write_file("input.v", document.getElementById('code').value);
85 ys.run('design -reset; read_verilog input.v; synth -run coarse; show -stretch', handle_run_errors);
86 ys.read_file('show.dot', (function(text){
87 if (ys.errmsg == "") YosysJS.dot_into_svg(text, 'svg');
88 document.getElementById('popup').style.visibility = 'hidden';
89 }));
90 }
91 function synth4() {
92 document.getElementById('popup').style.visibility = 'visible';
93 ys.write_file("input.v", document.getElementById('code').value);
94 ys.run('design -reset; read_verilog input.v; synth -run coarse; synth -run fine; show -stretch', handle_run_errors);
95 ys.read_file('show.dot', (function(text){
96 if (ys.errmsg == "") YosysJS.dot_into_svg(text, 'svg');
97 document.getElementById('popup').style.visibility = 'hidden';
98 }));
99 }
100 var ys = YosysJS.create_worker(on_ys_ready);
101 ys.verbose(true);
102 </script>
103 </body></html>