日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)

發布時間:2023/11/27 生活经验 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、驗證與門

二、驗證與非門

三、驗證二選一數據選擇器

四、驗證2-4譯碼器

五、驗證半加器

六、驗證全加器

0、初始化定義

1、第一個半加器?

2、第二個半加器

3、得到最終進位Co

代碼


0決定與,1決定或

一、驗證與門

?只要有一個按鍵按下,結果即為低電平,燈亮。

assign led1 = key1&key2;		//與門(只要有一個按鍵按下,則結果為低電平,燈亮)
//驗證與門、與非門
module my_and			//my_and:文件名稱
(			
//1、配置輸入輸出變量
input wire key1,		//輸入引腳key1
input wire key2,		//輸入引腳key2
output wire led1,		//輸出引腳led1
output wire led2		//輸出引腳led2
);//2、變量賦值
assign led1 = key1&key2;		//與門(只要有一個按鍵按下,則結果為低電平,燈亮)
//assign led2 = !(key1&key2);	//與非門(沒有按鍵按下,全為1,結果取反,為0,,燈亮)endmodule

二、驗證與非門

?兩個數相與,取反。

只有無按鍵按下的情況,兩個按鍵都為1,相與結果為1,再取反為0,最終的電平點亮燈。(有任何一個按鍵按下,燈都不會亮了)

assign led2 = !(key1&key2);	//與非門(沒有按鍵按下,全為1,結果取反,為0,,燈亮)
//驗證與門、與非門
module my_and			//my_and:文件名稱
(			
//1、配置輸入輸出變量
input wire key1,		//輸入引腳key1
input wire key2,		//輸入引腳key2
output wire led1,		//輸出引腳led1
output wire led2		//輸出引腳led2
);//2、變量賦值
//assign led1 = key1&key2;		//與門(只要有一個按鍵按下,則結果為低電平,燈亮)
assign led2 = !(key1&key2);	//與非門(沒有按鍵按下,全為1,結果取反,為0,,燈亮)endmodule

三、驗證二選一數據選擇器

?

sl是篩選端,a和b是兩個輸入端。?

//二選一數據選擇器
module my_and(led1, key1, key2, key3);input wire key1, key2, key3;	//輸入:a、b、s
output reg led1;					//輸出(y/out)always@(key1, key2, key3)
begin //使能按下if(!key3)led1 = key1;elseled1 = key2;
end
endmodule

四、驗證2-4譯碼器

??

2-4:通過1+2個按鍵和4個led燈來實現。

首先進行使能。(使能按鍵E)

兩個按鍵四種狀態:00、01、10、11

按鍵00:1(led1亮)
按鍵01:2(led2亮)
按鍵10:3(led3亮)
按鍵11:4(led4亮)

//2-4線譯碼器
module my_and(key, led, E);input wire[1:0] key;				//定義兩個key數組
input wire E;						//定義使能按鍵
output reg[3:0] led=4'b1111;	//定義四個led數組(賦初值1)(熄滅led)always@(key)//使能按鍵按下if(!E)begincase(key)2'b00: led = 4'b0111;	//按鍵00:1(led1亮)2'b01: led = 4'b1011;	//按鍵01:2(led2亮)2'b10: led = 4'b1101;	//按鍵10:3(led3亮)2'b11: led = 4'b1110;	//按鍵11:4(led4亮)default: led = 4'b1111;	//led全滅(出錯)endcaseendendmodule

五、驗證半加器

半加器:對兩個輸入數據位相加,輸出一個結果位和進位。

結果:S = A ^ B(S=A異或B)

進位:C = A & B(C=A與B)

定義2個按鍵輸入:A、B(分別代表兩個輸入A、B)?

定義2個LED輸出:S、C(分別代表本位結果S、進位C)

//驗證半加器
module my_and(A, B, S, C);input wire A, B;		//定義兩個輸入
output wire S, C;		//定義結果、進位輸出assign S = A^B;		//本位結果S=A異或B
//二進制只有0+1 或 1+0 才有結果1;否則1+1或者0+0,當前位都為0assign C = A&B;		//進位C=A與B
//二進制只有1+1 才會出現進位endmodule

六、驗證全加器

全加器:兩個半加器連接而成。?

?

標注了1級和2級半加器:?

?(紅色標記是容易連錯的地方)

?

A、B、CI為輸入,結果位S、進位CO為輸出

利用模塊實例化,分別實例化兩個半加器,最終組合為全加器

0、初始化定義

定義輸入輸出引腳變量。?

//全加器(兩個半加器連接)
module my_and(A, B, Ci, S, Co);//變量定義
input wire A, B, Ci;		//輸入1、輸入2、低端進位(輸入3)
output wire S, Co;		//結果輸出位、總進位

1、第一個半加器?

????????兩個按鍵key1、key2分別代表A、B,作為兩個輸入。?最終得到的結果位作為A2(第二個,即后面的那個半加器),得到進位作為C1

注:模塊實例化,輸入是傳入(賦值進去),輸出是傳出來(被賦值)。?

半加器half_adder只需把.v的文件放入文件夾即可(前面編寫過)。

//模塊實例化(此處采樣端口關聯)
//第一個半加器
half_adder half_adder1(.A(A), .B(B), .S(A2), 	  .C(C1));
//第一個半加器:				輸入1  輸入2  結果位(輸出)   進位(輸出)

2、第二個半加器

????????A2是第一個的S結果位?,作為第二個半加器的輸入1,低端進位Ci對應的是按鍵key3,作為第二個半加器的輸入2。分別得到最終的結果S、第二個半加器進位C2

//第二個半加器
half_adder half_adder2(.A(A2), .B(Ci),      .S(S), 		.C(C2));
//第二個半加器:				輸入1  輸入2(低端進位) 結果位(輸出)  進位(輸出)

3、得到最終進位Co

第二個半加器那里已經得到了最終的S結果位,所以現在只需要再處理最終的進位Co即可

把兩個半加器的進位C1和C2組合(或)一下,即可得到最終進位Co:

//總進位
assign Co = C1 | C2;

代碼

//全加器(兩個半加器連接)
module my_and(A, B, Ci, S, Co);//變量定義
input wire A, B, Ci;		//輸入1、輸入2、低端進位(輸入3)
output wire S, Co;		//結果輸出位、總進位//模塊實例化(此處采樣端口關聯)
//第一個半加器
half_adder half_adder1(.A(A), .B(B), .S(A2), 	  .C(C1));
//第一個半加器:				輸入1  輸入2  結果位(輸出)   進位(輸出)//第二個半加器
half_adder half_adder2(.A(A2), .B(Ci),      .S(S), 		.C(C2));
//第二個半加器:				輸入1  輸入2(低端進位) 結果位(輸出)  進位(輸出)//注:和輸入端口相關聯時,傳入值(賦值進去);
//		和輸出端口相關聯時,傳出值(賦值出來)。//總進位
assign Co = C1 | C2;endmodule

總結

以上是生活随笔為你收集整理的FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。