vivado设计用 2 选 1 数据选择器通过模块化建模的方式实现 4 选 1 数据选择器,写出源文件和激励文件
时间: 2024-02-15 19:05:10 浏览: 142
以下是一个基于 Verilog 的 4 选 1 数据选择器的源文件和激励文件,其中使用了模块化建模的方式实现了 2 选 1 数据选择器。
源文件(4_to_1_mux.v):
```verilog
module mux_2_to_1(input a, b, sel, output reg out);
always @ (a, b, sel)
begin
if (sel == 1'b0) out = a;
else out = b;
end
endmodule
module mux_4_to_1(input [3:0] data_in, input [1:0] sel, output reg out);
reg [1:0] sel_inv;
wire [1:0] mux1_out;
assign sel_inv = ~sel;
mux_2_to_1 m1(.a(data_in[0]), .b(data_in[1]), .sel(sel_inv[0]), .out(mux1_out[0]));
mux_2_to_1 m2(.a(data_in[2]), .b(data_in[3]), .sel(sel_inv[0]), .out(mux1_out[1]));
mux_2_to_1 m3(.a(mux1_out[0]), .b(mux1_out[1]), .sel(sel_inv[1]), .out(out));
endmodule
```
激励文件(testbench.v):
```verilog
module testbench;
reg [3:0] data_in;
reg [1:0] sel;
wire out;
mux_4_to_1 mux(.data_in(data_in), .sel(sel), .out(out));
initial begin
data_in = 4'b0000;
sel = 2'b00;
#10;
data_in = 4'b0001;
sel = 2'b00;
#10;
data_in = 4'b0010;
sel = 2'b00;
#10;
data_in = 4'b0100;
sel = 2'b00;
#10;
data_in = 4'b1000;
sel = 2'b00;
#10;
data_in = 4'b0000;
sel = 2'b01;
#10;
data_in = 4'b0001;
sel = 2'b01;
#10;
data_in = 4'b0010;
sel = 2'b01;
#10;
data_in = 4'b0100;
sel = 2'b01;
#10;
data_in = 4'b1000;
sel = 2'b01;
#10;
data_in = 4'b0000;
sel = 2'b10;
#10;
data_in = 4'b0001;
sel = 2'b10;
#10;
data_in = 4'b0010;
sel = 2'b10;
#10;
data_in = 4'b0100;
sel = 2'b10;
#10;
data_in = 4'b1000;
sel = 2'b10;
#10;
data_in = 4'b1111;
sel = 2'b11;
#10;
data_in = 4'b1010;
sel = 2'b11;
#10;
data_in = 4'b0110;
sel = 2'b11;
#10;
data_in = 4'b0001;
sel = 2'b11;
#10;
data_in = 4'b1100;
sel = 2'b11;
#10;
$finish;
end
always @(data_in, sel) begin
$display("data_in=%b, sel=%b, out=%b", data_in, sel, out);
end
endmodule
```
这个 4 选 1 数据选择器由三个 2 选 1 数据选择器组成,其中第一个和第二个 2 选 1 数据选择器的输出连接到第三个 2 选 1 数据选择器的输入,从而实现了 4 选 1 数据选择器的功能。在激励文件中,我们对所有可能的输入进行了测试,并在仿真结果中打印了输入、选择信号和输出。
阅读全文