Verilog 实现优先编码器的两种方式

1、优先编码器

1.1 定义:

 为了防止多条线信号同时有效,规定只对序号最高的有效信号线进行编码,相当于该线的优先级别最高,称为优先编码器

2、实现方式

     优先编码器可以通过  if else 语句和case语句两种方式实现。

3、示例

输入描述:

①输入描述:

input      [8:0]         I_n

输出描述:

①输出描述:

output reg [3:0]         Y_n

3.1if else 语句

`timescale 1ns/1ns

module encoder_0(
   input      [8:0]         I_n   ,
   
   output reg [3:0]         Y_n   
);
    always @(I_n)  
            if (I_n==9'b111111111)
                Y_n<=4'b1111;
            else if (!I_n[8])
                Y_n<=4'b0110;
            else if (!I_n[7])
                Y_n<=4'b0111;
            else if (!I_n[6])
                Y_n<=4'b1000;
            else if (!I_n[5])
                Y_n<=4'b1001;
            else if (!I_n[4])
                Y_n<=4'b1010;
            else if (!I_n[3])
                Y_n<=4'b1011;
            else if (!I_n[2])
                Y_n<=4'b1100;
            else if (!I_n[1])
                Y_n<=4'b1101;
            else
                Y_n<=4'b1110;

endmodule

3.2case语句

  • case endcase 
  • 当数据中存在X要采用casex
  • case进行全等匹配,casez忽略?z对应的位进行匹配,casex忽略x?z对应的位进行匹配。
  • default要加上避免出现锁存器。
`timescale 1ns/1ns

module encoder_0(
   input      [8:0]         I_n   ,
   
   output reg [3:0]         Y_n   
);
    always @(I_n)  
    
        casex(I_n)
         9'b111111111: Y_n<=4'b1111;
         9'b0xxxxxxxx: Y_n<=4'b0110;
         9'b10xxxxxxx: Y_n<=4'b0111;
         9'b110xxxxxx: Y_n<=4'b1000;
         9'b1110xxxxx: Y_n<=4'b1001;
         9'b11110xxxx: Y_n<=4'b1010;
         9'b111110xxx: Y_n<=4'b1011;
         9'b1111110xx: Y_n<=4'b1100;
         9'b11111110x: Y_n<=4'b1101;
         9'b111111110: Y_n<=4'b1110;
         default : Y_n<=4'b1111;
        endcase
    

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值