`timescale 1ns/1ns
module encoder_0(
input [8:0] I_n ,
output reg [3:0] Y_n
);
always @(*)begin
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
end
endmodule
module key_encoder(
input [9:0] S_n , //10位
output wire[3:0] L ,
output wire GS//区分是否有按键按下
);
wire [3:0]ll;
encoder_0 key_encoder(
. I_n (S_n[9:1]),
. Y_n (ll)
);
assign GS= ((ll==4'b1111) && S_n[0]==1) ? 0: 1;
assign L=~ll;
endmodule
//本质为9-4编码器扩展为10-4编码器
//我理解的例化就是连线调用,先输入 key_encoder然后使用encoder_0再输出key_encoder
//ll作为 key_encoder 模块里的线将 encoder_0 得出的结果取反
//