题解 | #优先编码器电路①#
优先编码器电路①
https://www.nowcoder.com/practice/0594ed5303ad48a19aed90bc48839d00
`timescale 1ns/1ns module encoder_0( input [8:0] I_n , output reg [3:0] Y_n ); //9线-4线优先编码器 注意真值表的位置 /* always @(*) begin if(I_n[8]==0) begin Y_n <= 4'b0110; end else if(I_n[7]==0) begin Y_n <= 4'b0111; end else if(I_n[6]==0) begin Y_n <= 4'b1000; end else if(I_n[5]==0) begin Y_n <= 4'b1001; end else if(I_n[4]==0) begin Y_n <= 4'b1010; end else if(I_n[3]==0) begin Y_n <= 4'b1011; end else if(I_n[2]==0) begin Y_n <= 4'b1100; end else if(I_n[1]==0) begin Y_n <= 4'b1101; end else if(I_n[0]==0) begin Y_n <= 4'b1110; end else begin Y_n <= 4'b1111; end end */ //case、casez和casex三者都可以综合。case进行全等匹配;casez忽略?或z对应的位进行匹配;casex忽略x、?或z对应的位进行匹配 //一般经常使用到的是casez语句,最好少用casex //case/casez/casex都是可综合的 //case的描述,匹配都是从上到下进行的 always @(*) begin casez(I_n) 9'b11111111 : Y_n = 4'b1111; 9'b0???????? : Y_n = 4'b0110; 9'b10??????? : Y_n = 4'b0111; 9'b110?????? : Y_n = 4'b1000; 9'b1110????? : Y_n = 4'b1001; 9'b11110???? : Y_n = 4'b1010; 9'b111110??? : Y_n = 4'b1011; 9'b1111110?? : Y_n = 4'b1100; 9'b11111110? : Y_n = 4'b1101; 9'b111111110 : Y_n = 4'b1110; default : Y_n = 4'b1111; endcase end endmodule