1 //三态门完成总线选择功能 2 module tri_state_gate(input request0,request1,request2,request3,input[7:0] unit0_out,unit1_out,unit2_out,unit3_out, 3 output[7:0]unit0_in,unit1_in,unit2_in,unit3_in); 4 reg[7:0]bus; 5 reg[3:0] en; 6 always@(request0,request1,request2,request3) 7 begin 8 casex({request0,request1,request2,request3}) 9 4'b0001:en=4'b0001; //注意,这里区别于MUX结构对于三态门而言,每个门电路都有自己的使能端10 4'b001x:en=4'b0010;11 4'b01xx:en=4'b0100;12 4'b1xxx:en=4'b1000;13 default:14 en=4'b0000;15 endcase16 end17 //写总线18 always@(en,unit0_out,unit1_out,unit2_out,unit3_out)19 begin 20 case(en)21 4'b0001:bus=unit0_out;22 4'b0010:bus=unit1_out;23 4'b0100:bus=unit2_out;24 4'b1000:bus=unit3_out;25 default:26 bus=8'hzz; //总线空闲的时候,处于断开的状态,属于高阻态,这个特性很重要!27 endcase28 end 29 assign unit0_in=bus;30 assign unit1_in=bus;31 assign unit2_in=bus;32 assign unit3_in=bus;33 endmodule