三八译码器实例

功能分析

三八译码器,输入为3个二进制数,3‘b000 – 3’b111,翻译为十进制数0,2,4,8,。。。。128

建立工程,参考上一实例

设计代码

module decoder38(
data,
out
);
input [2:0] data;
output reg [7:0] out;
always@(data)
case(data)
3’d0:out = 8’d0;
3’d1:out = 8’d2;
3’d2:out = 8’d4;
3’d3:out = 8’d8;
3’d4:out = 8’d16;
3’d5:out = 8’d32;
3’d6:out = 8’d64;
3’d7:out = 8’d128;
default:out = 8’d0;

endcase
endmodule

仿真代码

`timescale 1ns/1ns
module decoder38_tb;
reg [2:0] in;
wire [7:0] out;
decoder38 inst0(
.data(in),
.out(out)
);

initial begin
in=3’d0;
#10;in=3’d0;
#10;in=3’d1;
#10;in=3’d2;
#10;in=3’d3;
#10;in=3’d4;
#10;in=3’d5;
#10;in=3’d6;
#10;in=3’d7;
#10;in=3’d0;
#10;in=3’d1;
#10;in=3’d2;
#10;
end

endmodule

波形分析

按激励分析

遇到的问题

第一次仿真输入data为高阻态,输出out为不定态。排错:在设置激励文件,激励平台的名字要与tb文件名称相同
decoer38_tb
若选择第一个名称,出现无波形现象,选择相同名称后,出现波形。

按激励出现负数,在进制设置中选择无符号数

Verilog中的三八译码器可以使用以下代码进行实现: ```verilog module decoder38(input [2:0] A, output reg [7:0] Y); always @(*) begin case(A) 3'b000 : Y = 8'b00000001; 3'b001 : Y = 8'b00000010; 3'b010 : Y = 8'b00000100; 3'b011 : Y = 8'b00001000; 3'b100 : Y = 8'b00010000; 3'b101 : Y = 8'b00100000; 3'b110 : Y = 8'b01000000; 3'b111 : Y = 8'b10000000; endcase end endmodule ``` 以上代码中,模块`decoder38`包含一个三位输入端口`A`和一个八位输出端口`Y`。使用`case`语句实现了三八译码器的功能,将输入的三位二进制数转化为对应的八位输出。 以下是一个简单的测试激励代码,用于测试三八译码器: ```verilog module test_decoder38(); reg [2:0] A; wire [7:0] Y; decoder38 dut(A, Y); initial begin $monitor("A = %b, Y = %b", A, Y); #10 A = 3'b000; #10 A = 3'b001; #10 A = 3'b010; #10 A = 3'b011; #10 A = 3'b100; #10 A = 3'b101; #10 A = 3'b110; #10 A = 3'b111; #10 $stop; end endmodule ``` 以上代码中,模块`test_decoder38`包含一个三位输入端口`A`、一个八位输出端口`Y`和一个三八译码器实例`dut`。使用`initial`块进行测试激励,对`A`的八种输入情况分别进行测试,并在每次输入时输出当前的输入和输出。最后使用`$stop`停止仿真。 在仿真中运行`test_decoder38`模块,可以得到以下结果: ``` A = xxx, Y = xxxxxxxx A = 000, Y = 00000001 A = 001, Y = 00000010 A = 010, Y = 00000100 A = 011, Y = 00001000 A = 100, Y = 00010000 A = 101, Y = 00100000 A = 110, Y = 01000000 A = 111, Y = 10000000 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值