vivado设计用 三个2 选 1 数据选择器通过模块化建模的方式实现 4 选 1 数据选择器,写出源文件和激励文件
时间: 2024-02-15 20:05:22 浏览: 107
以下是基于 Verilog HDL 的 4 选 1 数据选择器的模块化设计代码示例,使用了三个 2 选 1 数据选择器来实现:
```
module mux21(input [1:0] data_in1, input [1:0] data_in2, input [1:0] data_in3, input [1:0] sel, output reg out);
wire [1:0] mux1_out, mux2_out, mux3_out;
mux21 mux1 (
.data_in(data_in1),
.sel(sel[0]),
.out(mux1_out)
);
mux21 mux2 (
.data_in(data_in2),
.sel(sel[0]),
.out(mux2_out)
);
mux21 mux3 (
.data_in(data_in3),
.sel(sel[1]),
.out(mux3_out)
);
assign out = (sel[1]) ? mux3_out : ((sel[0]) ? mux2_out : mux1_out);
endmodule
```
以上代码将输入数据分为三组,分别连接三个 2 选 1 数据选择器,最后使用 assign 语句实现 4 选 1 的数据选择逻辑。
接下来是一个简单的激励文件示例,用于测试 mux41 模块:
```
module mux41_tb;
reg [1:0] data_in1, data_in2, data_in3;
reg [1:0] sel;
wire out;
mux41 uut (
.data_in1(data_in1),
.data_in2(data_in2),
.data_in3(data_in3),
.sel(sel),
.out(out)
);
initial begin
$monitor("sel=%b data_in1=%b data_in2=%b data_in3=%b out=%b", sel, data_in1, data_in2, data_in3, out);
sel = 2'b00;
data_in1 = 2'b00;
data_in2 = 2'b01;
data_in3 = 2'b10;
#10;
sel = 2'b01;
data_in1 = 2'b11;
data_in2 = 2'b01;
data_in3 = 2'b10;
#10;
sel = 2'b10;
data_in1 = 2'b11;
data_in2 = 2'b00;
data_in3 = 2'b10;
#10;
sel = 2'b11;
data_in1 = 2'b11;
data_in2 = 2'b01;
data_in3 = 2'b00;
#10;
end
endmodule
```
以上代码使用了 $monitor 语句跟踪模块的输出,并在 initial 块中模拟了所有的输入情况。
阅读全文