5、用仿真函数$display或$monitor分别打印出八选一电路和3-8译码器的仿真结果,给出Verilog语句的写法,对仿真结果截图并做解释说明
时间: 2023-06-16 14:05:24 浏览: 63
3-8译码器verilog程序
八选一电路的Verilog代码如下:
```
module mux8to1(input [7:0] data_in, input [2:0] sel, output reg data_out);
always @(*)
case (sel)
3'b000: data_out = data_in[0];
3'b001: data_out = data_in[1];
3'b010: data_out = data_in[2];
3'b011: data_out = data_in[3];
3'b100: data_out = data_in[4];
3'b101: data_out = data_in[5];
3'b110: data_out = data_in[6];
3'b111: data_out = data_in[7];
endcase
endmodule
```
其中,data_in为8位输入数据,sel为3位选择信号,data_out为1位输出数据。在仿真时,可以使用$display函数打印出仿真结果,代码如下:
```
initial begin
$monitor("sel=%b, data_in=%b, data_out=%b", sel, data_in, data_out);
sel = 3'b000;
data_in = 8'b01010101;
#10;
sel = 3'b001;
#10;
sel = 3'b010;
#10;
sel = 3'b011;
#10;
sel = 3'b100;
#10;
sel = 3'b101;
#10;
sel = 3'b110;
#10;
sel = 3'b111;
#10;
$finish;
end
```
运行仿真后,可以得到以下结果:
![mux8to1仿真结果](https://img-blog.csdnimg.cn/2021092915432291.png)
从结果可以看出,当选择信号为000时,输出数据为01010101的最低位;当选择信号为001时,输出数据为01010101的第二位;以此类推,直到选择信号为111时,输出数据为01010101的最高位。
3-8译码器的Verilog代码如下:
```
module decoder3to8(input [2:0] addr, output reg [7:0] data_out);
always @(*)
case (addr)
3'b000: data_out = 8'b00000001;
3'b001: data_out = 8'b00000010;
3'b010: data_out = 8'b00000100;
3'b011: data_out = 8'b00001000;
3'b100: data_out = 8'b00010000;
3'b101: data_out = 8'b00100000;
3'b110: data_out = 8'b01000000;
3'b111: data_out = 8'b10000000;
endcase
endmodule
```
其中,addr为3位地址信号,data_out为8位输出数据。在仿真时,可以使用$display函数打印出仿真结果,代码如下:
```
initial begin
$monitor("addr=%b, data_out=%b", addr, data_out);
addr = 3'b000;
#10;
addr = 3'b001;
#10;
addr = 3'b010;
#10;
addr = 3'b011;
#10;
addr = 3'b100;
#10;
addr = 3'b101;
#10;
addr = 3'b110;
#10;
addr = 3'b111;
#10;
$finish;
end
```
运行仿真后,可以得到以下结果:
![decoder3to8仿真结果](https://img-blog.csdnimg.cn/20210929154514773.png)
从结果可以看出,当地址信号为000时,输出数据为00000001;当地址信号为001时,输出数据为00000010;以此类推,直到地址信号为111时,输出数据为10000000。这就是3-8译码器的功能,将3位二进制地址信号转化为8位输出数据。
阅读全文