From a9a93c86be3c2a2b6becfbf170e8d84df48109f5 Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Sat, 31 Dec 2022 12:00:05 +0000 Subject: [PATCH] Autosave: 2022-12-31 12:00:05 --- Computer_Architecture/Hardware_simulation.md | 10 ++++++++++ .../Digital_circuits/Clock_signals.md | 7 +------ _img/hardware-simulator.png | Bin 0 -> 27406 bytes 3 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 _img/hardware-simulator.png diff --git a/Computer_Architecture/Hardware_simulation.md b/Computer_Architecture/Hardware_simulation.md index 0574365..0bf4794 100644 --- a/Computer_Architecture/Hardware_simulation.md +++ b/Computer_Architecture/Hardware_simulation.md @@ -6,3 +6,13 @@ tags: [HDL, nand-to-tetris] --- # Hardware simulation + +In order to test our [HDL](/Computer_Architecture/Hardware_Description_Language.md) files we load them into the hardware simulator program shown below: + + + +There are several simulation options: + +- interactive +- script-based (where we load a test script into the simulator along with the HDL file +- comparative (running the HDL program against our intended output specified in the `.out` file) diff --git a/Electronics_and_Hardware/Digital_circuits/Clock_signals.md b/Electronics_and_Hardware/Digital_circuits/Clock_signals.md index e0b48dc..15b3f6c 100644 --- a/Electronics_and_Hardware/Digital_circuits/Clock_signals.md +++ b/Electronics_and_Hardware/Digital_circuits/Clock_signals.md @@ -26,12 +26,7 @@ The diagram below shows a pulse cycle of 2Hz. - All components that need to be synchronised are connected to the clock - State changes in the component occur only when a clock pulse occurs -- Clock-driven components will typically trigger their state c| J | K | Clock | Q state | Operation | -|--- |--- |------- |--------------------------- |----------- | -| 0 | 0 | Pulse | Maintain previous value | Hold | -| 0 | 1 | Pulse | 0 | Reset | -| 1 | 0 | Pulse | 1 | Set | -| 1 | 1 | Pulse | Inverse of previous value | Toggle |hanges on either the rising edge or the falling edge of the pulse. +- | Clock-driven components will typically trigger their state changes on either the rising edge or the falling edge of the pulse. | - Components that trigger state changes on the rising pulse are **positive edge-triggered** - Components that trigger state changes on the falling pulse are **negative edge-triggered** diff --git a/_img/hardware-simulator.png b/_img/hardware-simulator.png new file mode 100644 index 0000000000000000000000000000000000000000..57600034bfebb7ea0f3c2ebed02714ac5c068dc5 GIT binary patch literal 27406 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