From a21128f605e2d5b51747c4438721e58f288e874e Mon Sep 17 00:00:00 2001 From: Prerna02 Date: Sun, 19 Mar 2023 23:22:49 +0530 Subject: [PATCH 1/3] better system for high impedance (X) values --- simulator/src/engine.js | 8 +++++++- simulator/src/modules/ControlledInverter.js | 11 ++++++++--- simulator/src/modules/TriState.js | 13 ++++++------- simulator/src/node.js | 9 ++++++++- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/simulator/src/engine.js b/simulator/src/engine.js index d6ae7c689f..d1fdf0cbb7 100755 --- a/simulator/src/engine.js +++ b/simulator/src/engine.js @@ -408,9 +408,15 @@ export function play(scope = globalScope, resetNodes = false) { forceResetNodesSet(true); } } - // Check for TriState Contentions + + // Check for TriState and ControlledInverter Contentions if (simulationArea.contentionPending.length) { + if(simulationArea.contentionPending[0].objectType === 'TriState'){ showError('Contention at TriState'); + } + if(simulationArea.contentionPending[0].objectType === 'ControlledInverter'){ + showError('Contention at ControlledInverter'); + } forceResetNodesSet(true); errorDetectedSet(true); } diff --git a/simulator/src/modules/ControlledInverter.js b/simulator/src/modules/ControlledInverter.js index 5baa42b83c..6a5280effb 100755 --- a/simulator/src/modules/ControlledInverter.js +++ b/simulator/src/modules/ControlledInverter.js @@ -72,9 +72,14 @@ export default class ControlledInverter extends CircuitElement { (32 - this.bitWidth); simulationArea.simulationQueue.add(this.output1); } - if (this.state.value === 0) { - this.output1.value = undefined; - } + else { + if (this.output1.value !== undefined && this.output1.oldValue !== undefined && !simulationArea.contentionPending.contains(this)) { + this.output1.value = undefined; + simulationArea.simulationQueue.add(this.output1); + } + } + this.output1.oldValue = this.output1.value; + simulationArea.contentionPending.clean(this); } /** diff --git a/simulator/src/modules/TriState.js b/simulator/src/modules/TriState.js index 6799f4be41..344238f350 100755 --- a/simulator/src/modules/TriState.js +++ b/simulator/src/modules/TriState.js @@ -74,14 +74,13 @@ export default class TriState extends CircuitElement { this.output1.value = this.inp1.value; // >>>0)<<(32-this.bitWidth))>>>(32-this.bitWidth); simulationArea.simulationQueue.add(this.output1); } - simulationArea.contentionPending.clean(this); - } else if ( - this.output1.value !== undefined && - !simulationArea.contentionPending.contains(this) - ) { - this.output1.value = undefined; - simulationArea.simulationQueue.add(this.output1); + } else { + if (this.output1.value !== undefined && this.output1.oldValue !== undefined && !simulationArea. contentionPending.contains(this)) { + this.output1.value = undefined; + simulationArea.simulationQueue.add(this.output1); + } } + this.output1.oldValue = this.output1.value; simulationArea.contentionPending.clean(this); } diff --git a/simulator/src/node.js b/simulator/src/node.js index 4d12790175..e8c82d5bb9 100755 --- a/simulator/src/node.js +++ b/simulator/src/node.js @@ -360,8 +360,12 @@ export default class Node { if (this.type == NODE_OUTPUT && !this.subcircuitOverride) { if (this.parent.isResolvable() && !this.parent.queueProperties.inQueue) { - if (this.parent.objectType == 'TriState') { + if (this.parent.objectType == 'TriState' || this.parent.objectType == 'ControlledInverter') { if (this.parent.state.value) { simulationArea.simulationQueue.add(this.parent); } + else if (this.parent.state.value === 0) { + this.parent.output1.value = undefined; + simulationArea.simulationQueue.add(this.parent); + } } else { simulationArea.simulationQueue.add(this.parent); } @@ -392,6 +396,9 @@ export default class Node { if (node.parent.objectType == 'TriState' && node.value != undefined && node.type == 1) { if (node.parent.state.value) { simulationArea.contentionPending.push(node.parent); } } + if (node.parent.objectType == 'ControlledInverter' && node.value != undefined && node.type == 1) { + if (node.parent.state.value) { simulationArea.contentionPending.push(node.parent); } + } node.bitWidth = this.bitWidth; node.value = this.value; From 6f6d151e46061856cefefdd24589fab94910e42b Mon Sep 17 00:00:00 2001 From: Prerna Sharma <89515816+Prerna-0202@users.noreply.github.com> Date: Sun, 14 May 2023 23:34:29 +0530 Subject: [PATCH 2/3] Update misc.spec.js --- simulator/spec/misc.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simulator/spec/misc.spec.js b/simulator/spec/misc.spec.js index bf4d835608..0f2e3467fa 100644 --- a/simulator/spec/misc.spec.js +++ b/simulator/spec/misc.spec.js @@ -51,7 +51,7 @@ describe('Simulator Misc-Elements Testing', () => { test('Controlled Inverter working', () => { const result = runAll(testData.ControlledInverter); - expect(result.summary.passed).toBe(3); + expect(result.summary.passed).toBe(4); }); test('Equal Splitter working', () => { From 9e151b1905c2fc0de148747d8220ed446426ad41 Mon Sep 17 00:00:00 2001 From: Prerna Sharma <89515816+Prerna-0202@users.noreply.github.com> Date: Sun, 14 May 2023 23:39:23 +0530 Subject: [PATCH 3/3] Update misc.spec.js --- simulator/spec/misc.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simulator/spec/misc.spec.js b/simulator/spec/misc.spec.js index 0f2e3467fa..b5f3400047 100644 --- a/simulator/spec/misc.spec.js +++ b/simulator/spec/misc.spec.js @@ -51,7 +51,7 @@ describe('Simulator Misc-Elements Testing', () => { test('Controlled Inverter working', () => { const result = runAll(testData.ControlledInverter); - expect(result.summary.passed).toBe(4); + expect(result.summary.passed).toBe(2); }); test('Equal Splitter working', () => {