@@ -7,17 +7,17 @@ var clk_canvas = document.getElementById("clk_canvas");
7
7
var q_canvas = document . getElementById ( "q_canvas" ) ;
8
8
var d_canvas = document . getElementById ( "d_canvas" ) ;
9
9
10
- var CLK_FREQ = 500 .0;
11
- var STOP_TIME = 5.0 ;
10
+ var CLK_FREQ = 2000 .0;
11
+ var STOP_TIME = 2.5 ;
12
12
13
13
var RISING_CLKTOQ = 0.120 ;
14
14
var FALLING_CLKTOQ = 0.085 ;
15
- var RISING_HOLDTIME = - 0.065 ;
15
+ var RISING_HOLDTIME = - 0.029 ;
16
16
var FALLING_HOLDTIME = 0.002 ;
17
- var RISING_SETUPTIME = 0.029 ;
17
+ var RISING_SETUPTIME = 0.065 ;
18
18
var FALLING_SETUPTIME = 0.091 ;
19
- var ASYNCSETTIME = 0.029 ;
20
- var ASYNCRSTTIME = 0.029 ;
19
+ var ASYNCSETTIME = 0 ;
20
+ var ASYNCRSTTIME = 0 ;
21
21
22
22
const freq2time = ( freq ) => ( 1000 / freq ) ;
23
23
const time2freq = ( freq ) => ( 1000 / freq ) ;
@@ -79,9 +79,9 @@ function handle_slider_sub(multirange) {
79
79
}
80
80
81
81
function multirange_to_toggles ( multirange ) {
82
- let inverted = [ "rst_slider" , "set_slider" ] . includes ( multirange ) ;
83
82
let thumbs = document . getElementById ( multirange ) . querySelectorAll ( '.multirange_thumb' ) ;
84
83
toggles = [ ]
84
+ let inverted = [ "rst_slider" , "set_slider" ] . includes ( multirange ) ;
85
85
if ( inverted ) toggles . push ( - 1 ) ;
86
86
thumbs . forEach ( thumb => {
87
87
toggles . push ( parseFloat ( thumb . value ) ) ;
@@ -102,6 +102,7 @@ function clk_to_toggles() {
102
102
}
103
103
104
104
function draw_toggle_canvases ( ) {
105
+ // d_canvas: draw red rectangle around aperture, draw blue line at clktoq
105
106
const canvases = document . querySelectorAll ( '.toggle_canvas' ) ;
106
107
canvases . forEach ( canvas => {
107
108
const togglesAttr = canvas . getAttribute ( 'toggles' ) ;
@@ -132,9 +133,35 @@ function draw_toggle_canvases() {
132
133
ctx . stroke ( ) ;
133
134
}
134
135
} ) ;
136
+ // draw aux shapes to d_canvas
137
+ const d_canvas = document . getElementById ( "d_canvas" ) ;
138
+ const d_ctx = d_canvas . getContext ( '2d' ) ;
139
+ const posedges = clk_to_toggles ( ) . filter ( ( _ , index ) => index % 2 === 0 ) ;
140
+ posedges . forEach ( posedge => {
141
+ let q_toggle_index = q_toggles ( ) . findIndex ( ( q_toggle ) => posedge < q_toggle ) ;
142
+ if ( q_toggle_index == - 1 )
143
+ q_toggle_index = q_toggles ( ) . length ;
144
+ const q_value = ( q_toggle_index % 2 ) ;
145
+
146
+ const setup_time = q_value ? FALLING_SETUPTIME : RISING_SETUPTIME ;
147
+ const hold_time = q_value ? FALLING_HOLDTIME : RISING_HOLDTIME ;
148
+ const clktoq = q_value ? FALLING_CLKTOQ : RISING_CLKTOQ ;
149
+ const rect_x = time2canvasX ( posedge - setup_time , d_canvas ) ;
150
+ const rect_w = time2canvasX ( setup_time + hold_time , d_canvas ) ;
151
+ const line_x = time2canvasX ( posedge + clktoq , d_canvas ) ;
152
+
153
+ d_ctx . fillStyle = 'rgba(255, 0, 0, 0.5)' ;
154
+ d_ctx . fillRect ( rect_x , 0 , rect_w , d_canvas . height ) ;
155
+
156
+ d_ctx . beginPath ( ) ;
157
+ d_ctx . strokeStyle = 'rgba(0, 0, 255, 0.5)' ;
158
+ d_ctx . moveTo ( line_x , 0 ) ;
159
+ d_ctx . lineTo ( line_x , d_canvas . height ) ;
160
+ d_ctx . stroke ( ) ;
161
+ } ) ;
135
162
}
136
163
137
- function toggle_value_at_time ( multirange , time ) {
164
+ function multirange_value_at_time ( multirange , time ) {
138
165
let d_toggles = multirange_to_toggles ( multirange ) ;
139
166
let toggle_index = 0 ;
140
167
for ( toggle_index = 0 ; toggle_index < d_toggles . length ; toggle_index ++ ) {
@@ -164,39 +191,39 @@ function q_toggles() {
164
191
165
192
for ( const event of events ) {
166
193
if ( value_is_1 ) {
167
- if ( has_async_rst && event . name == "rst" && ! toggle_value_at_time ( "rst_slider" , event . value ) ) {
194
+ if ( has_async_rst && event . name == "rst" && ! multirange_value_at_time ( "rst_slider" , event . value ) ) {
168
195
toggles . push ( event . value + ASYNCRSTTIME )
169
196
value_is_1 = 0 ;
170
197
} else if ( has_async_set && event . name == "set" ) {
171
- } else if ( has_async_set && ! toggle_value_at_time ( "set_slider" , event . value - ASYNCSETTIME ) ) {
172
- } else if ( has_async_set && event . name == "clk" && ! toggle_value_at_time ( "set_slider" , event . value - ASYNCSETTIME + FALLING_CLKTOQ ) ) {
198
+ } else if ( has_async_set && ! multirange_value_at_time ( "set_slider" , event . value - ASYNCSETTIME ) ) {
199
+ } else if ( has_async_set && event . name == "clk" && ! multirange_value_at_time ( "set_slider" , event . value - ASYNCSETTIME + FALLING_CLKTOQ ) ) {
173
200
// maintain 1
174
201
} else if ( event . name == "clk" ) {
175
- let value_before_setup = toggle_value_at_time ( "d_slider" , event . value - FALLING_SETUPTIME ) ;
176
- let value_after_hold = toggle_value_at_time ( "d_slider" , event . value + FALLING_HOLDTIME ) ;
202
+ let value_before_setup = multirange_value_at_time ( "d_slider" , event . value - FALLING_SETUPTIME ) ;
203
+ let value_after_hold = multirange_value_at_time ( "d_slider" , event . value + FALLING_HOLDTIME ) ;
177
204
if ( has_sync_rst ) {
178
- value_before_setup &= toggle_value_at_time ( "rst_slider" , event . value - FALLING_SETUPTIME ) ;
179
- value_after_hold &= toggle_value_at_time ( "rst_slider" , event . value + FALLING_HOLDTIME ) ;
205
+ value_before_setup &= multirange_value_at_time ( "rst_slider" , event . value - FALLING_SETUPTIME ) ;
206
+ value_after_hold &= multirange_value_at_time ( "rst_slider" , event . value + FALLING_HOLDTIME ) ;
180
207
}
181
208
if ( value_before_setup == 0 && value_after_hold == 0 ) {
182
209
toggles . push ( event . value + FALLING_CLKTOQ )
183
210
value_is_1 = 0 ;
184
211
}
185
212
}
186
213
} else {
187
- if ( has_async_rst && event . name == "rst" && ! toggle_value_at_time ( "rst_slider" , event . value ) ) {
188
- } else if ( has_async_rst && ! toggle_value_at_time ( "rst_slider" , event . value - ASYNCRSTTIME ) ) {
189
- } else if ( has_async_rst && event . name == "clk" && ! toggle_value_at_time ( "rst_slider" , event . value - ASYNCRSTTIME + RISING_CLKTOQ ) ) {
214
+ if ( has_async_rst && event . name == "rst" && ! multirange_value_at_time ( "rst_slider" , event . value ) ) {
215
+ } else if ( has_async_rst && ! multirange_value_at_time ( "rst_slider" , event . value - ASYNCRSTTIME ) ) {
216
+ } else if ( has_async_rst && event . name == "clk" && ! multirange_value_at_time ( "rst_slider" , event . value - ASYNCRSTTIME + RISING_CLKTOQ ) ) {
190
217
// maintain 0
191
218
} else if ( has_async_set && event . name == "set" ) {
192
219
toggles . push ( event . value + ASYNCSETTIME )
193
220
value_is_1 = 1 ;
194
221
} else if ( event . name == "clk" ) {
195
- let value_before_setup = toggle_value_at_time ( "d_slider" , event . value - RISING_SETUPTIME ) ;
196
- let value_after_hold = toggle_value_at_time ( "d_slider" , event . value + RISING_HOLDTIME ) ;
222
+ let value_before_setup = multirange_value_at_time ( "d_slider" , event . value - RISING_SETUPTIME ) ;
223
+ let value_after_hold = multirange_value_at_time ( "d_slider" , event . value + RISING_HOLDTIME ) ;
197
224
if ( has_sync_rst ) {
198
- value_before_setup &= toggle_value_at_time ( "rst_slider" , event . value - RISING_SETUPTIME ) ;
199
- value_after_hold &= toggle_value_at_time ( "rst_slider" , event . value + RISING_HOLDTIME ) ;
225
+ value_before_setup &= multirange_value_at_time ( "rst_slider" , event . value - RISING_SETUPTIME ) ;
226
+ value_after_hold &= multirange_value_at_time ( "rst_slider" , event . value + RISING_HOLDTIME ) ;
200
227
}
201
228
if ( value_before_setup == 1 && value_after_hold == 1 ) {
202
229
toggles . push ( event . value + RISING_CLKTOQ )
0 commit comments