描述
下表是某优先编码器的真值表。
①请用System Verilog实现此优先编码器
输入描述:
①输入描述:
input logic [8:0] I_n
输出描述:
①输出描述:
output logic [3:0] Y_n
解答:
分析:
只需要采用case语句将每种情况进行描述,根据输入选择不同的输出。
不过由于在判断时只判断部分位,所以要区分case、casex、casez的区别。
case:进行全等匹配,只有全部相等才进行下一步。
casex:高阻值与不定值都忽略,不关心。
casez:不处理高阻值的位,视为正常z状态。
故,代码如下:
`timescale 1ns/1ns
module encoder_0(
input logic [8:0] I_n ,
output logic [3:0] Y_n
);
always@(*) begin
casex(I_n)
9'b1111_1111_1: Y_n = 4'b1111;
9'b0xxx_xxxx_x: Y_n = 4'b0110;
9'b10xx_xxxx_x: Y_n = 4'b0111;
9'b110x_xxxx_x: Y_n = 4'b1000;
9'b1110_xxxx_x: Y_n = 4'b1001;
9'b1111_0xxx_x: Y_n = 4'b1010;
9'b1111_10xx_x: Y_n = 4'b1011;
9'b1111_110x_x: Y_n = 4'b1100;
9'b1111_1110_x: Y_n = 4'b1101;
9'b1111_1111_0: Y_n = 4'b1110;
default: Y_n = 4'b0000;
endcase
end
endmodule