Verilog基础之六、编码器实现

    目录

一、前言

二、编码设计

2.1 设计代码

2.2 仿真结果


一、前言

    编码是将其他信号,如图像,文字等用其他形式表示,通常针对计算机时指用二进制表示,对人通常是用十进制表示,像用十进制数表示温度,身高等,都可看作编码的过程。在电路中,编码是将数量为2的N次方的信号转换为N位2进制输出。

    根据编码信号中是否允许逻辑为1的个数大于1分为普通编码器和优先编码器,普通编码器上每个要编码的信号只有1位为1,优先编码器可对编码的信号存在多位为逻辑1的进行编码。

以4-2线编码器为例,普通编码器和优先编码器真值表如下图。优先编码器中0/1可为0或1,从真值表看出,普通编码器为优先编码器的一种特殊场景。

Verilog基础之六、编码器实现_第1张图片

Verilog基础之六、编码器实现_第2张图片

二、编码设计

2.1 设计代码

设计中采用for循环和case语句两种方式来实现8-3编码器

module Encoder( in,out,out_case );
input [7:0] in;
output reg [2:0] out,out_case;
integer i;
always@(*)
begin
out=0;
for(i=0;i<8;i=i+1)
    if(in[i]==1'b1)
    out=i;
end
always@(in)
case(in)
    8'b10000000 :out_case<=3'b111;
    8'b01000000 :out_case<=3'b110;
    8'b00100000 :out_case<=3'b101;
    8'b00010000 :out_case<=3'b100;
    8'b00001000 :out_case<=3'b011;
    8'b00000100 :out_case<=3'b010;
    8'b00000010 :out_case<=3'b001;
    8'b00000001 :out_case<=3'b000;
    default: out_case<=3'bxxx;
endcase  
endmodule

测试代码

module Encoder_tb(   );
reg [7:0] in;
wire [2:0] out,out_case;
initial 
begin
in=8'b0000_0000;
#4 in=8'b0000_0010;
#4 in=8'b0000_0100;
#4 in=8'b0000_1000;
#4 in=8'b0001_0000;
#4 in=8'b0010_0000;
#4 in=8'b0100_0100;
#4 in=8'b1000_0000;
end
Encoder encoder_test(.in(in),.out(out),.out_case(out_case));
endmodule

2.2 仿真结果

通过仿真结果可知,for循环和case语句实现的两种编码器结果都一致

Verilog基础之六、编码器实现_第3张图片

你可能感兴趣的:(Vivado,Verilog学习笔记,FPGA所知所见所解,Verilog,编码器,modelsim)