`timescale 1ns/1ns
module encoder_83(
input [7:0] I ,
input EI ,
output wire [2:0] Y ,
output wire GS ,
output wire EO
);
reg [2:0]Y_reg;
reg GS_reg;
reg EO_reg; /*output可以为wire或reg,但是题目已经定义了EO为wire,而在
下面的操作中可能会用到reg,所以再定义一个reg,来方便操作*/
always@(*)begin
if(!EI)begin
Y_reg=0;
GS_reg=0;
EO_reg=0;
end
else begin
casex(I)
8'b0000_0000:begin
Y_reg=0;
GS_reg=0;
EO_reg=1;
end
8'b1xxx_xxxx:begin
Y_reg=3'b111;
GS_reg=1'b1;
EO_reg=1'b0;
end
8'b01xx_xxxx:begin
Y_reg=3'b110;
GS_reg=1'b1;
EO_reg=1'b0;
end
8'b001x_xxxx:begin
Y_reg=3'b101;
GS_reg=1'b1;
EO_reg=1'b0;
end
8'b0001_xxxx:begin
Y_reg=3'b100;
GS_reg=1'b1;
EO_reg=1'b0;
end
8'b0000_1xxx:begin
Y_reg=3'b011;
GS_reg=1'b1;
EO_reg=1'b0;
end
8'b0000_01xx:begin
Y_reg=3'b010;
GS_reg=1'b1;
EO_reg=1'b0;
end
8'b0000_001x:begin
Y_reg=3'b001;
GS_reg=1'b1;
EO_reg=1'b0;
end
8'b0000_0001:begin
Y_reg=3'b000;
GS_reg=1'b1;
EO_reg=1'b0;
end
endcase
end
end
assign Y=Y_reg;
assign GS=GS_reg;
assign EO=EO_reg;
endmodule
还是用casex方便

京公网安备 11010502036488号