Verilog HDL 之 8-3优先编码器
原理:
在数字系统中,常常会有几个部件同时发出服务请求的可能,而在同一时刻只能给其中一个部件发出允许操作信号。因此,必须根据轻重缓急,规定好这些控制对象允许操作的先后次序,即优先级别。
编码器有8个输入端,3个输出端。还有一个输入使能EI,输出使能EO和优先编码器工作状态标志GS。编码器以低为有效。当EI=0 时,编码器工作;输出全为高。输入优先级别的次序为7,6,5,…,0。当某一输入端有低电平输入,且比它优先级高的输入没有低电平输入时,输出端才输出相应输入端的代码。
二、实现
在设计文件中输入Verilog代码。
1 `timescale 1 ns / 1 ps 2 3 module yxbm8_3 ( A ,I ,GS ,EO ,EI ); 4 5 input [7:0] I ; 6 wire [7:0] I ; 7 input EI ; 8 wire EI ; 9 10 output [2:0] A ; 11 reg [2:0] A ; 12 output GS ; 13 reg GS ; 14 output EO ; 15 reg EO ; 16 17 always @ ( I or EI ) 18 if ( EI ) 19 begin 20 A <= 3'b111; 21 GS <= 1; 22 EO <= 1; 23 end 24 else if ( I[7] == 0 ) 25 begin 26 A <= 3'b000; 27 GS <= 0; 28 EO <= 1; 29 end 30 else if ( I[6] == 0 ) 31 begin 32 A <= 3'b001; 33 GS <= 0; 34 EO <= 1; 35 end 36 else if ( I[5] == 0 ) 37 begin 38 A <= 3'b010; 39 GS <= 0; 40 EO <= 1; 41 end 42 else if ( I[4] == 0 ) 43 begin 44 A <= 3'b011; 45 GS <= 0; 46 EO <= 1; 47 end 48 else if ( I[3] == 0 ) 49 begin 50 A <= 3'b100; 51 GS <= 0; 52 EO <= 1; 53 end 54 else if ( I[2] == 0 ) 55 begin 56 A <= 3'b101; 57 GS <= 0; 58 EO <= 1; 59 end 60 else if ( I[1] == 0 ) 61 begin 62 A <= 3'b110; 63 GS <= 0; 64 EO <= 1; 65 end 66 else if ( I[0] == 0 ) 67 begin 68 A <= 3'b111; 69 GS <= 0; 70 EO <= 1; 71 end 72 else if ( I == 8'b11111111) 73 begin 74 A <= 3'b111; 75 GS <= 1; 76 EO <= 0; 77 end 78 endmodule