在verilog中,想用实例化的方法,怎么用3个2选1数据选择器实现4选1数据选择器?
可以采用以下实例化方法实现4选1数据选择器:
module four_to_one_selector(input [3:0] data_in,
input [1:0] sel,
output reg out);
wire w1, w2, w3, w4, w5, w6;
two_to_one_selector s1(.data_in({data_in[1],data_in[0]}), .sel(sel[0]), .out(w1));
two_to_one_selector s2(.data_in({data_in[3],data_in[2]}), .sel(sel[0]), .out(w2));
two_to_one_selector s3(.data_in({w2, w1}), .sel(sel[1]), .out(w3));
two_to_one_selector s4(.data_in({data_in[5], data_in[4]}), .sel(sel[0]), .out(w4));
two_to_one_selector s5(.data_in({data_in[7], data_in[6]}), .sel(sel[0]), .out(w5));
two_to_one_selector s6(.data_in({w5, w4}), .sel(sel[1]), .out(w6));
two_to_one_selector s7(.data_in({w3, w6}), .sel(sel[2]), .out(out));
endmodule
module two_to_one_selector(input [1:0] data_in,
input sel,
output reg out);
always@(sel)
begin
if(sel == 1'b0)
out <= data_in[0];
else
out <= data_in[1];
end
endmodule
以上代码中,我们首先实例化了三个2选1数据选择器,分别将数据输入按照不同的选择信号 sel[0] 进行选择。然后,我们将这三个选择器的输出再次进行2选1选择,最终得到4选1的输出结果。
需要注意的是,我们在实例化选择器模块时,使用了花括号对数据输入进行了组合,并使用逗号隔开。这是因为 verilog 中无法直接传递多位的数据作为参数,需要使用花括号组合成向量再传递。