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译码器、半加器、全加器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FPGA(2)基础语法 -- 按键控制l
- 下一篇: FPGA(4)晶振与计数器 -- 实现定