HDEBits中組合邏輯類的部分題目練習

文章目錄

  • 1. More logic gates
  • 2. Truth tables
  • 3. 256-to-1 4-bit multiplexer
  • 4. 3-bit binary adder
  • 5. Signed addition overflow
  • 6. 4-digit BCD adder
  • 7. Minimum SOP and POS
  • 8. Karnaugh map
  • 9. K-map implemented with a multiplexer
  • 總結

1. More logic gates

題目:讓我們嘗試同時構建幾個 logic gates。構建一個具有兩個輸入(a 和 b)的組合電路。
有 7 個輸出,每個輸出都有一個邏輯門驅動它:
out_and:a 和 b
out_or:a 或 b
out_xor:a xor b
out_nand:a nand b
out_nor:a 和 b
out_xnor:a xnor b
out_anotb:a 和非 b
思路:熟悉各個邏輯門的圖形以及運算原則。
在這里插入圖片描述

and:與門 ——a & b
or:非門——a | b
xor:異或門——a ^ b
nand:與非門——~(a & b)
nor:或非門——~(a | b)
xnor:同或門——~(a ^ b)
anotb:a and not b——a & ~b

module top_module( input a, b,output out_and,output out_or,output out_xor,output out_nand,output out_nor,output out_xnor,output out_anotb
);assign out_and   =   a  &  b;assign out_or    =   a  |  b;assign out_xor   =   a  ^  b;assign out_nand  = ~(a  &  b);assign out_nor   = ~(a  |  b);assign out_xnor  = ~(a  ^  b);assign out_anotb =   a  &~ b;//a and not b:a與非b
endmodule

2. Truth tables

題目
在這里插入圖片描述
在這里插入圖片描述

思路:從真值表綜合電路。
真值表共有8行,對應三個輸入的所有可能組合。輸出f為1的行是第2、3、5、7行。我需要把這些行的輸入條件找出來,然后轉換成邏輯表達式。
創建實現真值表函數的電路的一種簡單方法是以乘積總和的形式表示函數。乘積之和(即 OR )(即 AND)是指在真值表的每一行使用一個 N 輸入 AND 門(以檢測輸入何時與每一行匹配),后跟一個 OR 門,該門僅選擇導致“1”輸出的那些行。

行2:x3=0, x2=1, x1=0 → (~x3) & x2 & (~x1)
行3:x3=0, x2=1, x1=1 → (~x3) & x2 & x1
行5:x3=1, x2=0, x1=1 → x3 & (~x2) & x1
行7:x3=1, x2=1, x1=1 → x3 & x2 & x1
然后,這些四個與項需要或起來。所以最終的表達式應該是這四個項的或。
所以邏輯表達式為:
f = (~x3 & x2 & ~x1) | (~x3 & x2 & x1) | (x3 & ~x2 & x1) | (x3 & x2 & x1)
簡化后的表達式是:
f = (~x3 & x2) | (x3 & x1)

module top_module( input x3,input x2,input x1,  // three inputsoutput f   // one output
);assign f = (~x3 & x2) | (x3 & x1);
endmodule

3. 256-to-1 4-bit multiplexer

題目:創建一個 4 位寬、256 對 1 的多路復用器。256 個 4 位輸入全部打包到一個 1024 位輸入向量中。sel=0 應該選擇 [3:0] 中的位,sel=1 選擇 [7:4] 中的位,sel=2 選擇 [11:8] 中的位,等等。
思路:確定sel的值映射到輸入向量的相應位置

module top_module (input [1023:0] in,input [7:0] sel,output [3:0] out
);assign out = {in[sel*4+3], in[sel*4+2], in[sel*4+1], in[sel*4+0]}; //一一對應輸出// assign out = in[sel*4 +: 4];		// assign out = in[sel*4+3 -: 4];endmodule

4. 3-bit binary adder

題目:要求實現一個3-bit全加器

思路:有三種解決的方法。
1、反復使用的真值表轉為邏輯表達式
2、采用位拼接符號{ }進行對位的操作
3、例化1-bit全加器,使用三個1-bit全加器實現目標(這里采用)

//方法3
module top_module( input [2:0] a, b,input cin,output [2:0] cout,output [2:0] sum
);adder u1 (.a(a[0]),.b(b[0]),.cin(cin),.cout(cout[0]),.sum(sum[0])
);adder u2 (.a(a[1]),.b(b[1]),.cin(cout[0]),.cout(cout[1]),.sum(sum[1])
);adder u3 (.a(a[2]),.b(b[2]),.cin(cout[1]),.cout(cout[2]),.sum(sum[2])
);
endmodule
module adder(//由于沒有例化好的adder模塊需要自己補上input a,b,cin,output cout,sum
);assign {cout,sum} = a + b + cin;
endmodule

5. Signed addition overflow

題目在這里插入圖片描述

思路:要實現兩個8位補碼數的加法并檢測有符號溢出,需根據以下條件判斷溢出:
溢出 =(兩正數相加結果為負)或(兩負數相加結果為正)

加法可以直接用加法運算符實現,比如assign s = a + b;。
但是,溢出需要根據上述條件來判斷。例如,當a和b的最高位都為0(正數),而s的最高位為1(負數),則溢出;或者a和b的最高位都為1(負數),而s的最高位為0(正數),則溢出。
或者,另一種方法是檢查進位。補碼加法的溢出可以表示為:
溢出 = (a[7] & b[7] & ~s[7]) | (~a[7] & ~b[7] & s[7])。也就是說,當兩個操作數都是負數,但結果為正,或者兩個操作數都是正數,但結果為負時,溢出發生。

module top_module (input [7:0] a,input [7:0] b,output [7:0] s,output overflow
); assign s = a + b;    // 直接計算和// 溢出條件:兩正數結果為負,或兩負數結果為正assign overflow = (a[7] & b[7] & ~s[7]) | (~a[7] & ~b[7] & s[7]);endmodule

6. 4-digit BCD adder

題目在這里插入圖片描述

思路:例化bcd_fadd,使用四個bcd_fadd實現目標

module top_module( input [15:0] a, b,input cin,output cout,output [15:0] sum );wire [3:0] cout_temp;bcd_fadd u1(.a(a[3:0]),.b(b[3:0]),.cin(cin),.cout(cout_temp[0]),.sum(sum[3:0]));bcd_fadd u2(.a(a[7:4]),.b(b[7:4]),.cin(cout_temp[0]),.cout(cout_temp[1]),.sum(sum[7:4]));bcd_fadd u3(.a(a[11:8]),.b(b[11:8]),.cin(cout_temp[1]),.cout(cout_temp[2]),.sum(sum[11:8]));bcd_fadd u4(.a(a[15:12]),.b(b[15:12]),.cin(cout_temp[2]),.cout(cout_temp[3]),.sum(sum[15:12]));assign cout = cout_temp[3];endmodule

7. Minimum SOP and POS

題目在這里插入圖片描述

思路:按照題目要求畫出卡諾圖,注意abcd的權值順序:
在這里插入圖片描述
畫出卡諾圖:
在這里插入圖片描述對于SOP(積之和),即最小項之和。輸出為1的情況是2(0010)、7(0111)、15(1111)。所以需要將這些情況轉化為乘積項,然后合并。同時,無關項可以視情況加入,以簡化表達式。

同樣,POS(和之積)需要考慮輸出為0的情況,即當輸出為0時,對應的最大項需要被覆蓋。而無關項可能可以被用來簡化POS表達式。

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 & ~d);assign out_pos = (c & ~b & ~a)|(c & d & ~a)|(c & d & b);
endmodule

8. Karnaugh map

題目
在這里插入圖片描述

思路:通過ab來控制cd輸出的值,與上題的解決思路一樣。

module top_module (input [4:1] x, output f );assign f = ( ~x[1] & x[3])|(x[1] & x[2] & ~x[3]);
endmodule

9. K-map implemented with a multiplexer

題目在這里插入圖片描述

思路

module top_module (input c,input d,output [3:0] mux_in
); assign mux_in = {(c & d),(~d),(1'b0),(c|d)};
endmodule

總結

通過對組合邏輯類相關題目的練習,初步掌握了如何用verilog 語言來編寫邏輯門電路、多路復用器、還有真值表和卡諾圖能夠幫助我們解決問題,收獲頗多!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74604.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74604.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74604.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache httpclient okhttp(2)

學習鏈接 Apache httpclient & okhttp(1) Apache httpclient & okhttp(2) okhttp github okhttp官方使用文檔 okhttp官方示例代碼 OkHttp使用介紹 OkHttp使用進階 譯自OkHttp Github官方教程 SpringBoot 整合okHttp…

【git項目管理】長話短說

目錄 主要分為三種使用情況 安裝git后第一次使用創建新倉庫并管理克隆倉庫并管理 初次使用git 首先確定電腦的用戶名是純英文,沒有中文和奇怪的符號,如果不滿足這個條件,參考這個 鏈接 修改用戶名 git config --global user.name "…

算法刷題記錄——LeetCode篇(3.2) [第211~212題](持續更新)

更新時間:2025-04-04 算法題解目錄匯總:算法刷題記錄——題解目錄匯總技術博客總目錄:計算機技術系列博客——目錄頁 優先整理熱門100及面試150,不定期持續更新,歡迎關注! 215. 數組中的第K個最大元素 給…

【linux學習】linux系統調用編程

目錄 一、任務、進程和線程 1.1任務 1.2進程 1.3線程 1.4線程和進程的關系 1.5 在linux系統下進程操作 二、Linux虛擬內存管理與stm32的真實物理內存區別 2.1 Linux虛擬內存管理 2.2 STM32的真實物理內存映射 2.3區別 三、 Linux系統調用函數 fork()、wait()、exec(…

react redux的學習,多個reducer

redux系列文章目錄 第一章 簡單學習redux,單個reducer 前言 前面我們學習到的是單reducer的使用;要知道redux是個很強大的狀態存儲庫,可以支持多個reducer的使用。 combineReducers ?combineReducers?是Redux中的一個輔助函數,主要用于…

Oracle數據庫數據編程SQL<3.5 PL/SQL 存儲過程(Procedure)>

存儲過程(Stored Procedure)是 Oracle 數據庫中一組預編譯的 PL/SQL 語句集合,存儲在數據庫中并可通過名稱調用執行。它們是企業級數據庫應用開發的核心組件。 目錄 一、存儲過程基礎 1. 存儲過程特點 2. 創建基本語法 3. 存儲過程優點 4. 簡單示例 二、沒有參數的存儲…

手撕AVL樹

引入:為何要有AVL樹,二次搜索樹有什么不足? 二叉搜索樹有其自身的缺陷,假如往樹中插入的元素有序或者接近有序,二叉搜索樹就會退化成單支樹,時間復雜度會退化成O(N),因此產生了AVL樹&#xff0c…

《 C語言中的變長數組:靈活而強大的特性》

🚀個人主頁:BabyZZの秘密日記 📖收入專欄:C語言 🌍文章目入 一、變長數組的定義二、變長數組的優勢三、變長數組的使用示例示例1:動態輸入數組大小示例2:變長數組在函數中的應用 四、變長數組的…

【微服務】基礎概念

1.什么是微服務 微服務其實就是一種架構風格,他提倡我們在開發的時候,一個應用應該是一組小型服務而組成的,每一個服務都運行在自己的進程中,每一個小服務都通過HTTP的方式進行互通。他更加強調服務的徹底拆分。他并不是僅局限于…

Linux make與makefile 項目自動化構建工具

本文章將對make與makefile進行一些基礎的講解。 假設我們要建造一座房子,建造過程涉及很多步驟,比如打地基、砌墻、安裝門窗、粉刷墻壁等。每個步驟都有先后順序,并且有些步驟可能依賴于其他步驟的完成。比如,你必須先打好地基才…

如何判斷多個點組成的3維面不是平的,如果不是平的,如何拆分成多個平面

判斷和拆分三維非平面為多個平面 要判斷多個三維點組成的面是否為平面,以及如何將非平面拆分為多個平面,可以按照以下步驟進行: 判斷是否為平面 平面方程法: 選擇三個不共線的點計算平面方程:Ax By Cz D 0檢查其…

多layout 布局適配

安卓多布局文件適配方案操作流程 以下為通過多套布局文件適配不同屏幕尺寸/密度的詳細步驟,結合主流適配策略及最佳實踐總結: 一、?創建多套布局資源目錄? ?按屏幕尺寸劃分? 在 res 目錄下創建以下文件夾(根據設備特性自動匹配&#xff…

Java 大視界 -- Java 大數據在智能農業無人機植保作業路徑規劃與藥效評估中的應用(165)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

美關稅加征下,Odoo免費開源ERP如何助企業破局?

近期,美國特朗普政府推行的關稅政策對全球供應鏈和進出口企業造成巨大沖擊,尤其是依賴中美貿易的企業面臨成本激增、利潤壓縮和合規風險。在此背景下,如何通過數字化轉型優化管理效率、降低運營成本成為企業生存的關鍵。本文以免費開源ERP系統…

go游戲后端開發25:紅中麻將規則介紹

一、游戲基礎規則介紹 在開發紅中麻將游戲之前,我們需要先了解其基礎規則。紅中麻將的牌面由 a、b、c、d 四種花色組成,其中 a、b、c 分別代表萬、條、筒,每種花色都有 1 - 9 的九種牌,每種牌各有四張,總計 36 張 4 …

Unity:平滑輸入(Input.GetAxis)

目錄 1.為什么需要Input.GetAxis? 2. Input.GetAxis的基本功能 3. Input.GetAxis的工作原理 4. 常用參數和設置 5. 代碼示例:用GetAxis控制角色移動 6. 與Input.GetAxisRaw的區別 7.如何優化GetAxis? 1.為什么需要Input.GetAxis&…

OpenCV:計算機視覺的強大開源庫

文章目錄 引言一、什么是OpenCV?1.OpenCV的核心特點 二、OpenCV的主要功能模塊1. 核心功能(Core Functionality)2. 圖像處理(Image Processing)3. 特征檢測與描述(Features2D)4. 目標檢測&#…

AI浪潮下的IT職業轉型:醫藥流通行業傳統IT顧問的深度思考

AI浪潮下的IT職業轉型:醫藥流通行業傳統IT顧問的深度思考 一、AI重構IT行業的技術邏輯與實踐路徑 1.1 醫藥流通領域的智能辦公革命 在醫藥批發企業的日常運營中,傳統IT工具正經歷顛覆性變革。以訂單處理系統為例,某醫藥集團引入AI智能客服…

Qt進階開發:QFileSystemModel的使用

文章目錄 一、QFileSystemModel的基本介紹二、QFileSystemModel的基本使用2.1 在 QTreeView 中使用2.2 在 QListView 中使用2.3 在 QTableView 中使用 三、QFileSystemModel的常用API3.1 設置根目錄3.2 過濾文件3.2.1 僅顯示文件3.2.2 只顯示特定后綴的文件3.2.3 只顯示目錄 四…

KAPC的前世今生--(下)下RPCRT4!NMP_SyncSendRecv函數分析

第一部分:nt!KiDeliverApc函數調用nt!IopCompleteRequest函數后準備返回 1: kd> kv # ChildEBP RetAddr Args to Child 00 ba3eec18 80a3c83b 896e4e40 ba3eec64 ba3eec58 nt!IopCompleteRequest0x3a3 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv…