HDLBits答案(9)_卡诺图与最简SOP式
卡諾圖與最簡SOP式
HDLBits鏈接
真值表
定義
真值表是表征邏輯事件輸入和輸出之間全部可能狀態的表格。以1表示真,0表示假。
從真值表到標準式
- SOP標準式:找出真值表中所有輸出為1的表項,按照輸入的情況,為1用變量表示,為0則用反變量表示,得出若干乘積項,然后求和。
 - POS標準式:找出真值表中所有輸出為0的表項,按照輸入的情況,為1用反變量表示,為0則用原變量表示,得出若干求和項,然后求積。
 
舉例說明
有如下真值表
| 0 | 0 | 0 | 0 | 
| 0 | 0 | 1 | 0 | 
| 0 | 1 | 0 | 0 | 
| 0 | 1 | 1 | 1 | 
| 1 | 0 | 0 | 1 | 
| 1 | 0 | 1 | 0 | 
| 1 | 1 | 0 | 1 | 
| 1 | 1 | 1 | 1 | 
若針對所有F=1的表項,可輕松寫出SOP標準式如下:
F=ABC+ABC+ABC+ABC
若針對所有F=0的表項,可輕松寫出POS標準式如下:
F=(A+B+C)(A+B+C)(A+B+C)(A+B+C)
從標準SOP式到最簡SOP式
標準表達式并非最簡表達式,從標準SOP式到最簡SOP式為一個標準的邏輯化簡的過程。
此時可以引入卡諾圖,來尋找最小項的合并規律,從而可以輕易的進行化簡工作,此處僅介紹系統化簡法。
1、求出函數的SOP標準式
例如,對于函數:
F=ABC+ABC+D+ABCD
可寫出其標準的SOP式為
2、求出函數的全部主要項
首先,將最小項按其內部包含1的個數多少進行排列、分組,可得下表:
其次,根據該表,可以發現能合并的兩個最小項必定位于相鄰的兩組,因此從最低組開始,和相鄰高位組逐個運算合并,并按乘積項中1的個數進行排列得到的新表如下:(注:1、在合并的同時,需在之前的表中用勾標注出被使用過的最小項;2、如果合并結果與之前某次一樣,則無需列出。)
第三,參考前兩個步驟,繼續對表項合并,直至無法合并為止。之后的合并過程需注意的是“—”的位置要相同,繼續合并的結果如下:
第四,上述各表中,凡是沒被“√”標記的合并項,就是主要項。對于該例,主要項就是:P0=AB和P1=D。
3、求出必要項、列出化簡結果
如果某一個主要項中,至少包含一個其他項不包含的最小項,則它必然是必要項。
得到主要項后再進行驗證是否存在等價主要項,并將其刪除。
鞏固練習
題目描述1:
實現下面卡諾圖所描述的電路。
Solution1:
module top_module(input a,input b,input c,output out ); assign out = ~((~a)&(~b)&(~c)); endmodule題目描述2:
實現下面卡諾圖所描述的電路。
Solution2:
module top_module(input a,input b,input c,input d,output out ); assign out = ~a & ~d | ~b & ~c | b & c & d | a & c & d;endmodule題目描述3:
實現下面卡諾圖所描述的電路。
[David說]:d可以根據化簡需求自己制定為0或是1。
Solution3:
module top_module(input a,input b,input c,input d,output out ); assign out = a | (~a&~b&c);endmodule題目描述4:
實現下面卡諾圖所描述的電路。
Solution4:
module top_module(input a,input b,input c,input d,output out ); assign out = ~a & b & ~c & ~d | a & ~b & ~c & ~d | ~a & ~b & ~c & d | a & b & ~c & d | ~a & b & c & d | a & ~b & c & d | ~a & ~b & c & ~d | a & b & c & ~d;endmodule題目描述5:
實現一個有四輸入(a.b,c,d)的單輸出數字系統,當2、7或15出現在輸入端時,生成邏輯1,當0、1、4、5、6、9、10 13或14出現時,生成邏輯0。數字3、8、11和12的輸入不會出現在這個系統中。例如,7對應于a和b。c,d分別被設為0,1,1,1。
確定最小SOP格式的輸出out_sop和最小POS格式的輸出out_pos。
Solution5:
module top_module (input a,input b,input c,input d,output out_sop,output out_pos ); assign out_sop = c & d | ~a & ~b & c;assign out_pos = ~((~c | ~d) & (a | b | ~c));endmodule[David說]:這道題是最大項和最小項的問題,我們常用的是最小項,也就是積之和,但是最大項也需要了解一下,一般使用最小項就好了。
題目描述6:
實現下面卡諾圖所描述的電路。
Solution6:
module top_module (input [4:1] x, output f );assign f = ~x[1]&x[3] | x[2]&x[4];endmodule題目描述7:
實現下面卡諾圖所描述的電路。
Solution7:
module top_module (input [4:1] x,output f ); assign f = ~x[2]&~x[4] | ~x[1]&x[3] | x[2]&x[3]&x[4];endmodule題目描述8:
對于下面的卡諾圖,用一個4-1多路選擇器和不限的2-1多路選擇器,但2-1多路選擇器的使用要盡可能少。你不允許使用任何其他邏輯門,你必須使用a和b作為多路復用器選擇器的輸入,如下面的4- 1多路復用器所示。
Solution8:
module top_module (input c,input d,output [3:0] mux_in );always @(*) begincase({c,d})2'b0:mux_in = 4'b0100;2'b1:mux_in = 4'b0001;2'b11:mux_in = 4'b1001;default:mux_in = 4'b0101;endcaseendendmodule總結
- 熟悉了卡諾圖和基本的計算單元
 - 熟悉了卡諾圖的化簡方式,了解了SOP和POS的區別與聯系,以及如何求得SOP最簡式。
 
總結
以上是生活随笔為你收集整理的HDLBits答案(9)_卡诺图与最简SOP式的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: HDLBits答案(8)_Verilog
 - 下一篇: HDLBits答案(10)_D触发器、同