1. 項目介紹
多路選擇器,也叫數據選擇器或多路開關,在多路數據傳送過程中,能夠根據需要將其中任意一路選出來的電路。數據選擇器用於控制有效數據的輸出,能夠通過地址選擇線來選定相應的通道作為輸出,提高了數據的傳輸效率。(數據分配器用於數據的傳輸途徑,在信號傳輸過程中能夠通過地址選擇線選擇傳輸信道)。
2. 設計要求
設計一個2選1多路選擇器,輸入有兩個單bit信號,和一個單bit的選擇信號。當選擇信號為低電平時,將第一路信號輸出,當選擇信號為高電平時,將第二路信號輸出。
3. 設計原理
該設計命名為mux2_1,第一路信號命名為dataa,第二路信號命名為datab,選擇信號命名為sel,輸出信號命名為odata,系統框圖如下圖所示。
根據設計要求,得真值表:
dataa | datab | sel | odata |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
根據真值表,得到邏輯表達式:
轉化為Verilog表達式為
Odata = datab&sel | dataa&(~sel);
4. 設計實現
1 module mux2_1( 2 3 input wire dataa, 4 input wire datab, 5 input wire sel, 6 7 output wire odata 8 ); 9 10 assign odata = (datab & sel) | (dataa & (~sel)); 11 12 endmodule
5. 仿真驗證
1 `timescale 1ns/1ps 2 3 module mux2_1_tb(); 4 5 reg dataa; 6 reg datab; 7 reg sel; 8 9 wire odata; 10 11 mux2_1 mux2_1_inst( 12 .dataa (dataa), 13 .datab (datab), 14 .sel (sel), 15 .odata (odata) 16 ); 17 18 initial begin 19 dataa = 1'b0; datab = 1'b0; sel = 1'b0; #20; 20 dataa = 1'b0; datab = 1'b0; sel = 1'b1; #20; 21 dataa = 1'b0; datab = 1'b1; sel = 1'b0; #20; 22 dataa = 1'b0; datab = 1'b1; sel = 1'b1; #20; 23 dataa = 1'b1; datab = 1'b0; sel = 1'b0; #20; 24 dataa = 1'b1; datab = 1'b0; sel = 1'b1; #20; 25 dataa = 1'b1; datab = 1'b1; sel = 1'b0; #20; 26 dataa = 1'b1; datab = 1'b1; sel = 1'b1; #20; 27 end 28 29 endmodule
參考資料: