【FPGA學習】FPGA入門學習即數字邏輯復習

前言:最近開始學習FPGA了,希望通過博客記錄下每一次學習的過程,與大家共勉。

目錄

一、組合邏輯電路的設計(工程學習引入)

二、3-8譯碼器設計、下載和功能演示(在的8段數碼管顯示)

2.1 Logsim設計的3-8譯碼器電路

2.2Verilog編程實現的3-8譯碼器 RTL電路

?編輯

?編輯

2.3完成3-8譯碼器的設計、下載和功能演示(利用板上的8段數碼管)

?編輯

三、用Verilog設計實現一個4位全加器。

3.1一位全加器設計

3.2四位全加器設計

3.3Verilog 語言實現加法器


一、組合邏輯電路的設計(工程學習引入)

1.1組合邏輯電路設計

題目 :

題目分析:我們要設計一個電熱水器水位狀態顯示電路,利用三個水位檢測元件?A、B、C?的電平信號(水面低于元件輸出高電平,高于則輸出低電平 ),通過與非門邏輯,實現不同水位狀態對應指示燈亮滅:水面在?A、B?間(正常)綠燈?G?亮;水面在?B、C?間或?A?以上(異常)黃燈?Y?亮;水面在?C?以下(危險)紅燈?R?亮 。

結合題意,梳理不同水位場景下?A、B、C?取值及對應燈的狀態:

水位狀態ABCGYR
正常(A、B?間)011100
異常(B、C?間)101010
異常(A?以上)000010
危險(C?以下)111001
其他無效狀態(無需關注)(略)(略)(略)000

5繪制邏輯電路圖

  • 綠燈?G?支路

    • 先用一個與非門,輸入接?A(同時接兩個輸入腳,實現?A=A?A?)得到?A?;
    • 再將?A、B、C?輸入第二個與非門(需三輸入與非門,或用兩個兩輸入與非門級聯:先把?A?和?B?輸入與非門,輸出再和?C?輸入下一個與非門 ),得到?ABC?;
    • 最后用第三個與非門,輸入接第二個與非門輸出,輸出即為?G=ABC?。
  • 黃燈?Y?支路
    一個兩輸入與非門,一個輸入接?B?,另一個輸入接高電平(如電源?VCC??串電阻 ),輸出?Y=B?。

  • 紅燈?R?支路
    兩個兩輸入與非門級聯:第一個與非門輸入?A、B、C(同樣可拆分,先?A?和?B?輸入,輸出再和?C?輸入 ),輸出?ABC?;第二個與非門輸入接該輸出,輸出?R=ABC?。

將各水位狀態的?A、B、C?取值代入電路:

  • 正常狀態(A=0,B=1,C=1?):G?支路經與非門運算輸出?1(綠燈亮 ),Y?因?B=1?輸出?0(黃燈滅 ),R?因?A?或?B?為?0?輸出?0(紅燈滅 ),符合要求。
  • 異常狀態(如?A=1,B=0,C=1?或?A=0,B=0,C=0?):Y?因?B=0?輸出?1(黃燈亮 ),G?輸出?0(綠燈滅 ),R?輸出?0(紅燈滅 ),符合要求。
  • 危險狀態(A=1,B=1,C=1?):R?支路輸出?1(紅燈亮 ),G、Y?輸出?0(綠燈、黃燈滅 ),符合要求。

通過?定義邏輯變量 → 列真值表 → 寫邏輯表達式 → 轉換與非門形式 → 畫電路圖 → 驗證?,完成了電熱水器水位顯示電路的與非門設計 。

二、3-8譯碼器設計、下載和功能演示(在的8段數碼管顯示)

2.1 Logsim設計的3-8譯碼器電路

(一)3-8譯碼器簡介介紹:
3-8譯碼器是一種數字電路元件,用于將3位二進制輸入信號轉換為8位輸出信號。這種譯碼器的主要功能是根據輸入信號的組合,將其中一個輸出線激活。每個可能的輸入組合對應一個唯一的輸出線,這使得3-8譯碼器在數字系統中的許多應用中都非常有用。

1.輸入: 3-8譯碼器有3個輸入線,每一條線都可以是邏輯0或邏輯1。
2.輸出: 有8個輸出線,每個輸出線對應于一個可能的3位輸入組合。

3. 功能:3-8譯碼器的主要功能是根據輸入的二進制組合激活相應的輸出線。只有一個輸出線處于邏輯高電平狀態,其余輸出線處于邏輯低電平狀態。

4.應用:3-8譯碼器在數字系統中有許多應用,其中一種主要的用途是將特定的輸入模式映射到相應的輸出。它常用于地址譯碼、顯示驅動和其他需要多個輸出狀態的場合。

2.2Verilog編程實現的3-8譯碼器 RTL電路

1.verilog代碼如下:

module test(data_out, data_in ) ;
input [2:0] data_in;
output [7:0] data_out;
reg [7:0] data_out;always @(data_in)begincase (data_in )3'b000: data_out=8'b11111110;3'b001: data_out=8'b11111101;3'b010: data_out=8'b11111011;3'b011: data_out=8'b11110111;3'b100: data_out=8'b11101111;3'b101: data_out=8'b11011111;3'b110: data_out=8'b10111111;3'b111: data_out=8'b01111111;default: data_out=8'bxxxxxxxx;endcaseend
endmodule

2.仿真得到RTE電路圖

3.編寫一個仿真測試文件,對3-8譯碼器進行仿真測試,輸出測試波形圖和Transcript結果

思考回答:

1)Verilog 綜合生成的3-8譯碼器電路原理圖與原始設計電路存在什么差異? 仿真測試生成的結果是否與真值表一致?

答:輸入端與輸出端,其余基本無差異。Verilog綜合生成的電路圖中,內部的基本門電路被封裝成高層次的模塊,用戶只需與模塊的輸入和輸出進行交互。

仿真測試結果與真值表一致

2.3完成3-8譯碼器的設計、下載和功能演示(利用板上的8段數碼管)

配置引腳

DE2-115 引腳列表:【整理】DE2-115引腳列表 word版-CSDN博客

使用3個SW作為輸入信號,七段數碼管作為輸出顯示

?verilogo代碼:

module decoder_3to8
(input wire A , //輸入信號1input wire B , //輸入信號2input wire C , //輸入信號3output reg [0:7] out //輸出信號 out);
?always@(*)case({A, B, C})3'b000 : out = 8'b0000_0011; 3'b001 : out = 8'b1001_1111;3'b010 : out = 8'b0010_0101;3'b011 : out = 8'b0000_1101; 3'b100 : out = 8'b1001_1001;3'b101 : out = 8'b0100_1001;3'b110 : out = 8'b0100_0001;3'b111 : out = 8'b0001_1111;endcaseendmodule


?

三、用Verilog設計實現一個4位全加器。

3.1一位全加器設計

全加器簡介

全加器英語名稱為full-adder,是用門電路實現兩個二進制數相加并求出和的組合線路,稱為一位全加器。一位全加器可以處理低位進位,并輸出本位加法進位。多個一位全加器進行級聯可以得到多位全加器。常用二進制四位全加器74LS283。

1.一位全加器logsim電路圖:

2.verilog語言代碼:

module test(A,B,cin,sum,cout);input A,B,cin;output sum,cout;wire t1,t2,t3,t4;and U1(t1,A,B);and U2(t2,A,cin);and U3(t3,B,cin);or U4(cout,t1,t2,t3);xor U5(t4,A,B);xor U6(sum,t4,cin);
endmodule

RTL電路圖:

全加器實現流程:

1.創建項目:

設置一下仿真配置(后面會用到)

新建文件:

這里我們是主要使用圖中圈出的這兩種文件類型:
BlockDiagram/SchematicFile:這種文件類型就是我們平時繪制原理圖需要使用的文件,后綴是.bdf和.bsf
VerilogHDLFile:這種文件類型就是我們需要寫verilog代碼的文件類型,后綴是.v

結束文件創建。來畫原理圖:

與之前的邏輯門電路設計類似,此處略寫。

3.2四位全加器設計


最終設計封裝后 的到加法器:

3.3Verilog 語言實現加法器

半加器:

module halfadder(input wire a,input wire b,output wire cout,output wire sum
);
assign cout = a&b;
assign sum = a^b;
endmodule

全加器:

module adder(input wire a,input wire b,input wire cin,output wire cout,output wire sum
);
assign cout = (a&b)|(a&cin)|(b&cin);
assign sum = a^b^cin;
endmodule

四位全加器:

module FullAdd (cout,sum,ina,inb,cin);input  [3:0] ina,inb;input cin;output [3:0] sum;output cout;assign {cout,sum} = ina + inb + cin;
endmodule

編譯燒錄在板子上:

把文件設置為頂層文件,保持名稱一致,才能編譯

編譯成功。
硬件配置:接線

1.用包裝盒里的USB 電纜將PC的USB端口和DE2-115開發板的USB Blaster連接器連接 起來,為了實現主機和開發板之間的通訊,必須安裝USB Blaster 驅動軟件

鼠標右擊“USB-Blaster”選擇“更新驅動程序(P)”

2.在將12V的適配器連接到DE2-115主板前,按下紅色的ON/OFF開關確保電源斷開。

3.按下DE2-115主板上紅色的電源開關OFF /ON重新上電,將DE2-115開發板的撥碼開關SW19由PROG撥到RUN,就可以燒寫程序了

引腳配置:

實現效果圖:

加法器

結論:
新手剛剛起步,得到鍛煉比較多,需要一步一部踏實練習。多練習,熟悉整個文件創建、運行、編譯等環節,提高自己的動手能力。如文章有不妥之處,還望各位海涵,
?

參考文獻:
Quartus 入門 —— 加法器 - ppqppl - 博客園

FPGA——1位全加器的實現_fpga全加器代碼-CSDN博客

[FPGA基礎學習]加法器、三八譯碼器及DE2-115基本使用方法和數碼管顯示_de2-115數碼管位選引腳-CSDN博客

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

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

相關文章

ffmpeg python rgba圖片合成 4444格式mov視頻,保留透明通道

def convert_pngs_to_mov(input_pattern, output_path, frame_rate30):"""將BGRA四通道PNG序列轉換為ProRes 4444編碼的MOV視頻(保留透明通道)參數:input_pattern: PNG序列路徑模式(如:"/path/to/frames/fram…

Java 實現 PDF 轉圖片功能:實戰教程 + 場景解析

作者:云起川南|專注 Java 實戰與自動化集成 在 PDF 文檔處理的各類業務場景中,“將 PDF 頁面轉為圖片”是一個高頻、剛需的功能,廣泛應用于 預覽展示、文件歸檔、圖片加密水印、OCR 文本識別 等系統中。 本文將帶你一步一步實戰如何使用 Java 實現 PDF 轉圖片 功能,使用開…

面試題-有個對象key全部是string,值全部是number要定義他,不使用interface和type如何定義

在 TypeScript 里,若要定義一個鍵為string類型、值為number類型的對象,并且不使用interface和type,可以采用以下幾種方式: 1. 內聯類型注解(Inline Type Annotation) 直接在變量聲明時使用索引簽名進行類…

領域驅動設計(DDD)【3】之事件風暴

文章目錄 說明一 事件風暴理論知識1.1 事件風暴的核心目標1.2事件風暴的關鍵步驟1.2.1 準備工作1.2.2 核心流程1.2.3 事件風暴的輸出 1.3 事件風暴的優勢1.4 常見問題Q1:事件風暴適合所有項目嗎?Q2:事件風暴后如何落地?Q3&#xf…

Vue3中監聽 Ref 類型的數字數組

在 Vue 3 中&#xff0c;監聽一個 Ref 類型的數字數組&#xff08;如 ref<number[]>([])&#xff09;時&#xff0c;根據需求的不同&#xff0c;有幾種監聽方式&#xff1a; 1. 監聽整個數組的引用變化 當整個數組被重新賦值時觸發&#xff1a; typescript 復制 下載…

PoolThreadCache 類的結構和源碼實現

PoolThreadCache 在 Netty 的內存池中扮演著線程本地緩存的角色。它的主要目的是減少線程在分配內存時對全局 PoolArena 的競爭&#xff0c;通過緩存一部分最近釋放的內存塊&#xff0c;使得同一線程后續申請相同規格的內存時能夠快速獲取&#xff0c;從而提高分配效率。 下面…

Linux中的阻塞信號與信號原理

在Linux操作系統中&#xff0c;信號&#xff08;Signal&#xff09;是進程間通信和進程控制的核心機制之一。信號是一種異步通知機制&#xff0c;可以向進程發送異步事件通知&#xff0c;以便進程能夠處理系統級別的事件。本文將詳細探討Linux中的信號原理&#xff0c;重點講解…

QT學習教程(三十五)

事件處理&#xff08;- Event Processingn&#xff09; 事件是視窗系統或者Qt 本身在各種不同的情況下產生的。當用戶點擊或者釋放鼠標&#xff0c;鍵盤時&#xff0c;一個鼠標事件或者鍵盤事件就產生了。當窗口第一次顯示時&#xff0c;一個繪制事件會產生告訴新可見的窗口繪…

【Dify 案例】【MCP實戰】【三】【超級美食家】

接上次的超級助理,我們這一期給出一個超級美食家 首先:我的MCP要申請一個key ` 我們來看看這個MCP服務怎么使用呢。`https://modelscope.cn/mcp/servers/@worryzyy/howtocook-mcp插件里面需要配置 {"mcpServers":{"amap-amap-sse":{"url":&qu…

4.文件管理(文本、日志、Excel表)

目錄 1.文本 2.日志 3.Excel表 1.文本 using System.Text;namespace (自己創建的一個類) {/// <summary>/// 配置文件*.ini讀寫器。/// </summary>public class IniFile{[System.Runtime.InteropServices.DllImport("kernel32")]private static ex…

Java 包裝類詳解

什么是包裝類 Java包裝類&#xff08;Wrapper Classes&#xff09;是將8種基本數據類型封裝成對象的類&#xff0c;位于java.lang包中。每個基本數據類型都有對應的包裝類&#xff1a; byte → Byteshort → Shortint → Integerlong → Longfloat → Floatdouble → Doublec…

阿里云ACP認證-數據倉庫

數據倉庫 Kappa架構&#xff1a;將實時和離線代碼統一&#xff08;優化lambda架構&#xff09;&#xff0c;但是不好修正數據&#xff0c;開發周期長&#xff0c;成本浪費&#xff0c;對于歷史數據的高吞吐量力不從心 原一代數據倉庫&#xff1a; 離線&#xff1a;hivemaxcom…

WebRTC(五):TURN協議

TURN&#xff08;Traversal Using Relays around NAT&#xff09;協議是一個網絡協議&#xff0c;旨在解決 NAT&#xff08;網絡地址轉換&#xff09;和防火墻 環境下的 UDP/TCP通信問題。它通常與 STUN 和 ICE 協議一起使用&#xff0c;廣泛應用于 WebRTC、SIP 和視頻會議等實…

Python 的內置函數 hasattr

Python 內建函數列表 > Python 的內置函數 hasattr Python 的內置函數 hasattr() 用于檢查一個對象是否具有指定的屬性或方法。該函數的語法為&#xff1a; hasattr(object, name)參數說明&#xff1a; object&#xff1a;要檢查的對象&#xff0c;可以是任何 Python 對象…

docker使用技巧之把擴展卷命名變成有意義

背景 之前使用別人的鏡像之后&#xff0c;啟動docker后發出現了一堆看不懂名稱的擴展卷 eg&#xff1a;集群查看 擴展卷查看 這個時候如果有很多集群需要清理擴展卷就很麻煩&#xff0c;不知道是哪個集群的 操作步驟 可以實現的分析&#xff1a;這個擴展卷的信息應該是和…

《博物通書》《博物新編》與滿清歷史篡改

《博物新編》作為近代西方科技輸入中國的首部著作&#xff0c;其問世猶如一顆投入平靜湖面的巨石&#xff0c;在 19 世紀中期的中國激起層層漣漪&#xff0c;對中國近代科學發展產生了多維度、深層次的影響。它不僅是知識傳播的載體&#xff0c;更是推動中國科學從傳統走向近代…

【入門】【例18.1】 睡眠

| 時間限制&#xff1a;C/C 1000MS&#xff0c;其他語言 2000MS 內存限制&#xff1a;C/C 64MB&#xff0c;其他語言 128MB 難度&#xff1a;中等 分數&#xff1a;100 OI排行榜得分&#xff1a;12(0.1分數2難度) 出題人&#xff1a;root | 描述 一個人只有每天睡眠時間到達 8…

DAY 38 Dataset和Dataloader類

知識點回顧&#xff1a; Dataset類的__getitem__和__len__方法&#xff08;本質是python的特殊方法&#xff09;Dataloader類minist手寫數據集的了解 作業&#xff1a;了解下cifar數據集&#xff0c;嘗試獲取其中一張圖片 import torch import torch.nn as nn import torch.o…

【Kubernetes】以LOL的視角打開K8s

前言 對于大部分后端程序員乃至于非后端程序員來說&#xff0c;在當前的云原生時代&#xff0c;Kubernetes&#xff08;后稱K8s&#xff09;都是繞不開的一項技術&#xff1b;同時&#xff0c;對于這個時代的程序員來說&#xff0c;“英雄聯盟”&#xff08;后稱LOL&#xff0…

UE5 游戲模板 —— FirstShootGame

UE5 游戲模板 —— FirstShootGame 前言一、GameMode二、組件1.ShooterPickUpComponent單播多播 2.ShooterWeaponComponent附著武器開火 3.小結4.ShooterProjectile初始化碰撞受擊檢測 三、Character初始化輸入移動 總結 前言 有了前兩個俯視角游戲的基礎讓我們來看看相對復雜…