本篇文章使用Verilog语言编写实现带有优先级的83译码器,含有设计代码和测试代码。
一、输入输出和真值表
二、设计代码
(1)第一种写法
使用if else语句控制输出
`timescale 1ns / 1ps
module encoder_8_3(
input [7:0]in,
output reg [2:0]out
);
always @(*) begin
if (in[0]==1) begin
out = 3'b000;
end
else if(in[1]==1) begin
out = 3'b001;
end
else if(in[2]==1) begin
out = 3'b010;
end
else if(in[3]==1) begin
out = 3'b011;
end
else if(in[4]==1) begin
out = 3'b100;
end
else if(in[5]==1) begin
out = 3'b101;
end
else if(in[6]==1) begin
out = 3'b110;
end
else if(in[7]==1) begin
out = 3'b111;
end
end
endmodule
(2)第二种写法
使用 式子?结果一:结果二 语句控制输出
`timescale 1ns / 1ps
module encoder_8_3(
input [7:0]in,
output [2:0]out
);
assign out =
in[0]?3'd0:
in[1]?3'd1:
in[2]?3'd2:
in[3]?3'd3:
in[4]?3'd4:
in[5]?3'd5:
in[6]?3'd6:
3'd7;
endmodule
三、测试代码
(1)第一种写法
使用直接赋值语句
`timescale 1ns / 1ps
module encoder_8_3_tb();
reg [7:0]in0;
wire [2:0]out0;
encoder_8_3 encoder_8_30(.in(in0),.out(out0));
integer i=0;
initial begin
for(i=0;i<=7;i=i+1)begin
# 10
if(i!=0) begin
in0[i-1]=0;
end
in0[i]=1;
end
# 30
$finish;
end
endmodule
(2)第二种写法
使用左移方式
`timescale 1ns / 1ps
module encoder_8_3_tb();
reg [7:0]in;
wire [2:0]out;
encoder_8_3 encoder_8_30(.in(in),.out(out));
integer i=0;
initial begin
in=1;
#10
for(i=0;i<=6;i=i+1)
in=in<<1;
#10;
#20
$finish;
end
endmodule
四、仿真波形图
由波形图可得,在输入信号in0为1时,输出信号为out为0、在输入信号in1为1时(此时in0为0),输出信号out1为1,以此类推。即该83编码器可将输入的八位二进制信号转换为其对应的三位二进制结果输出。文章来源:https://www.toymoban.com/news/detail-504246.html
仅供学习交流,如发现错误,欢迎大家指正。文章来源地址https://www.toymoban.com/news/detail-504246.html
到了这里,关于Vivado 带有优先级的8_3编码器(含测试代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!