|
楼主 |
发表于 2013-1-25 14:43:06
|
显示全部楼层
优先编码器
【例9.7】8-3优先编码器
module encoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);
output none_on;
output[2:0] outcode;
input a,b,c,d,e,f,g,h;
reg[3:0] outtemp;
assign {none_on,outcode}=outtemp;
always @(a or b or c or d or e or f or g or h)
begin
if(h) outtemp=4'b0111;
else if(g) outtemp=4'b0110;
else if(f) outtemp=4'b0101;
else if(e) outtemp=4'b0100;
else if(d) outtemp=4'b0011;
else if(c) outtemp=4'b0010;
else if(b) outtemp=4'b0001;
else if(a) outtemp=4'b0000;
else outtemp=4'b1000;
end
endmodule
【例9.8】用函数定义的8-3优先编码器
module code_83(din, dout);
input[7:0] din;
output[2:0] dout;
function[2:0] code; //函数定义
input[7:0] din; //函数只有输入端口,输出为函数名本身
if (din[7]) code = 3'd7;
else if (din[6]) code = 3'd6;
else if (din[5]) code = 3'd5;
else if (din[4]) code = 3'd4;
else if (din[3]) code = 3'd3;
else if (din[2]) code = 3'd2;
else if (din[1]) code = 3'd1;
else code = 3'd0;
endfunction
assign dout = code(din); //函数调用
endmodule
带有输入输出使能和输出有效标志的编码器
module yxbm_83(y,eo,gs,i,ei);
input [7:0] i; //8位输入i
input ei; //使能输入端ei
output eo,gs; //使能输出端eo,优先标志端gs
output[2:0] y; //3位输出y
reg[2:0] y; //3位输出寄存器y
reg eo,gs; //使能输出寄存器,
always@(i,ei) //电平触发方式,当i跟ei有改变的时候,执行以下操作
begin
if(ei==1'b1) //当ei为1的时候
begin
y<=3'b111;
gs<=1'b1;
eo<=1'b1;
end
else
begin
if(i[7]==1'b0) //当i的第8为0时候
begin
y<=3'b000;
gs<=1'b0;
eo<=1'b1;
end
else if(i[6]==1'b0) //当i的第七位为0时候
begin
y<=3'b001;
gs<=1'b0;
eo<=1'b1;
end
else if(i[5]==1'b0) //当i的第6位为0时候
begin
y<=3'b010;
gs<=1'b0;
eo<=1'b1;
end
else if(i[4]==1'b0) //当i的第5位为0时候
begin
y<=3'b011;
gs<=1'b0;
eo<=1'b1;
end
else if(i[3]==1'b0) //当i的第4位为0时候
begin
y<=3'b100;
gs<=1'b0;
eo<=1'b1;
end
else if(i[2]==1'b0) //当i的第3位为0时候
begin
y<=3'b101;
gs<=1'b0;
eo<=1'b1;
end
else if(i[1]==1'b0) //当i的第2位为0时候
begin
y<=3'b110;
gs<=1'b0;
eo<=1'b1;
end
else if(i[0]==1'b0)//当i的第1位为0时候
begin
y<=3'b111;
gs<=1'b0;
eo<=1'b1;
end
else if(i==8'b11111111)//当i为8'b11111111时候
begin
y<=3'b111;
gs<=1'b1;
eo<=1'b0;
end
end
end
endmodule |
|