2 <title>YosysJS Example Application #
02</title>
3 <script type=
"text/javascript" src=
"yosysjs.js"></script>
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>
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);
16 input clock, up, down;
18 output reg [
8:
0] count_out;
19 output reg carry_out, borrow_out, parity_out;
21 reg [
9:
0] cnt_up, cnt_dn;
24 always @(posedge clock)
26 cnt_dn = count_out -
3'b
101;
27 cnt_up = count_out +
2'b
11;
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;
37 parity_out
<= ^count_nxt;
38 carry_out
<= up
& cnt_up[
9];
39 borrow_out
<= down
& cnt_dn[
9];
40 count_out
<= count_nxt;
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>
51 <script type=
"text/javascript">
53 function on_ys_ready() {
54 document.getElementById('popup').style.visibility = 'hidden';
55 document.getElementById('popupmsg').textContent = 'Please wait..';
57 function handle_run_errors(logmsg, errmsg) {
60 document.getElementById('popup').style.visibility = 'hidden';
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';
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';
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';
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';
100 var ys = YosysJS.create_worker(on_ys_ready);