Reviewd and fixed deadman architecture

This commit is contained in:
2026-09-10 23:53:27 +02:00
parent 31b3595ac0
commit f8d111ef5c
15 changed files with 304 additions and 305 deletions
+5 -2
View File
@@ -66,8 +66,11 @@ Validate each circuit manifest with the installed topology validator:
- The Hall-input drawing separates sensor supply, sensor return and signal;
the original ASCII alignment could suggest an unintended join. The pull-up,
divider and parallel filter follow the existing prose.
- The deadman equations are unchanged. Contact observations, permission gates
and output gates occupy separate figures; shared net names connect them.
- The steering-wheel deadman switches are wired in parallel and present one
shared `DEADMAN_IN` to the ECU. Either switch can assert permission. One
`DEADMAN_STATUS` input reports the combined state; the ECU has no per-switch
observations. The permission and output gates use the single `DEADMAN_OK`
signal. See the module document for release and stuck-high fault behavior.
- `VBG_LOCAL_KELVIN` labels the documented local ignition reference at the
`IGN_PGND` joining point. `LOCAL_GND` in the sink-command figure denotes the
TLE9104SH local ground reference. Neither denotes a new remote ground path.
+93 -87
View File
@@ -658,11 +658,11 @@
]
},
"deadman-inputs": {
"title": "Deadman contacts and observations",
"source": "IO_MODULES/DEAD_MAN.md: Logic domains",
"title": "Parallel switches \u00b7 one ECU deadman input",
"source": "IO_MODULES/DEAD_MAN.md: Steering-wheel wiring and ECU input",
"nodes": {
"title": {
"label": "Deadman contacts and observations",
"label": "Parallel switches \u00b7 one ECU deadman input",
"kind": "note",
"bounds": [
30,
@@ -671,131 +671,137 @@
42
]
},
"As": {
"label": "Protected 5 V\nIndependent NO contact A",
"supply": {
"label": "Protected 5 V",
"kind": "power",
"bounds": [
30,
100,
260,
80
]
},
"Ap": {
"label": "Protected input A\nOwn filter + default-low bias",
"kind": "signal",
"bounds": [
370,
100,
290,
80
]
},
"Ah": {
"label": "DEADMAN_A_HELD\n5 V \u00b7 non-inverting",
"kind": "signal",
"bounds": [
750,
100,
260,
80
]
},
"Ad": {
"label": "DEADMAN_A_STATUS\n3.3 V \u00b7 held = high \u2192 MCU",
"kind": "device",
"bounds": [
370,
200,
220,
330,
75
]
},
"Bs": {
"label": "Protected 5 V\nIndependent NO contact B",
"kind": "power",
"bounds": [
30,
345,
260,
80
]
},
"Bp": {
"label": "Protected input B\nOwn filter + default-low bias",
"kind": "signal",
"bounds": [
370,
345,
290,
80
]
},
"Bh": {
"label": "DEADMAN_B_RELEASED\n5 V \u00b7 inverting",
"kind": "signal",
"bounds": [
750,
345,
260,
80
]
},
"Bd": {
"label": "DEADMAN_B_STATUS\n3.3 V \u00b7 held = high \u2192 MCU",
"left": {
"label": "Left NO switch\nHeld = closed",
"kind": "device",
"bounds": [
370,
465,
330,
75
340,
90,
230,
80
]
},
"note575": {
"label": "Separate harness paths. MCU status observations are diagnostic; the 5 V signals feed the permit gates.",
"right": {
"label": "Right NO switch\nHeld = closed",
"kind": "device",
"bounds": [
340,
300,
230,
80
]
},
"shared": {
"label": "DEADMAN_IN\nJoined at steering wheel",
"kind": "signal",
"bounds": [
740,
200,
270,
80
]
},
"note390": {
"label": "Switches are physically in parallel. Either held \u2192 asserted; both released \u2192 deasserted.",
"kind": "note",
"bounds": [
30,
575,
390,
980,
60
]
},
"input": {
"label": "DEADMAN_IN\nOne ECU signal pin",
"kind": "signal",
"bounds": [
30,
490,
240,
80
]
},
"conditioning": {
"label": "Protection + filter\nDefault-low bias",
"kind": "signal",
"bounds": [
340,
490,
270,
80
]
},
"ok": {
"label": "DEADMAN_OK\n5 V \u00b7 hardware gates",
"kind": "signal",
"bounds": [
740,
490,
270,
80
]
},
"status": {
"label": "DEADMAN_STATUS\n3.3 V \u2192 one MCU input",
"kind": "device",
"bounds": [
340,
630,
310,
80
]
}
},
"connections": [
{
"from": "As",
"to": "Ap",
"from": "supply",
"to": "left",
"label": "",
"kind": "signal"
},
{
"from": "Ap",
"to": "Ah",
"from": "supply",
"to": "right",
"label": "",
"kind": "signal"
},
{
"from": "Ap",
"to": "Ad",
"from": "left",
"to": "shared",
"label": "",
"kind": "signal"
},
{
"from": "Bs",
"to": "Bp",
"from": "right",
"to": "shared",
"label": "",
"kind": "signal"
},
{
"from": "Bp",
"to": "Bh",
"from": "input",
"to": "conditioning",
"label": "",
"kind": "signal"
},
{
"from": "Bp",
"to": "Bd",
"from": "conditioning",
"to": "ok",
"label": "",
"kind": "signal"
},
{
"from": "conditioning",
"to": "status",
"label": "",
"kind": "signal"
}
+17 -9
View File
@@ -99,15 +99,23 @@ f.note('Sensor output is the sensors signal pin. Both ADC channels use +3V3_A
chain('dac-output','Optional analogue-output provision','IO_ARCHITECTURE.md: Analogue-output provision',['MCU DAC','Rail-to-rail buffer','Protection /\nseries impedance','Connector'],'Provision only; final electrical range, load and protection remain to be defined.')
f=Figure('deadman-inputs','Deadman contacts and observations','IO_MODULES/DEAD_MAN.md: Logic domains',1040,650)
for i,c in enumerate('AB'):
y=100+i*245
f.node(c+'s','Protected 5 V\nIndependent NO contact '+c,30,y,260,80,'power')
f.node(c+'p','Protected input '+c+'\nOwn filter + default-low bias',370,y,290,80,'signal')
f.node(c+'h','DEADMAN_A_HELD\n5 V · non-inverting' if c=='A' else 'DEADMAN_B_RELEASED\n5 V · inverting',750,y,260,80,'signal')
f.node(c+'d','DEADMAN_'+c+'_STATUS\n3.3 V · held = high → MCU',370,y+120,330,75,'device')
f.edge(c+'s',c+'p'); f.edge(c+'p',c+'h'); f.edge(c+'p',c+'d',exit=(.5,1),entry=(.5,0))
f.note('Separate harness paths. MCU status observations are diagnostic; the 5 V signals feed the permit gates.',575);f.save()
f=Figure('deadman-inputs','Parallel switches · one ECU deadman input','IO_MODULES/DEAD_MAN.md: Steering-wheel wiring and ECU input',1040,750)
f.node('supply','Protected 5 V',30,200,220,80,'power')
f.node('left','Left NO switch\nHeld = closed',340,90,230,80,'device')
f.node('right','Right NO switch\nHeld = closed',340,300,230,80,'device')
f.node('shared','DEADMAN_IN\nJoined at steering wheel',740,200,270,80,'signal')
f.edge('supply','left',points=[(290,240),(290,130)])
f.edge('supply','right',points=[(290,240),(290,340)])
f.edge('left','shared',points=[(660,130),(660,240)])
f.edge('right','shared',points=[(660,340),(660,240)])
f.note('Switches are physically in parallel. Either held → asserted; both released → deasserted.',390)
f.node('input','DEADMAN_IN\nOne ECU signal pin',30,490,240,80)
f.node('conditioning','Protection + filter\nDefault-low bias',340,490,270,80)
f.node('ok','DEADMAN_OK\n5 V · hardware gates',740,490,270,80)
f.node('status','DEADMAN_STATUS\n3.3 V → one MCU input',340,630,310,80,'device')
f.edge('input','conditioning');f.edge('conditioning','ok')
f.edge('conditioning','status',exit=(.5,1),entry=(.5,0))
f.save()
for name,title,part,pin,load,ground,source in [
('ignition-power','Ignition power path','VBG08H-E','HVC','Coil primary','IGN_PGND','IGNITION'),
+4 -5
View File
@@ -160,11 +160,10 @@ def equation_gate(c,ref,xy,a,b,out,invert_b=False):
c.wire(start,(x-1.2,yy));c.wire((x-1.2,yy),(x-1.2,anchor.y));c.wire((x-1.2,anchor.y),anchor)
c.wire(gate.out,(x+5,y));c.port(ref+'O',(x+5,y),out,loc='right')
c=Circuit('deadman-permit','Hardware engine-permit equations','IO_MODULES/DEAD_MAN.md: Logic equations')
equation_gate(c,'VALID',(0,0),'DEADMAN_A_HELD','DEADMAN_B_RELEASED','DEADMAN_OK',True)
equation_gate(c,'PERMIT',(0,-6),'DEADMAN_OK','MCU_RUN_PERMIT','ENGINE_PERMIT')
c.label((0,3),'Hardware permission · 5 V gate outputs',size=18)
c.label((0,-9),'Bubble inverts channel B. MCU_RUN_PERMIT is 3.3 V; gates must accept that input level.',size=11);c.save()
c=Circuit('deadman-permit','Single-input hardware engine permission','IO_MODULES/DEAD_MAN.md: Hardware gating')
equation_gate(c,'PERMIT',(0,0),'DEADMAN_OK','MCU_RUN_PERMIT','ENGINE_PERMIT')
c.label((0,3),'Single deadman input · hardware permission',size=18)
c.label((0,-3),'DEADMAN_OK: conditioned shared input. MCU_RUN_PERMIT: 3.3 V. Gate output: 5 V.',size=11);c.save()
c=Circuit('deadman-outputs','Hardware permitted output commands','IO_MODULES/DEAD_MAN.md: Logic equations')
equation_gate(c,'INJECT',(0,0),'ENGINE_PERMIT','MCU_INJECTOR_SIG','SAFE_INJECTOR_SIG')
+61 -38
View File
@@ -1,58 +1,81 @@
<?xml version='1.0' encoding='utf-8'?>
<mxfile host="app.diagrams.net">
<diagram name="Deadman contacts and observations" id="deadman-inputs">
<mxGraphModel page="1" pageWidth="1040" pageHeight="650" grid="1" gridSize="10">
<diagram name="Parallel switches · one ECU deadman input" id="deadman-inputs">
<mxGraphModel page="1" pageWidth="1040" pageHeight="750" grid="1" gridSize="10">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="node_title" value="Deadman contacts and observations" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=26;fontColor=#172b40;strokeColor=#577086;fillColor=#ffffff;spacing=10;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxCell id="node_title" value="Parallel switches · one ECU deadman input" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=26;fontColor=#172b40;strokeColor=#577086;fillColor=#ffffff;spacing=10;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="18" width="980" height="42" as="geometry" />
</mxCell>
<mxCell id="node_As" value="Protected 5 V&#10;Independent NO contact A" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#fff1d6;spacing=10;" vertex="1" parent="1">
<mxGeometry x="30" y="100" width="260" height="80" as="geometry" />
<mxCell id="node_supply" value="Protected 5 V" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#fff1d6;spacing=10;" vertex="1" parent="1">
<mxGeometry x="30" y="200" width="220" height="80" as="geometry" />
</mxCell>
<mxCell id="node_Ap" value="Protected input A&#10;Own filter + default-low bias" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="370" y="100" width="290" height="80" as="geometry" />
<mxCell id="node_left" value="Left NO switch&#10;Held = closed" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f4ed;spacing=10;" vertex="1" parent="1">
<mxGeometry x="340" y="90" width="230" height="80" as="geometry" />
</mxCell>
<mxCell id="node_Ah" value="DEADMAN_A_HELD&#10;5 V · non-inverting" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="750" y="100" width="260" height="80" as="geometry" />
<mxCell id="node_right" value="Right NO switch&#10;Held = closed" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f4ed;spacing=10;" vertex="1" parent="1">
<mxGeometry x="340" y="300" width="230" height="80" as="geometry" />
</mxCell>
<mxCell id="node_Ad" value="DEADMAN_A_STATUS&#10;3.3 V · held = high → MCU" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f4ed;spacing=10;" vertex="1" parent="1">
<mxGeometry x="370" y="220" width="330" height="75" as="geometry" />
<mxCell id="node_shared" value="DEADMAN_IN&#10;Joined at steering wheel" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="740" y="200" width="270" height="80" as="geometry" />
</mxCell>
<mxCell id="e0" source="node_As" target="node_Ap" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxCell id="e0" source="node_supply" target="node_left" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="290" y="240" />
<mxPoint x="290" y="130" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e1" source="node_supply" target="node_right" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="290" y="240" />
<mxPoint x="290" y="340" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e2" source="node_left" target="node_shared" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="660" y="130" />
<mxPoint x="660" y="240" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="e3" source="node_right" target="node_shared" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="660" y="340" />
<mxPoint x="660" y="240" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="node_note390" value="Switches are physically in parallel. Either held → asserted; both released → deasserted." style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=16;fontColor=#172b40;strokeColor=#577086;fillColor=#ffffff;spacing=10;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="390" width="980" height="60" as="geometry" />
</mxCell>
<mxCell id="node_input" value="DEADMAN_IN&#10;One ECU signal pin" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="30" y="490" width="240" height="80" as="geometry" />
</mxCell>
<mxCell id="node_conditioning" value="Protection + filter&#10;Default-low bias" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="340" y="490" width="270" height="80" as="geometry" />
</mxCell>
<mxCell id="node_ok" value="DEADMAN_OK&#10;5 V · hardware gates" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="740" y="490" width="270" height="80" as="geometry" />
</mxCell>
<mxCell id="node_status" value="DEADMAN_STATUS&#10;3.3 V → one MCU input" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f4ed;spacing=10;" vertex="1" parent="1">
<mxGeometry x="340" y="630" width="310" height="80" as="geometry" />
</mxCell>
<mxCell id="e4" source="node_input" target="node_conditioning" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e1" source="node_Ap" target="node_Ah" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxCell id="e5" source="node_conditioning" target="node_ok" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e2" source="node_Ap" target="node_Ad" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1">
<mxCell id="e6" source="node_conditioning" target="node_status" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="node_Bs" value="Protected 5 V&#10;Independent NO contact B" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#fff1d6;spacing=10;" vertex="1" parent="1">
<mxGeometry x="30" y="345" width="260" height="80" as="geometry" />
</mxCell>
<mxCell id="node_Bp" value="Protected input B&#10;Own filter + default-low bias" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="370" y="345" width="290" height="80" as="geometry" />
</mxCell>
<mxCell id="node_Bh" value="DEADMAN_B_RELEASED&#10;5 V · inverting" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f0fc;spacing=10;" vertex="1" parent="1">
<mxGeometry x="750" y="345" width="260" height="80" as="geometry" />
</mxCell>
<mxCell id="node_Bd" value="DEADMAN_B_STATUS&#10;3.3 V · held = high → MCU" style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=18;fontColor=#172b40;strokeColor=#577086;fillColor=#e8f4ed;spacing=10;" vertex="1" parent="1">
<mxGeometry x="370" y="465" width="330" height="75" as="geometry" />
</mxCell>
<mxCell id="e3" source="node_Bs" target="node_Bp" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e4" source="node_Bp" target="node_Bh" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="e5" source="node_Bp" target="node_Bd" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;strokeWidth=2;strokeColor=#416680;fontSize=16;fontFamily=DejaVu Sans;labelBackgroundColor=#ffffff;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="node_note575" value="Separate harness paths. MCU status observations are diagnostic; the 5 V signals feed the permit gates." style="rounded=1;html=0;fontFamily=DejaVu Sans;fontSize=16;fontColor=#172b40;strokeColor=#577086;fillColor=#ffffff;spacing=10;strokeColor=none;fillColor=none;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="575" width="980" height="60" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -1,42 +1,8 @@
{
"title": "Hardware engine-permit equations",
"source": "IO_MODULES/DEAD_MAN.md: Logic equations",
"title": "Single-input hardware engine permission",
"source": "IO_MODULES/DEAD_MAN.md: Hardware gating",
"reference_scope": "documentation only",
"components": [
{
"ref": "VALID",
"kind": "and-with-inverted-B",
"pins": [
"A",
"B",
"Y"
],
"value": ""
},
{
"ref": "VALIDP0",
"kind": "port",
"pins": [
"P"
],
"value": "DEADMAN_A_HELD"
},
{
"ref": "VALIDP1",
"kind": "port",
"pins": [
"P"
],
"value": "DEADMAN_B_RELEASED"
},
{
"ref": "VALIDO",
"kind": "port",
"pins": [
"P"
],
"value": "DEADMAN_OK"
},
{
"ref": "PERMIT",
"kind": "and",
@@ -73,25 +39,9 @@
}
],
"nets": [
{
"name": "DEADMAN_A_HELD",
"connections": [
"VALID.A",
"VALIDP0.P"
]
},
{
"name": "DEADMAN_B_RELEASED",
"connections": [
"VALID.B",
"VALIDP1.P"
]
},
{
"name": "DEADMAN_OK",
"connections": [
"VALID.Y",
"VALIDO.P",
"PERMIT.A",
"PERMITP0.P"
]