四选一数据选择器verlog代码及测试代码
时间: 2024-09-21 18:12:09 浏览: 398
在Verilog语言中,四选一数据选择器(4-to-1 MUX,有时也称为Demultiplexer)是一个常见的数字逻辑部件,它接受四个输入信号并基于一个控制信号选择其中的一个作为输出。以下是一个简单的四选一数据选择器的Verilog代码示例:
```verilog
module four_to_one_mux (
input wire sel, // 控制信号
input wire [3:0] data_in, // 四个输入数据
output reg data_out // 输出数据
);
assign data_out = (sel == 4'b0) ? data_in[0] :
(sel == 4'b1) ? data_in[1] :
(sel == 4'b2) ? data_in[2] :
data_in[3]; // 最后一个选项默认
endmodule
```
在这个例子中,`sel` 是一个4位的选择信号,当 `sel=0` 时,选择 `data_in[0]`;`sel=1` 时选择 `data_in[1]`,依此类推。
为了测试这个模块,你可以编写一个测试bench文件,例如:
```verilog
module test_four_to_one_mux;
reg [3:0] data_in = {4'b0, 4'b1, 4'b2, 4'b3}; // 输入数据
wire sel = {4'b0, 4'b1, 4'b2, 4'b3}; // 测试控制信号
four_to_one_mux mux(data_in, sel, data_out);
initial begin
$monitor("sel = %b, data_in = %b, data_out = %b", sel, data_in, data_out);
// 测试案例:sel依次取值,验证每个时刻的数据输出
for (int i = 0; i < 16; i=i+4) begin
sel = i;
#10; // 等待10纳秒让系统稳定
assert(data_out == data_in[i / 4], "Data selection error at sel=%b", sel);
$display("Test case %d: sel=%b, expected_output=%b, got_output=%b", i, sel, data_in[i / 4], data_out);
end
// 添加其他边界情况和错误输入的测试
end
endmodule
```
阅读全文