以低电平输出为例: 第一种:case语句 `timescale 10ns/1ns module decode3_8(data_out,data_in,enable) ; input [2:0] data_in; input enable; output [7:0] data_out; reg [7:0] data_out; always @(data_in orenable) begin if (enable==1) case (data_in ) 3'b000: data_out=8'b11111110; 3'b001: data_out=8'b11111101; 3'b010: data_out=8'b11111011; 3'b011: data_out=8'b11110111; 3'b100: data_out=8'b11101111; 3'b101: data_out=8'b11011111; 3'b110: data_out=8'b10111111; 3'b111: data_out=8'b01111111; default: data_out=8'bxxxxxxxx; endcase else data_out=8'b11111111; end endmodule 第二种:if-else if语句 `timescale 10ns/1ns module decode3_8(data_out,data_in,enable) ; input [2:0] data_in; input enable; output [7:0] data_out; reg [7:0] data_out; always @(data_in orenable) begin if (enable==1) if(data_in==3'b000) data_out=8'b11111110; else if(data_in==3'b001) data_out=8'b11111101; else if(data_in==3'b010) data_out=8'b11111011; else if(data_in==3'b011) data_out=8'b11110111; else if(data_in==3'b100) data_out=8'b11101111; else if(data_in==3'b101) data_out=8'b11011111; else if(data_in==3'b110) data_out=8'b10111111; else if(data_in==3'b111) data_out=8'b01111111; else data_out=8'bxxxxxxxx; else data_out = 8'b11111111; end endmodule 第三种:算法实现,但是不可综合 `timescale 10ns/1ns module decode3_8(data_out,data_in,enable) ; input [2:0] data_in; input enable; output [7:0] data_out; reg A=8’b0000_0001; assigndata_out=(enable)?(~(A<<data_in-1)):8'b1111_1111; endmodule |