精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

卡諾圖如何化簡

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-11-01 09:02 ? 次閱讀

HDLBits 是一組小型電路設計習題集,使用 Verilog/SystemVerilog 硬件描述語言 (HDL) 練習數字硬件設計~

網址如下:

https://hdlbits.01xz.net/

關于HDLBits的Verilog實現可以查看下面專欄:

https://www.zhihu.com/column/c_1131528588117385216

縮略詞索引

SV:SystemVerilog

從今天開始新的一章-Circuits,包括基本邏輯電路、時序電路、組合電路等。

今天更新整個關于卡諾圖部分,數電忘記的,可以先回顧一下。

卡諾圖

50ab7562-597f-11ed-a3b6-dac502259ad0.png

簡介

卡諾圖(KM或K -map)是一種簡化布爾代數表達式的方法。Maurice Karnaugh在 1953年為Edward W. Veitch 1952 Veitch 圖做了改進,并介紹了新的Marquand 圖,即我們現在熟知的卡諾圖。

卡諾圖利用人類的模式識別能力減少了對大量計算的需求,還允許快速識別和消除潛在的競爭條件。

所需的布爾結果從真值表轉移到二維網格中,在卡諾圖中,單元格按格雷碼排序,每個單元格位置代表輸入條件的一種組合。單元格也稱為最小項,而每個單元格值代表布爾函數的相應輸出值。識別出最佳的 1 或 0 組,它們表示原始真值表中邏輯的規范形式的項。這些術語可用于編寫表示所需邏輯的最小布爾表達式。

示例

卡諾圖用于簡化布爾代數函數。例如,考慮以下真值表描述的布爾函數。

函數的真值表

序號 A B C D f(A,B,C,D)
0 0 0 0 0 0
1 0 0 0 1 0
2 0 0 1 0 0
3 0 0 1 1 0
4 0 1 0 0 0
5 0 1 0 1 0
6 0 1 1 0 1
7 0 1 1 1 0
8 1 0 0 0 1
9 1 0 0 1 1
10 1 0 1 0 1
11 1 0 1 1 1
12 1 1 0 0 1
13 1 1 0 1 1
14 1 1 1 0 1
15 1 1 1 1 0

以下是使用布爾變量A、B、C、D描述未簡化布爾代數中相同函數的兩種不同符號。

50e4e1f8-597f-11ed-a3b6-dac502259ad0.png

mi是要映射的最小項(即,在真值表中輸出為 1 的行)。

50effd9a-597f-11ed-a3b6-dac502259ad0.png

mi是要映射的最大項(即,真值表中輸出為 0 的行)

50fdab70-597f-11ed-a3b6-dac502259ad0.png

在上面的例子中,四個輸入變量可以用 16 種不同的方式組合,所以真值表有 16 行,卡諾圖有 16 個位置。因此,卡諾圖以 4 × 4 的網格排列。

行和列索引(顯示在卡諾圖的頂部和左側)以格雷碼而不是二進制數字順序排列。格雷碼確保每對相鄰單元之間只有一個變量發生變化。完整卡諾圖的每個單元格都包含一個二進制數字,表示該輸入組合的函數輸出。

分組

在構建卡諾圖之后,它被用來尋找布爾代數最簡單的可能形式之一——規范形式——獲取真值表中的信息。卡諾圖中相鄰的 1 代表簡化表達式的機會。最終表達式的最小項是通過在地圖中圈出 1 組來找到的。Minterm 組必須是矩形的,并且面積必須是 2 的冪(即 1、2、4、8...)。最小項矩形應盡可能大,不包含任何 0。組可以重疊以使每個組更大。下例中的最優分組用綠、紅、藍線標記,紅、綠組重疊。紅色組是一個 2×2 的正方形,綠色組是一個 4×1 的矩形,重疊區域用棕色表示。

5135c9d8-597f-11ed-a3b6-dac502259ad0.png

單元格通常由描述單元格覆蓋的輸入的邏輯值的簡寫表示。例如,AD表示一個單元格覆蓋了A和D為1的 2x2 區域,即上圖中編號為 13、9、15、11 的單元格。另一方面,A D(非)表示A為真且D為假(即D(非)為真)的單元格。

網格是環形連接的,這意味著矩形組可以環繞邊緣(見圖)。最右邊的單元格實際上與最左邊的單元格“相鄰”,因為相應的輸入值僅相差一位;同樣,最頂端的和最底端的也是如此。因此,A D(非)可以是一個有效術語——它在頂部包括單元格 12 和 8,并環繞到底部以包括單元格 10 和 14——就像B(非) D(非)一樣,它包括四個角。

解決方案

函數 f(A, B, C, D) 的 K-map 顯示為對應于最小項的彩色矩形。棕色區域是紅色 2×2 正方形和綠色 4×1 矩形的重疊部分。f 的倒數的 K-map 顯示為灰色矩形,對應于 maxterms

53f2b028-597f-11ed-a3b6-dac502259ad0.png

一旦構建了卡諾圖并且相鄰的 1 通過矩形和方形框連接起來,就可以通過檢查每個框內哪些變量保持相同來找到代數小項。

對于紅色分組:

A是相同的,并且在整個框中都等于 1,因此它應該包含在紅色最小項的代數表示中。

B不保持相同的狀態(它從 1 變為 0),因此應該被排除在外。

C不變。它始終為 0,因此應包括其補碼 NOT-C。因此,應包括C。

D發生變化,因此被排除在外。

因此,布爾乘積和表達式中的第一個最小項是A C(非)。

對于綠色分組,A和B保持相同的狀態,而C和D改變。B為 0,必須先取反才能包含在內。因此,第二項是A B(非)。請注意,綠色分組與紅色分組重疊是可以接受的。

同樣,藍色分組給出了術語BC D((非))。

將每一組的解組合起來:電路的最后的化簡結果如下:

54133cda-597f-11ed-a3b6-dac502259ad0.png

還有其他方式,就不展開描述了,可以自行學習。

Problem 72-Kmap1

題目說明

根據卡諾圖來實現電路:

5419cc58-597f-11ed-a3b6-dac502259ad0.png 圖片來自HDLBits

我們可以嘗試最大項之積和最小項之和的形式來完成電路設計。

模塊端口聲明

moduletop_module(
inputa,
inputb,
inputc,
outputout);

題目解析

按照下圖方框化簡:

5426af68-597f-11ed-a3b6-dac502259ad0.png

得到:

f(a,b,c)=a+b+c=a'b'c'(摩根定理)

所以可以有兩種方式解決。

moduletop_module(
inputlogica,
inputlogicb,
inputlogicc,
outputlogicout
);

assignout=a|b|c;

endmodule

54377d48-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

544d98da-597f-11ed-a3b6-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅。

這一題就結束了。

Problem 73-Kmap2

題目說明

還是根據卡諾圖來設計電路,本題為4個變量。

54719bfe-597f-11ed-a3b6-dac502259ad0.png 圖片來自HDLBits

在編寫verilog之前,我們可先化簡卡諾圖。

模塊端口聲明

moduletop_module(
inputa,b,cin,
outputcout,sum);

題目解析

根據下圖先化簡卡諾圖得到最小和:

547d477e-597f-11ed-a3b6-dac502259ad0.png

f(a,b,c,d) = a'd'+b'c'+ab'd+bcd

moduletop_module(
inputlogica,
inputlogicb,
inputlogicc,
inputlogicd,
outputlogicout
);

assignout=~a&~d|~b&~c|a&~b&d|b&c&d;

endmodule

548bd672-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

549d14f0-597f-11ed-a3b6-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅。

這一題就結束了。

Problem 74-Kmap3

題目說明

根據卡諾圖實現電路:

54bfb4ec-597f-11ed-a3b6-dac502259ad0.png 圖片來自HDLBits

還是先化簡卡諾圖,其中D為don't care值。相當于X。可以一起圈。

模塊端口聲明

moduletop_module(
inputa,
inputb,
inputc,
inputd,
outputout);

題目解析

可以這樣圈,進行化簡:

54cc11ba-597f-11ed-a3b6-dac502259ad0.png

PS:

2^n個方格相鄰的最小項,可以合并成1項,消去n個變量。

moduletop_module(
inputlogica,
inputlogicb,
inputlogicc,
inputlogicd,
outputlogicout);

assignout=a|~b&c;
endmodule

54ddfb64-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

5511c232-597f-11ed-a3b6-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅。

這一題就結束了。

Problem 75-Kmap4

題目說明

根據卡諾圖實現電路:

55447bfa-597f-11ed-a3b6-dac502259ad0.png 圖片來自HDLBits

模塊端口聲明

moduletop_module(
inputa,
inputb,
inputc,
inputd,
outputout);

題目解析

這題沒什么能化簡的,就老老實實敲代碼吧。

moduletop_module(
inputlogica,
inputlogicb,
inputlogicc,
inputlogicd,
outputlogicout
);

assignout=~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

556efa42-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

55872ec8-597f-11ed-a3b6-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅。

這一題就結束了。

Problem 76-ece241_2013_q2

題目說明

一個4輸入a, b, c, d和一輸出的邏輯電路,當輸入為2, 7或15時,輸出為1, 當輸入為0, 1, 4, 5, 6, 9, 10, 13, 或 14 時,輸出為0,當輸入為3,8,11或12時輸出為任意值。舉例來說,7對應輸入abcd為0,1,1,1.

注意: 該電路的SOP和POS必須均為化簡后的最小值

模塊端口聲明

moduletop_module(
inputa,
inputb,
inputc,
inputd,
outputout_sop,
outputout_pos
);

題目解析

直接根據題目做出答案比較難,所以我們需要先根據題目畫出卡諾圖:

55ac07ca-597f-11ed-a3b6-dac502259ad0.png

SOP圈法就是圈1,如下:

55bd80d6-597f-11ed-a3b6-dac502259ad0.png

POS圈法就是圈0,如下:

55e97f1a-597f-11ed-a3b6-dac502259ad0.png

moduletop_module(
inputlogica,
inputlogicb,
inputlogicc,
inputlogicd,
outputlogicout_sop,
outputlogicout_pos
);

assignout_sop=c&d|~a&~b&c;
assignout_pos=c&(~a|b)&(~b|~c|d);
endmodule
55f68aa2-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

5617e648-597f-11ed-a3b6-dac502259ad0.png

注意圖中無波形。

這一題就結束了。

Problem 77-m2014 q3

題目說明

還是根據卡諾圖實現電路:

56344234-597f-11ed-a3b6-dac502259ad0.png 圖片來自HDLBits

模塊端口聲明

moduletop_module(
input[4:1]x,
outputf);

題目解析

沒什么難度,與其他沒區別。

moduletop_module(
inputlogic[4:1]x,
outputlogicf);

assignf=(~x[1]&x[3])|(x[1]&x[2]&~x[3]);
endmodule



56458544-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

5650bd2e-597f-11ed-a3b6-dac502259ad0.png

注意圖中無波形。

這一題就結束了。

Problem 78-2012_q1g

題目說明

還是根據卡諾圖畫出電路:

5670fb2a-597f-11ed-a3b6-dac502259ad0.png 圖片來自HDLBits

模塊端口聲明

moduletop_module(
input[4:1]x,
outputf
);

題目解析

都是同一個道理。

moduletop_module(
inputlogic[4:1]x,
outputlogicf
);

assignf=~x[2]&~x[4]|~x[1]&x[3]|x[2]&x[3]&x[4];
endmodule


569a5f88-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

56b3ab3c-597f-11ed-a3b6-dac502259ad0.png

注意圖中無波形。

這一題就結束了。

Problem 79-ece241_2014_q3

題目說明

根據題目給出的卡諾圖,用一個4-1的多路選擇器和盡可能多的2-1多路選擇器來實現電路,不允許使用其他邏輯門,必須使用ab作為選擇器的輸入。

56c91684-597f-11ed-a3b6-dac502259ad0.png56d88024-597f-11ed-a3b6-dac502259ad0.png 圖片來自HDLBits

模塊端口聲明

moduletop_module(
inputc,
inputd,
output[3:0]mux_in
);

題目解析

開始題目比較“萌”,因為把東西結合起來了,所以一時難以下手。

這題如果從選擇器入手就比較簡單了,從圖中看到,當ab為固定值,輸出是由cd的輸入決定。

接下來就是看卡諾圖了,從卡諾圖中:

當ab == 2'b00時,化簡卡諾圖,得到mux_in[0] = c+d=cd;

575acac0-597f-11ed-a3b6-dac502259ad0.png

當ab == 2'b01時,化簡卡諾圖,得到mux_in[1] = 1'b0;

當ab == 2'b10時,化簡卡諾圖,得到mux_in[2] = d';

當ab == 2'b11時,化簡卡諾圖,得到mux_in[3] = cd;

576450ea-597f-11ed-a3b6-dac502259ad0.png

此處需注意mux_in[3:0], 一個高位低位的問題,不要搞反了。

moduletop_module(
inputlogicc,
inputlogicd,
outputlogic[3:0]mux_in
);


assignmux_in={(c&d),(~d),1'b0,(c|d)};

endmodule


576f9e5a-597f-11ed-a3b6-dac502259ad0.png

點擊Submit,等待一會就能看到下圖結果:

5783ed24-597f-11ed-a3b6-dac502259ad0.png

注意圖中的Ref是參考波形,Yours是你的代碼生成的波形,網站會對比這兩個波形,一旦這兩者不匹配,仿真結果會變紅。

這一題就結束了。

總結

今天的幾道題就結束了,對于理解卡諾圖化簡的人來說就比較簡單了,沒學過或者忘記的,可以去回顧一下相關知識。整體比較簡單,沒有復雜的代碼,沒有復雜的設計思路,主要在于卡諾圖的理解。

最后我這邊做題的代碼也是個人理解使用,有錯誤歡迎大家批評指正,祝大家學習愉快~

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 卡諾圖
    +關注

    關注

    0

    文章

    14

    瀏覽量

    8641
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • 選擇器
    +關注

    關注

    0

    文章

    106

    瀏覽量

    14523

原文標題:HDLBits: 在線學習 SystemVerilog(十三)-Problem 72-79(卡諾圖)

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    26.邏輯函數的卡諾化簡法 (4)#邏輯函數 #卡諾化簡

    電路分析電路設計分析
    電路設計快學
    發布于 :2022年07月27日 10:07:55

    27.邏輯函數的卡諾化簡法 (5)#邏輯函數 #卡諾化簡

    數字電路電路設計分析
    電路設計快學
    發布于 :2022年07月27日 10:09:29

    28 邏輯函數的卡諾化簡法 (6)#邏輯函數 #卡諾化簡

    數字電路電路設計分析
    電路設計快學
    發布于 :2022年07月27日 10:10:11

    有邏輯函數化簡軟件的,卡諾化簡軟件,請分享吧

    急需 邏輯函數化簡實在讓我頭都大
    發表于 12-26 23:06

    數字邏輯基礎卡諾化簡

    數字邏輯基礎之卡諾化簡
    發表于 05-30 21:56

    邏輯函數的卡諾化簡

    邏輯函數的卡諾化簡
    發表于 01-21 14:06 ?48次下載

    卡諾化簡

    卡諾的構成卡諾是最小項按一定規律排列的方格,每一個最小項占有一個小方格。因為最小項的數目與變量數有關,設變量數為n,則最小項的數目為2
    發表于 09-27 12:34 ?0次下載

    第五講 邏輯函數的卡諾化簡

    第五講 邏輯函數的卡諾化簡法 2.5 邏輯函數的卡諾化簡法2. 5. 1 最小項與
    發表于 03-30 16:03 ?6034次閱讀
    第五講 邏輯函數的<b class='flag-5'>卡諾</b><b class='flag-5'>圖</b><b class='flag-5'>化簡</b>法

    邏輯函數的卡諾化簡

    邏輯函數的卡諾化簡法   由前面的學習得知,利用代數法可以使邏輯函數變成較簡單的形式。但要求熟練掌握邏輯代數的基本定律,而且需要一些技巧,特別是經化
    發表于 04-07 10:11 ?3.5w次閱讀
    邏輯函數的<b class='flag-5'>卡諾</b><b class='flag-5'>圖</b><b class='flag-5'>化簡</b>法

    卡諾化簡法詳細介紹

    卡諾化簡法詳細介紹 一 卡諾的構成卡諾
    發表于 03-08 11:00 ?18.6w次閱讀

    卡諾化簡邏輯函數.ppt

    卡諾化簡邏輯函數_邏輯代數基礎課件內容.ppt。
    發表于 10-29 16:51 ?0次下載

    卡諾簡化方法及簡化步驟介紹

    本文開始介紹了卡諾結構特點,其次介紹了卡諾化簡函數,最后闡述了卡諾
    發表于 03-01 08:51 ?5.8w次閱讀
    <b class='flag-5'>卡諾</b><b class='flag-5'>圖</b>簡化方法及簡化步驟介紹

    如何畫卡諾_卡諾化簡約束條件

    本文開始介紹了什么是卡諾卡諾結構特點,其次介紹了卡諾的性質與畫
    發表于 03-01 10:37 ?6w次閱讀
    如何畫<b class='flag-5'>卡諾</b><b class='flag-5'>圖</b>_<b class='flag-5'>卡諾</b><b class='flag-5'>圖</b><b class='flag-5'>化簡</b>約束條件

    卡諾化簡法例題詳解

    本文開始介紹了卡諾概念與卡諾結構特點,其次詳細介紹了卡諾的性質,最后用例題說明了
    發表于 03-07 16:36 ?32.8w次閱讀
    <b class='flag-5'>卡諾</b><b class='flag-5'>圖</b><b class='flag-5'>化簡</b>法例題詳解

    卡諾化簡畫圈的原則和步驟

    用代數法化簡邏輯函數,需要依賴經驗和技巧,有些復雜函數還不容易求得最簡形式。卡諾化簡法是一種更加系統并有統一規則可循的邏輯函數化簡法。
    發表于 03-06 13:58 ?13.9w次閱讀
    <b class='flag-5'>卡諾</b><b class='flag-5'>圖</b><b class='flag-5'>化簡</b>畫圈的原則和步驟