diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-02-21 14:25:34 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-02-21 14:25:34 +0100 |
commit | 1fe15a5973bcd7b5d07ea82fd85545a6e73a20f0 (patch) | |
tree | 0f5b6f3eba78e667068da39c0330d0fd89fe0454 | |
parent | 4e6ca7760f801ce5ea16c6ea9be3ad4a86aa3b1d (diff) | |
download | yosys-1fe15a5973bcd7b5d07ea82fd85545a6e73a20f0.tar.gz yosys-1fe15a5973bcd7b5d07ea82fd85545a6e73a20f0.tar.bz2 yosys-1fe15a5973bcd7b5d07ea82fd85545a6e73a20f0.zip |
YosysJS: Wait for Viz to load
-rw-r--r-- | misc/yosysjs/demo03.html | 23 | ||||
-rw-r--r-- | misc/yosysjs/yosysjs.js | 26 |
2 files changed, 33 insertions, 16 deletions
diff --git a/misc/yosysjs/demo03.html b/misc/yosysjs/demo03.html index 36cc6cf4a..c9386aee8 100644 --- a/misc/yosysjs/demo03.html +++ b/misc/yosysjs/demo03.html @@ -24,16 +24,18 @@ endmodule <h1>YosysJS Example Application #03</h1> <b>Your mission:</b> Create a behavioral Verilog model for the following circuit: <p/> - <svg id="schem" width="800"></svg> - <p/> - <pre id="code" style="width: 800px; border:2px solid #000; padding: 0.5em;"><span class="noedit">module top(input clk, reset, input [7:0] A, output reg [7:0] Y); - always @(posedge clock) begin</span><span class="edit" contenteditable="true"> - Y <= A | {4{reset}}; - </span><span class="noedit">end -endmodule</span></pre><p/> - <input type="button" value="Check Model" onclick="check_model()"> <span id="checkmessage"></span> - <p/> - <p id="wave"> </p> + <div id="main" style="visibility: hidden"> + <svg id="schem" width="800"></svg> + <p/> + <pre id="code" style="width: 800px; border:2px solid #000; padding: 0.5em;"><span class="noedit">module top(input clk, reset, input [7:0] A, output reg [7:0] Y); + always @(posedge clock) begin</span><span class="edit" contenteditable="true"> + Y <= A | {4{reset}}; + </span><span class="noedit">end + endmodule</span></pre><p/> + <input type="button" value="Check Model" onclick="check_model()"> <span id="checkmessage"></span> + <p/> + <p id="wave"> </p> + </div> <script type="text/javascript"> function on_ys_ready() { ys.write_file('golden.v', document.getElementById('golden_verilog').textContent); @@ -42,6 +44,7 @@ endmodule</span></pre><p/> YosysJS.dot_into_svg(ys.read_file('show.dot'), 'schem'); document.getElementById('popup').style.visibility = 'hidden'; document.getElementById('popupmsg').textContent = 'Please wait..'; + document.getElementById('main').style.visibility = 'visible'; } function check_model() { function work() { diff --git a/misc/yosysjs/yosysjs.js b/misc/yosysjs/yosysjs.js index b0205bf61..2c78451d2 100644 --- a/misc/yosysjs/yosysjs.js +++ b/misc/yosysjs/yosysjs.js @@ -1,6 +1,7 @@ var YosysJS = new function() { this.script_element = document.currentScript; this.viz_element = undefined; + this.viz_ready = true; this.url_prefix = this.script_element.src.replace(/[^/]+$/, '') @@ -12,9 +13,21 @@ var YosysJS = new function() { this.viz_element.style.display = 'none' document.body.appendChild(this.viz_element); - this.viz_element.contentWindow.document.open() - this.viz_element.contentWindow.document.write('<script type="text/javascript" src="' + this.url_prefix + 'viz.js"></' + 'script>'); - this.viz_element.contentWindow.document.close() + this.viz_element.contentWindow.document.open(); + this.viz_element.contentWindow.document.write('<script type="text/javascript" onload="viz_ready = true;" src="' + this.url_prefix + 'viz.js"></' + 'script>'); + this.viz_element.contentWindow.document.close(); + + var that = this; + function check_viz_ready() { + if (that.viz_element.contentWindow.viz_ready) { + console.log("YosysJS: Successfully loaded Viz."); + that.viz_ready = true; + } else + window.setTimeout(check_viz_ready, 100); + } + + this.viz_ready = false; + window.setTimeout(check_viz_ready, 100); } this.dot_to_svg = function(dot_text) { @@ -40,6 +53,7 @@ var YosysJS = new function() { this.create = function(reference_element, on_ready) { var ys = new Object(); + ys.YosysJS = this; ys.init_script = ""; ys.ready = false; ys.verbose = false; @@ -185,13 +199,13 @@ var YosysJS = new function() { } catch (e) { } } - doc.open() + doc.open(); doc.write('<script type="text/javascript" src="' + this.url_prefix + 'yosys.js"></' + 'script>'); - doc.close() + doc.close(); if (on_ready || ys.init_script) { function check_ready() { - if (ys.ready) { + if (ys.ready && ys.YosysJS.viz_ready) { if (ys.init_script) { ys.write_file("/script.ys", ys.init_script); ys.run("script /script.ys"); |