module four_to_one_selector(input [3:0] data_in, input [1:0] sel, output reg data_out); wire w1, w2; // first 2-to-1 data selector // sel[0] controls which input is selected assign w1 = (sel[0] == 0) ? data_in[0] : data_in[1]; // second 2-to-1 data selector // sel[1] controls which input is selected assign w2 = (sel[1] == 0) ? data_in[2] : data_in[3]; // final output // sel[1] controls which input from the second selector is selected always @ (sel or data_in) case (sel) 2'b00: data_out = data_in[0]; 2'b01: data_out = data_in[1]; 2'b10: data_out = w1; 2'b11: data_out = w2; endcaseendmodule激励文件
时间: 2024-01-17 22:04:38 浏览: 66
下面是一个简单的 Verilog 激励文件的例子,用于测试上面给出的四选一选择器模块:
```
`timescale 1ns / 1ps
module tb_four_to_one_selector();
// Inputs
reg [3:0] data_in;
reg [1:0] sel;
// Outputs
wire data_out;
// Instantiate the design under test (DUT)
four_to_one_selector uut(
.data_in(data_in),
.sel(sel),
.data_out(data_out)
);
initial begin
// Initialize inputs
data_in = 4'b0000;
sel = 2'b00;
// Apply test vectors
#10 data_in = 4'b0001; sel = 2'b00;
#10 data_in = 4'b0010; sel = 2'b01;
#10 data_in = 4'b0100; sel = 2'b10;
#10 data_in = 4'b1000; sel = 2'b11;
#10 data_in = 4'b0101; sel = 2'b10;
#10 data_in = 4'b1111; sel = 2'b11;
// End simulation
#10 $finish;
end
endmodule
```
在这个例子中,我们首先定义了一个 `tb_four_to_one_selector` 模块,这个模块包含了一个四选一选择器的实例 `uut`,以及输入和输出信号。在 `initial` 块中,我们首先对输入信号进行了初始化,然后通过一系列的 `#delay` 命令来模拟测试向量。在这个例子中,我们模拟了六个测试向量,分别对应了四个输入信号和两个控制信号的所有可能组合。最后,我们使用 `$finish` 命令来结束仿真。
需要注意的是,上面的例子中使用了 `` `timescale`` 命令来指定时间单位和时间精度。这是 Verilog 中一个非常重要的命令,需要根据具体的仿真环境来进行设置。同时,由于 `data_out` 是一个寄存器类型的输出信号,因此我们需要在定义时使用 `output reg` 来进行声明。
阅读全文