前言:最近開始學習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?取值及對應燈的狀態:
水位狀態 | A | B | C | G | Y | R |
---|---|---|---|---|---|---|
正常(A、B?間) | 0 | 1 | 1 | 1 | 0 | 0 |
異常(B、C?間) | 1 | 0 | 1 | 0 | 1 | 0 |
異常(A?以上) | 0 | 0 | 0 | 0 | 1 | 0 |
危險(C?以下) | 1 | 1 | 1 | 0 | 0 | 1 |
其他無效狀態(無需關注) | (略) | (略) | (略) | 0 | 0 | 0 |
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博客