喻俊淇 張華衛 王全宇 黨建武, 蔣占軍
(1. 蘭州交通大學 自動化與電氣工程學院, 蘭州 730070)(2. 蘭州交通大學 電子與信息工程學院, 蘭州 730070)
“數字電子技術”課程是面向電子信息類專業學生開設的一門專業基礎課,該課程邏輯函數非完全描述及非完全描述邏輯函數化簡等內容涉及到無關項、約束項、任意項概念。化簡具有無關項的邏輯函數時,如果能合理利用這些無關項,一般都可得到更加簡單的化簡結果。
當前國內國外的教材,大多沒有對約束項和任意項在概念上進行區分說明,統一按照無關項進行處理[1-3];部分國內教材將無關項劃分為約束項和任意項并舉例進行說明[4-5],但所舉例子卻混淆了約束項和任意項兩個概念[4];當前教材定義均從輸出端進行區分,約束項和任意項的區別本質上在輸入端;教學研究者對這三個概念及定義也存在著爭論,發表了一些論文對其進行討論[6-11]。
“數字電子技術”課程講授和學習中對邏輯函數化簡統一按照無關項進行處理不會有問題,但在解決具體工程應用問題時卻需要嚴格區分無關項是約束項還是任意項,并對約束項進行相應輸入限制處理,否則設計出來的電路會發生運行錯誤,具體參見2.2例2。因此,對約束項、任意項以及無關項概念認識上存在的疑惑,有必要追本溯源討論厘清。
國內廣泛應用的普通高校教育國家規劃教材及高等學校規劃教材對無關項的講解大體分兩類。
一類是不做嚴格區分,類似教材“在真值表內對應于變量的某些取值,函數的值可以是任意的,或者這些變量的取值根本不會出現[1],這些變量取值所對應的最小項稱為無關項或任意項。”
另一類進行概念上的區分,類似教材[4]“恒等于0的最小項稱為函數的約束項。在輸入變量的某些取值下函數值是1還是0皆可,并不影響電路的功能,在這些變量取值下,其值等于1的那些最小項稱為任意項。將約束項和任意項統稱為邏輯函數式中的無關項。”或教材[5]“輸入變量的取值受到限制也稱受到約束,它們對應的最小項稱約束項;在某些輸入變量取值下函數值是1或0并不影響整個電路系統的功能,這些變量取值所對應的最小項稱為任意項。約束項和任意項在邏輯函數中統稱為無關項。”
不做區分、統一按照無關項概念進行處理和國外的教材一脈相承,國外僅有“don′t-care term”術語,并沒有約束項(constraint term)、任意項(arbitrary term)對應術語,和約束項類似術語有forbidden combinations。文獻[2-3]在講述無關項相關內容時沒有進行嚴格區分,并因此在實例講解時敘述上內涵混亂[2-3]。
Wiki上“don′t-care term”術語詞條[12]如下:
In digital logic, a don′t-care term (abbreviated DC, historically also known as redundancies,irrelevancies,optional entries, invalid combinations, vacuous combinations, forbidden combinations, or unused states) for a function is an input-sequence (a series of bits) for which the function output does not matter. An input that is known never to occur is a can′t-happen term.Both these types of conditions are treated the same way in logic design and may be referred to collectively as don′t-care conditions for brevity. The designer of a logic circuit to implement the function need not care about such inputs, but can choose the circuit′s output arbitrarily, usually such that the simplest circuit results (minimization)[12].
從該詞條表述并結合該詞條中引用的論文(詳細見完整詞條頁面)可以得出,“don′t-care term”包含兩種情況,一類是forbidden combinations,另一類是can′t-happen term;結合邏輯電路設計中的具體情況,可知前者對應約束項,后者對應任意項。兩者對電路輸入的要求不同,因而從概念上對其進行劃分是有必要的。
教材[1]中無關項約束項和任意項的關系其實是含糊不清的,表述上將無關項等同約束項,任意項和無關項并列;教材[4]對約束項和任意項的定義內涵基本正確,但僅描述了其表象卻沒有涉及本質。教材[5]對約束項和任意項的定義內涵正確,闡述舉例無誤,但其界定是從輸出端來區分而且任意項的表述僅描述了其表象。這些都是引起困惑和混淆的原因。
教材[4]“恒等于0的最小項稱為函數的約束項”,這是表象(果),其本質(因)是因為約束項“對應的輸入值受限制不允許出現,故其對應的最小項等于0”;另外,輸入值在違反約束時約束項并不一定等于0,所以不應表述為“恒等于0”。
教材[4]任意項定義和教材[5]任意項定義等價于如下命題邏輯表達:若P是合式公式且為非永真可滿足公式,A1,A2,…,An是出現在P中的所有命題變元,假設給A1,A2,…,An以a1,a2,…,an真值指派時不影響P的真假,則變元取值a1,a2,…,an時對應最小項m即為任意項。
分析可知,A1,A2,…,An變元取值a1,a2,…,an的情況完備劃分如下:
(1)a1,a2,…,an客觀會出現但為保證命題正確不允許出現;
(2)a1,a2,…,an客觀會出現且允許出現;
(3)a1,a2,…,an客觀不會出現。
在情況(2)下,若變元取值a1,a2,…,an時對應最小項m=0或m=1皆有可能,則(P V m)=0或(P V m)=1皆有可能,而對于任意項m存在P<=>P V m,即輸入會影響P的真值;也就是說情況(2)時a1,a2,…,an對應最小項不可能是任意項。而情況(1) 時a1,a2,…,an對應最小項是約束項,所以任意項只可能是情況(3)時a1,a2,…,an對應的最小項,因其對應的輸入值客觀上不會輸入,所以邏輯函數值取0取1皆可,這是任意項“無關”的本質。而情況(2)時a1,a2,…,an對應最小項是P的確定描述項。
論文[9]清晰地說明了無關項中“無關”的物理含義,但對任意項的理解與教材[4]存在同樣問題,其中“任意項的數值則是由輸入變量的取值決定的,可能等于1,也可能等于0。這里‘任意’的含義只是指在任意項的取值等于1時,函數的輸出值是任意的,而不表示任意項本身的取值可以隨便取為1或者0”這樣的表述存在問題,特別是后一句前后矛盾。由標準與或式和最小項性質可知,在輸入變量取值給定的情況下,函數的輸出值等于輸入變量取值對應的最小項;輸入變量取值給定時,如果最小項取值等于1,函數輸出值不可能是任意的,只能等于1;反過來,輸入變量取值給定時如果函數輸出值是任意的,只能說明該輸入值對應的最小項取值是任意的。
論文[10]對約束項和任意項能幫助函數化簡的原理進行了正確闡述,但該論文將無關項等同于任意項,且沒有說明任意項的本質。
論文[11]試圖對任意項定義本質進行論證,即證明教材[4]任意項定義后文給出的任意項定義等價。其論點正確,即“任意項對應的輸入值客觀上不會出現”,但其沒有進行邏輯上的證明,且其論文中排除第一種理解的論據不對,具體辨析詳見2.3例3。
據上分析,可以分別給出如下文字定義。
約束項:實現某些邏輯功能時,因為具體問題限制,不允許輸入變量的某些取值組合出現,則這些輸入取值組合對應的最小項稱為約束項;
任意項:實現某些邏輯功能時,輸入變量的某些取值組合客觀上不會出現,則這些輸入取值組合對應的最小項稱為任意項;
無關項:實現某些邏輯功能時,輸入變量的某些取值組合不會影響邏輯功能(即不會改變邏輯函數輸出),即組合電路的輸出與這些輸入取值組合“無關”,這些輸入取值組合也稱為don′t-care conditions,則這些輸入取值組合對應的最小項稱為無關項;無關項概念內涵是約束項和任意項的并集。
為了更好地辨析約束項、任意項和無關項,下面舉例進行說明。
圖1中水箱由大、小兩臺水泵ML和MS供水。水箱中設置了A、B、C三個水位檢測元件,水位低于檢測元件時輸出低電平,水位高于檢測元件時輸出高電平。現以ML和MS分別表示大小兩個水泵的啟動控制信號,取值1時表示啟動水泵工作,取值0時表示停止水泵工作。試設計大小兩個水泵的控制邏輯電路。(來源于教材[4])

圖1
分析:
由于不可能出現水位高于C點而低于B和A點,也不可能出現水位高于B點而低于A點的情況。所以,在正常工作情況下,ABC客觀上根本不可能取值001、010、011、101,所以這4項輸入值組合對應的最小項應為任意項。
正常工作情況下,任意項對應輸入值不會出現。非正常情況下呢?例如水位檢測元件故障,輸出了010,是否意味著任意項概念錯誤?并非如此!非正常情況下是可靠性范疇需要解決的問題,例如對水位檢測元件進行冗余設計或故障-安全設計。
以邏輯變量A、B、C分別表示一臺電動機的正轉、反轉和停止命令,A=1表示正轉,B=1表示反轉,C=1表示停止,寫出表示電動機正轉、反轉和停止工作狀態的邏輯函數。(來源于教材[4])
分析:
正常下達電機命令時,不可能同時下發正轉、反轉、停止1個以上的有效命令,所以ABC的有效取值只可能是000(什么命令都不發,維持當前狀態直到自動停止)、001、010、100(立即停止)中的某一種,而不能是011、101、110、111中的任何一種。因此ABC命令是一組具有約束的變量,其受到約束的輸入值對應的最小項應為約束項。利用約束項化簡得到的電路設計如果輸入值違反該約束則可能會導致電路失效,此例中如果ABC輸入011、101、110、111則電機不能正常工作。教材[4]講解此例時在電路輸入端增加互斥限制電路,確保ABC取值不會違反約束,但不應因此而認為ABC取值011、101、110、111對應的最小項是任意項。換句話說,為了保障電路運行可靠性,對包含約束項的邏輯電路可以在輸入端增加限制電路確保輸入不會違反約束,但不能因此認為約束項就轉變為了任意項,否則約束項和任意項之間便沒有明確的界限;另外從定義上分析,ABC互斥限制電路將ABC輸入值011、101、110、111導向安全側,其輸入值客觀上存在,只是人為地添加了限制,這符合約束項的定義。
設計一個真值表如下圖的二進制七段字形譯碼器。
分析:

上述觀點以此例來證明教材[4]任意項定義包含了兩種情況:一是某些輸入值會出現但不影響邏輯函數輸出,即不影響邏輯函數功能;二是輸入值根本不會出現。并認為該例證明了第一種情況存在,其實不然。

表1 七段顯示譯碼器真值表
首先,已經論證輸入值不影響邏輯功能的情況,除約束項以外,只能是根本不會出現的輸入值,即教材[4]任意項定義內涵實際上只有一種。故教材[4]“因為約束項的取值等于1的輸入變量取值是不允許出現的,所以約束項的值始終為0。而任意項則不同,在函數的運行過程中,有可能出現使任意項取值為1的輸入變量取值”是錯誤的表述,原因在于認為任意項定義包含前述的第一種情況。
按照圖2真值表設計邏輯電路,該電路實現BCD碼加1。

圖2
例1例2因本身與應用場景高度貼合,邏輯問題邊界清晰故能直接判斷無關項類別。此例沒有具體應用場景,設計時可將輸入組合1010~1111對應最小項視為無關項,對O8、O4、O2、O1進行化簡。在電路具體應用時,視I8、I4、I2、I1輸入的具體情況對具體問題的影響來進行處理,如果無關項對應輸入組合客觀上可能輸入但在該具體應用中不允許輸入則應視其為約束項防范違反約束,如果客觀上不會輸入則可視為任意項。
數字電路教學時所涉及邏輯電路缺乏具體應用場景、邏輯問題邊界不明確,這是國外教材對無關項不進行嚴格區分,統一按照無關項進行處理的原因。間接地,導致學生在具體應用時對無關項的理解產生困惑。
針對國內外教材在無關項概念上不一致引起的問題,對邏輯函數非完全描述時的無關項、約束項和任意項概念進行辨析,給出直觀定義并進行了論證。然后結合具體實例,對無關項、約束項、任意項定義及理解上容易出現的錯誤進行了分析,具備一定的教學和應用指導意義。