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