硬件安全系列 逻辑电路基础知识介绍(三)
前言
這一篇是邏輯電路基礎知識的最后一篇。
Don’t Care
Don’t Care 可以稱作冗余,在電子電路中,他有不同的類型對應不同的表現形式。
首先,我們從例子的角度探索一下冗余是怎么產生的。
輸入不可能
第一個例子
X = ab ,F = Xb + bY +XY
首先我們對于X和ab進行分析
由于X和b存在一定約束關系:X是1時,b一定是1,不能是0
所以對于F存在一些輸入并不可能
這就是冗余的第一種類型:存在輸入不可能在邏輯電路中出現。
那么這個don’t care冗余對F來說究竟有什么影響呢
在不考慮冗余情況下,只要X b Y 存在兩個輸入為1,輸出就是1,現在X為1b必為1,只要X為1或者b Y 同時為1 ,輸出就是1。我們也就可以把原來的邏輯關系簡化成 X + bY
也就是don’t care的發現能夠讓我們簡化電路。
所以對于我們而言,要做的就是找到冗余。
在討論找到冗余方法之前,我們先介紹第二種冗余
【網絡安全學習攻略】
輸出不影響
第二個例子
X = ab ,Y = b + c, F = Xb + bY + XY, Z = FXd
依舊是先尋找 X 和 ab 的關系,以及 Y 和 bc 的關系
然后是 F 和 X b Y 的關系
最后到Z = FXd
首先根據前面F和XbY的關系,我們得到X為1時,F為1,也就是不存在01的輸入
接下來我們看看Z和FXd的關系,要想Z為1,FXd都要是1,也就是當Xd有一個不為1或者都不為1時,F不影響輸出,而當Xd都為1時,F一定為1,也就是F從始至終都不影響輸出。
這就是第二種冗余,輸入對輸出不影響,所以我們完全可以忽略這一輸入達到簡化的目的。
簡化冗余
通過算法找到冗余就是我們接下來要做的事情
在討論算法之前,我們先明確冗余的特征:在前面的兩個例子中,我們分別得到的是基于對輸入不可能的冗余,基于對輸出無影響的冗余Observability don’t cares。
對于輸入不可能存在兩個方面,一個是邏輯約束Satisfiability don’t cares,另一個是環節之間的傳遞 Controllability don’t cares
基于邏輯約束的冗余,他的特征是在and邏輯門中,輸出是1,輸入必須全是1,在or邏輯門中,輸出是0,輸入必須全是0。也就是這里的冗余是輸入所導致的輸出和與其輸出不符。
【網絡安全學習攻略】
因此我們判斷冗余的方法就是將輸出X當作一個我們可以控制的輸入,將原邏輯當作實際輸出,當兩者不等時,說明這種情況不可能出現,也就是一個冗余。
例子
X = ab + c
X xor (ab + c) = 1 的X a b c就是冗余,那么接下來就是我們的計算了,如何計算一個xor呢,在前面的SAT中,我們提到了類似的方法。我們將式子轉化成CNF形式:X’ab + X’c + Xa’c’ + Xb’c’。接下來就是對每一個單元進行分析,這里我們使用Boolean Constraint Propagation邏輯約束傳遞的方法就可以了。
對于環節之間的傳遞就是當一個環節存在冗余時,他對下一個環節存在影響.那么我們怎么找到這一冗余呢。
例子
X = a + b , Y = ab , F = Xc + Yd + acd
對于 F 來說,受上一環節影響的因素只有X Y,同時F本身具有基于邏輯約束的冗余的可能,所以我們只討論受上一環節影響,對于X Y 來說,他們具有的冗余特征是X xor (a+b) 和 Y xor ab。對于 F 來說 a 元素具有邏輯冗余的可能,所以如果在環節冗余中討論,不得不同時考慮邏輯冗余,因此我們只對 F 中不存在的但是 X Y 中存在的 b 進行分析,分析方法就是遍歷,我們需要知道對于任意b存在的冗余。
接下來是如何計算,不知道大家對任意b有沒有熟悉的感覺,任意b說明b對輸出無影響,在找冗余時,我們要找到對于任意b,存在一種輸出是不可能出現的,對于不可能出現,其根本原因在于上一環節邏輯冗余的存在,所以我們要找的就是對于任意b依舊存在的邏輯冗余。也就可以表示為[X xor (a + b)] + [Y xor (ab)]在任意b的情況下等于1的輸入組合。這里我們可以使用全部量化的方法計算,也就是計算(∨b)([X xor (a + b)] + [Y xor (ab)])
(∨b)([X xor (a + b)] + [Y xor (ab)])我們可以得到CNF的形式。
([X xor (a + b)] + [Y xor (ab)])_(b=1) = X xor 1 + Y xor a = X’ + Y’a + Ya’
([X xor (a + b)] + [Y xor (ab)])_(b=0) = X xor a + Y xor 0 = X’a + Xa’ + Y
兩式求與
(X’ + Y’a + Ya’) * (X’a + Xa’ + Y)
=X’a + X’Y + X’Y’a + XYa’ + Ya’
=X’a + X’Y + Ya’
再根據Boolean Constraint Propagation邏輯約束傳遞的方法得到最終冗余。
除此之外,還存在另一種形式的環節之間約束的傳遞,那就是最初的輸入存在冗余,也就是在最開始就人為規定有些輸入不存在,對于這樣的冗余,他不再具有邏輯性,所以我們不能用xor,此時,我們尋找另一種方法。
我們需要做的就是讓之前那個計算式在冗余的輸入的情況下能夠返回1就可以了。既然如此,我們只需要增加冗余輸入的1的形式就好了。
例子
依舊是上面的例子 X = a + b , Y = ab , F = Xc + Yd + acd
我們增加的約束是 b c d 不能同時是1
情況依舊是,對任意的b來說,存在情況滿足[X xor (a + b)] + [Y xor (ab)]為1,只不過由于最初的輸入限制 b c d 不能同時是1,所以在b c d 同時為1 的情況下結果也要輸出1。所以我們只需要在[X xor (a + b)] + [Y xor (ab)]加上bcd,即[X xor (a + b)] + [Y xor (ab) + bcd]
計算部分和上面一樣。
最后就是找到對輸出無影響的冗余
對輸出有影響我們可以怎么表示,使用boolean difference ?f / ?x
當?f / ?x為1有影響,為0 無影響。
所以我們只需要計算[Z(F=0) xor Z(F=1)] 是否等于0就好了,由于我們的Boolean Constraint Propagation邏輯約束傳遞一般判斷結果為1,所以我們在最后加上非運算。
由于F自身存在約束,所以對F 中存在的輸入我們需要考慮,而對F中沒有的輸入,我們要求任意輸入都滿足。
例子
F = ab’ + a’b Z = ab + Fc’ +F’b’
(∨c)(Z(F=1) xor Z(F=0))就是我們要計算的式子。
但是這一式子只考慮了F沒有約束情況下的冗余,我們還需要做的是將F的約束情況加入,約束情況就是F xor (ab’ + a’b),我們可以得到abF的關系,在計算過程中,將abF關系代入得到最終結果就是有約束情況的冗余。
【網絡安全學習攻略】
參考文獻
最后
以上就是基礎知識的全部內容
需要網絡安全學習資料的可以關注私我哦!
【網絡安全學習攻略】
總結
以上是生活随笔為你收集整理的硬件安全系列 逻辑电路基础知识介绍(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬件安全系列 逻辑电路基础知识介绍(二)
- 下一篇: 蓝队视角下的企业安全运营