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