【HDLbits--Comb組合邏輯】

HDLbits--Comb組合邏輯

    • 1.5 組合邏輯
    • 1.5 Demo

在 Verilog 中,組合邏輯(Combinational Logic)是指輸出僅依賴于當前輸入的邏輯電路,沒有記憶功能(即沒有狀態存儲)。組合邏輯的特點是:

  • 無時鐘信號:不依賴于時鐘邊沿觸發。
  • 即時響應:輸入變化時,輸出立即更新(在仿真中表現為零延遲,實際硬件中有傳播延遲)。

1.5 組合邏輯

組合邏輯的實現方式
在 Verilog 中,組合邏輯通常通過以下方式實現:

  1. assign 語句
    用于簡單的組合邏輯表達式。
    語法:
assign output_signal = expression;

示例:

wire a, b, c;
assign c = a & b;  // c 是 a 和 b 的按位與
  1. always 塊
    用于描述更復雜的組合邏輯。
    必須使用 always @(*) 或 always @(sensitivity_list) 來觸發。
    注意:在 always 塊中賦值的信號必須聲明為 reg 類型。
    示例:
reg c;
always @(*) beginc = a & b;  // c 是 a 和 b 的按位與
end
  1. 條件運算符(三元運算符)
    用于簡單的條件邏輯。
    語法:
assign output_signal = condition ? value_if_true : value_if_false;

示例:

wire a, b, sel, c;
assign c = sel ? a : b;  // 如果 sel 為 1,c = a;否則 c = b
  1. case 語句
    用于多路選擇邏輯。
    必須在 always 塊中使用。
    示例:
reg [1:0] sel;
reg [3:0] out;
always @(*) begincase (sel)2'b00: out = 4'b0001;2'b01: out = 4'b0010;2'b10: out = 4'b0100;2'b11: out = 4'b1000;default: out = 4'b0000;endcase
end
  1. if-else 語句
    用于條件邏輯。
    必須在 always 塊中使用。

示例:

reg a, b, sel, c;
always @(*) beginif (sel)c = a;elsec = b;
end

組合邏輯的設計規則
避免鎖存器(Latch):
在 always 塊中,必須為所有可能的輸入條件明確賦值,否則會推斷出鎖存器。

示例:

always @(*) beginif (sel)c = a;// 缺少 else 分支,會推斷出鎖存器
end

敏感列表:
在 always 塊中,敏感列表必須包含所有影響輸出的信號。
使用 always @(*) 可以自動推斷敏感列表,避免遺漏。

避免組合邏輯環路:
組合邏輯的輸出不能直接或間接反饋到輸入,否則會導致環路。

示例:

assign a = a + 1;  // 組合邏輯環路,非法

組合邏輯的示例
以下是一個 4:1 多路選擇器的 Verilog 實現:

module mux4to1 (input [3:0] data,  // 4 位輸入input [1:0] sel,   // 2 位選擇信號output reg out     // 輸出
);always @(*) begincase (sel)2'b00: out = data[0];2'b01: out = data[1];2'b10: out = data[2];2'b11: out = data[3];default: out = 1'b0;  // 避免鎖存器endcaseend
endmodule

總結

  • 組合邏輯的輸出僅依賴于當前輸入,沒有記憶功能。
  • 可以通過 assign 語句、always 塊、條件運算符、case 語句和 if-else 語句實現。
  • 設計時需避免鎖存器和組合邏輯環路。
  • 組合邏輯是數字電路設計的基礎,廣泛應用于多路選擇器、加法器、譯碼器等電路中。

1.5 Demo

組合邏輯電路:主要是包括條件組合、算數運算,卡諾真值表運算;
題目:計算模式

module top_module (input too_cold,input too_hot,input mode,input fan_on,output heater,output aircon,output fan
); assign heater = (mode == 1'b1) && (too_cold==1'b1);assign aircon = (mode == 1'b0) && (too_hot==1'b1);assign fan = (heater || aircon) || (fan_on);
endmodule

題目:計算輸入向量中的1數量;

module top_module( input [2:0] in,output [1:0] out );always @(*) begincase(in[2:0])3'b001,3'b010,3'b100: out[1:0] = 1;3'b011,3'b101,3'b110: out[1:0] = 2;3'b111: out[1:0] = 3;default: out[1:0] = 0;endcaseendendmodule

題目:計算向量中的index和他相鄰位置的關系


module top_module( input [3:0] in,output [2:0] out_both,output [3:1] out_any,output [3:0] out_different );assign out_both[2:0] = {{in[3] & in[2]},{in[2] & in[1]}, {in[1] & in[0]}};assign out_any[3:1] = {{in[3] | in[2]}, {in[2] | in[1]}, {in[1] | in[0]}};assign out_different[3:0] = {{in[3] ^ in[0]}, {in[3] ^ in[2]}, {in[2] ^ in[1]}, {in[1] ^ in[0]}};endmodule

題目:全加器–多位全加器例化低全加器


module top_module( input [2:0] a, b,input cin,output [2:0] cout,output [2:0] sum );fadd u0_fadd(a[0],b[0],cin,cout[0],sum[0]);fadd u1_fadd(a[1],b[1],cout[0],cout[1],sum[1]);fadd u2_fadd(a[2],b[2],cout[1],cout[2],sum[2]);endmodulemodule fadd( input a, b, cin,output cout, sum );assign cout = a&b|a&cin|b&cin;assign sum = a^b^cin;
endmodule//==變式
module top_module (input [3:0] x,input [3:0] y, output [4:0] sum);wire [2:0] cout;wire cin;assign cin = 1'b0;fadd fadd0 (x[0],y[0],cin,cout[0],sum[0]);fadd fadd1 (x[1],y[1],cout[0],cout[1],sum[1]);fadd fadd2 (x[2],y[2],cout[1],cout[2],sum[2]);fadd fadd3 (x[3],y[3],cout[2],sum[4],sum[3]);
endmodulemodule fadd( input a, b, cin,output cout, sum );assign cout = a&b|a&cin|b&cin;assign sum = a^b^cin;
endmodule

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

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

相關文章

ARM Cortex-M3 技術解析:核寄存器R1-R15介紹及使用

ARM Cortex-M3 技術解析:核寄存器R1-R15介紹及使用 作為嵌入式開發領域的經典處理器內核,ARM Cortex-M3(CM3)憑借其高效能、低功耗和豐富特性,在工業控制、物聯網、消費電子等領域廣泛應用。而內核寄存器是我們調試代…

python unzip file

要在 Python 中解壓文件并顯示進度,我們需要在解壓過程中跟蹤文件的提取進度。由于 zipfile 模塊本身不直接支持進度顯示,我們可以通過手動計算并使用 tqdm 庫來顯示進度條。 安裝 tqdm 首先,確保你已經安裝了 tqdm 庫,用于顯示…

DeepSeek+Kimi生成高質量PPT

DeepSeek與Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用:生成結構化PPT大綱(擅長邏輯構建與內容優化)Kimi核心作用:將文本轉換為視覺化PPT(提供模板庫與排版引擎) 二、操作步驟詳解 1. 通…

一文掌握python中正則表達式的各種使用

文章目錄 1. 正則表達式基礎1.1 常用元字符1.2 基本用法 2. 正則表達式高級功能2.1 分組捕獲2.2 命名分組2.3 非貪婪匹配2.4 零寬斷言2.5 編譯正則表達式2.6 轉義字符 3. 常見應用場景3.1 驗證郵箱格式3.2 提取 URL3.3 提取日期3.4 提取HTML中的鏈接3.5 提取HTML中的圖片鏈接3.…

TCP,http,WebSocket

TCP(Transmission Control Protocol,傳輸控制協議)和HTTP(HyperText Transfer Protocol,超文本傳輸協議)都是網絡通信中的重要協議,但它們在網絡協議棧的不同層次上工作,各自負責不同…

Redis|持久化

文章目錄 總體介紹RDB(Redis DataBase)官網介紹案例演示優勢劣勢如何檢查修復 dump.rdb 文件哪些情況下會觸發 RDB 快照如何禁用快照RDB 優化配置項詳解小總結 AOF(Append Only File)官網介紹是什么能干嘛AOF 持久化工作流程AOF 緩…

Docker小游戲 | 使用Docker部署star-battle太空飛船射擊小游戲

Docker小游戲 | 使用Docker部署star-battle太空飛船射擊小游戲 前言項目介紹項目簡介項目預覽二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署star-battle網頁小游戲下載鏡像創建容器檢查容器狀態檢查服務端口安全設置四、訪問star-battle網頁小游戲五、總…

巨控科技的GRM550元出魔抗實現PLC遠程下載與維護方案:工業自動化的高效解決方案

巨控科技PLC遠程下載與維護方案:工業自動化的高效解決方案 在工業自動化領域,設備的高效維護與快速調試是保障生產連續性的關鍵。巨控科技推出的PLC遠程下載與維護方案,憑借其先進的技術和廣泛兼容性,成為企業實現設備遠程管理的…

ChatGLM2-6B如何從輸入到輸出-代碼解析(二)

出發點 上一篇解析了Chatglm2-6b的模型架構,并和Chatglm-6b進行對比,但是留下了幾個問題(哭)這一篇的目的是講明白attention和rotaryEmbedding,解決問題,并實現整體目標,完全替代modeling_chat…

Sublime Text4安裝、漢化

-------------2025-02-22可用---------------------- 官方網址下載:https://www.sublimetext.com 打開https://hexed.it 點擊打開文件找到軟件安裝目錄下的 ctrlf 查找 8079 0500 0f94 c2右邊啟用替換替換為:c641 0501 b200 90點擊替換按鈕 替換完成后 另存為本地…

汽車開放系統架構(AUTOSAR)中運行時環境(RTE)生成過程剖析

一、引言 在當今高度智能化的汽車電子領域,軟件系統的復雜性呈指數級增長。為了應對這一挑戰,汽車開放系統架構(AUTOSAR)應運而生,它為汽車電子軟件開發提供了標準化的分層架構和開發方法。其中,運行時環境…

基于MATLAB的OFDM通信系統仿真設計

下面將為你詳細介紹基于MATLAB的OFDM通信系統仿真設計的步驟和示例代碼。 1. OFDM系統原理概述 正交頻分復用(OFDM)是一種多載波調制技術,它將高速數據流通過串并轉換,分配到多個正交的子載波上進行傳輸,這樣可以有效…

stm32仿真 74hc238流水燈 數碼管動態數字顯示

f103c6t6a_hex文件 #include "main.h"![請添加圖片描述](https://i-blog.csdnimg.cn/direct/8c0d44b121134cf08f5186df316ea07f.gif)#include "stdlib.h"void SystemClock_Config(void); static void MX_GPIO_Init(void); // 自定義abc引腳 #define A_PIN…

結構型模式 - 代理模式 (Proxy Pattern)

結構型模式 - 代理模式 (Proxy Pattern) 代理模式是一種結構型設計模式,它允許通過代理對象來控制對另一個對象(目標對象)的訪問。代理對象充當目標對象的接口,客戶端通過代理對象間接訪問目標對象。 分為兩大類 靜態代理&#…

網絡層(IP)

基本概念 子網和局域網是一個概念主機: 配有 IP 地址, 也能進行路由控制的設備;路由器: 即配有 IP 地址, 又能進行路由控制;節點: 路由器和主機的統稱。 背景 兩主機并不是直接連接的,路徑選擇問題?為什么? 由網絡層&#xff08…

JMeter性能問題

性能測試中TPS上不去的幾種原因 性能測試中TPS上不去的幾種原因_tps一直上不去-CSDN博客 網絡帶寬 連接池 垃圾回收機制 壓測腳本 通信連接機制 數據庫配置 硬件資源 壓測機 業務邏輯 系統架構 CPU過高什么原因 性能問題分析-CPU偏高 - 西瓜汁拌面 - 博客園 US C…

創建型模式 - 建造者模式 (Builder Pattern)

創建型模式 - 建造者模式 (Builder Pattern) 建造者模式是一種創建型設計模式,它將一個復雜對象的構建與表示分離,使得同樣的構建過程可以創建不同的表示。 需求描述 在游戲開發中,創建一個復雜的游戲角色,角色具有多種屬性&…

代碼隨想錄第二十天|二叉樹part08--669.修建二叉搜索樹、108.將有序數組轉換為二叉搜索樹、538.把二叉搜索樹轉換為累加樹

刷題小記: 上期學習了二叉搜索樹的插入和刪除操作,這次學習如何按區間修剪二叉搜索樹。還有兩題,關于借助二叉搜索樹的有序特性進行轉換。 669.修剪二叉搜索樹(669.修剪二叉搜索樹) 題目分析: 給定一個…

Fisher信息矩陣(Fisher Information Matrix,簡稱FIM)

Fisher信息矩陣簡介 Fisher信息矩陣(Fisher Information Matrix,簡稱FIM)是統計學和信息理論中的一個重要概念,廣泛應用于參數估計、統計推斷和機器學習領域。它以統計學家羅納德費希爾(Ronald Fisher)的名…

【初階數據結構】鏈表的柔光之美

目錄 一、為什么需要鏈表? 二、鏈表與數組的對比 三、鏈表節點定義 四、鏈表基本操作 1. 創建鏈表 2. 插入節點 頭插法(時間復雜度O(1)) 尾插法(時間復雜度O(n)) 3. 刪除節點 4. 遍歷鏈表 五、進階操作 1. 反…