組合邏輯電路的輸出信號只與當前時刻的輸入信號有關,與其他時刻的輸入狀態無關,無存儲電路或反饋電路。多路選擇器是在多路數據傳送過程中,根據需要選擇一條電路。如果還沒看懂功能,結合真值表就好理解了。
A1A0是選擇線,D0-D3是數據線,A1A0構成00-11共4種選擇,對應著D的下標,被選中的數據線作為輸出。8選1,16選1同理。在本例中,選擇最簡單的2選1電路。
設計規劃
這個示例中,采用兩個按鍵作為信號輸入,一個按鍵作為信號選擇,LED作為數據輸出。需要實現的功能是,當按下按鍵sel時(sel=0),LED燈狀態取決于按鍵in2,當不按下sel時(sel=1),LED燈狀態取決于按鍵in1。h繪制波形圖如圖所示。
編寫代碼
module mux2_1(
input wire in1,
input wire in2,
input wire sel,
output wire out);
assign out=(sel==1'b1)?in1:in2;
endmodule
這里的組合邏輯電路可以采用always中if-else實現方法,always中case實現方法,assign中條件運算符(三元運算符)實現方法。涉及到always的語句還沒進行總結,這里采用最簡單的assign語句,用到了很熟悉的三元運算符。編寫好.v文件后編譯通過。
點擊RTL viewer可以查看設計的硬件電路結構,和我們設計所表達的意思相同。
編寫testbench
`timescale 1ns/1ns
module tb_mux2_1();
//在testbench中待測試RTL模塊的輸入永遠是reg型變量
reg in1;
reg in2;
reg sel;
//在testbench中待測試RTL模塊的輸出永遠是wire型變量
wire out;
initial
begin
in1 <=1'b0;
in2 <=1'b0;
sel <=1'b0;
end
//每隔10ns產生輸入隨機數0或1
always #10 in1 <= {$random} % 2;
always #10 in2 <= {$random} % 2;
always #10 sel <= {$random} % 2;
//------------------------mux2_1_inst------------------------
mux2_1 mux2_1_inst
(
.in1(in1), //input in1
.in2(in2), //input in2
.sel(sel), //inputsel
.out(out) //output out
);
endmodule
和上一節中結構類似,tb_mux2_1模塊中,首先定義初始的輸入信號in_1,in_2,sel為低電平(一般時序電路使用非阻塞賦值<=),延遲10個時間單位(ns)產生隨機數0或1賦值給輸入,就完成了輸入信號的波形設計。根據實例化的講解,第2-6行和第22-28行完成的功能是將上一個mux2_1.v文件中mux2_1模塊與tb_mux2_1模塊相連。這樣隨機生成的輸入信號就被加到mux2_1模塊上,并得到輸出mux2_1_out,通過驗證mux2_1_out與我們期望的輸出是否一致,就知道我們的設計是否正確。
對比波形
波形顯示當sel為高電平時,out與in1一致,sel為低電平時,out與in2一致。
分配管腳
全編譯后上板驗證
按下S2(sel=0)時,按下S1(in2=0)LED就亮(out=in2=0),只按下S0(in1=0)LED就亮(out=in1=0)。
-
led燈
+關注
關注
22文章
1592瀏覽量
107849 -
RTL
+關注
關注
1文章
385瀏覽量
59710 -
組合邏輯電路
+關注
關注
6文章
70瀏覽量
14628 -
多路選擇器
+關注
關注
1文章
22瀏覽量
6517
發布評論請先 登錄
相關推薦
評論