采用Verilog HDL语言设计程序,实现一个四选一数据选择器,给出设计代码和测试代码,要求使用条件语句描述
时间: 2024-05-10 16:16:41 浏览: 128
以下是四选一数据选择器的Verilog HDL代码:
```
module data_selector(
input [3:0] data_in,
input [1:0] sel,
output reg out
);
always @ (*) begin
case (sel)
2'b00: out = data_in[0];
2'b01: out = data_in[1];
2'b10: out = data_in[2];
2'b11: out = data_in[3];
default: out = 1'b0;
endcase
end
endmodule
```
在上面的代码中,我们使用了一个 always @ (*) 块,这意味着当输入信号发生变化时,我们会重新计算输出信号。我们使用了一个 case 语句来选择要输出的数据,根据 sel 的值,我们选择从 data_in 输入端口的哪个位置获取数据。如果 sel 不在 0 到 3 的范围内,我们将输出 0。最后,我们使用了一个 output reg 来定义输出信号。
以下是测试代码:
```
module data_selector_test;
reg [3:0] data_in;
reg [1:0] sel;
wire out;
data_selector dut (
.data_in(data_in),
.sel(sel),
.out(out)
);
initial begin
// Test case 1
data_in = 4'b0001;
sel = 2'b00;
#10;
if (out !== 1'b0) $error("Test case 1 failed");
// Test case 2
data_in = 4'b0001;
sel = 2'b01;
#10;
if (out !== 1'b1) $error("Test case 2 failed");
// Test case 3
data_in = 4'b0001;
sel = 2'b10;
#10;
if (out !== 1'b0) $error("Test case 3 failed");
// Test case 4
data_in = 4'b0001;
sel = 2'b11;
#10;
if (out !== 1'b0) $error("Test case 4 failed");
$display("All test cases passed");
end
endmodule
```
在上面的测试代码中,我们定义了输入信号 data_in 和 sel,以及输出信号 out。我们使用了一个 data_selector 模块实例来测试我们的数据选择器。我们使用了 initial 块来生成测试数据,并在每个测试用例之间使用 #10 延迟来等待输出信号稳定。最后,我们使用 $display 语句来确认所有测试用例是否都通过。
阅读全文