组合逻辑电路(1)-----编码器
对于一个逻辑电路,其输出状态在任何时刻只取决于同一时刻的输入状态,而与电路原来的状态无关,这种电路被定义为组合逻辑电路。
普通编码器:不能解决两个及其以上的输入有效时的编码处理
module mb_83(x,y);
input x;
output y;
reg y;
always@(x) //电平触发,若x改变则执行以下操作
begin
case(x)
8'b00000001:y=3'b000; //当x=8’b00000001,则y输出为3’b000
8'b00000010:y=3'b001; //当x=8’b00000010,则y输出为3’b001
8'b00000100:y=3'b010; //当x=8’b00000100,则y输出为3’b010
8'b00001000:y=3'b011; //当x=8’b00001000,则y输出为3’b011
8'b00010000:y=3'b100; //当x=8’b00010000,则y输出为3’b100
8'b00100000:y=3'b101; //当x=8’b00100000,则y输出为3’b101
8'b01000000:y=3'b110; //当x=8’b01000000,则y输出为3’b110
8'b10000000:y=3'b111; //当x=8’b10000000,则y输出为3’b111
default: y=3'b000; //其他情况下,则y输出为3’b000
endcase
end
endmodule 优先编码器
【例9.7】8-3优先编码器
module encoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);
output none_on;
output outcode;
input a,b,c,d,e,f,g,h;
reg 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 din;
output dout;
function code; //函数定义
input din; //函数只有输入端口,输出为函数名本身
if (din) code = 3'd7;
else if (din) code = 3'd6;
else if (din) code = 3'd5;
else if (din) code = 3'd4;
else if (din) code = 3'd3;
else if (din) code = 3'd2;
else if (din) code = 3'd1;
else code = 3'd0;
endfunction
assigndout = code(din); //函数调用
endmodule
带有输入输出使能和输出有效标志的编码器
module yxbm_83(y,eo,gs,i,ei);
input i; //8位输入i
input ei; //使能输入端ei
output eo,gs; //使能输出端eo,优先标志端gs
output y; //3位输出y
reg 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==1'b0) //当i的第8为0时候
begin
y<=3'b000;
gs<=1'b0;
eo<=1'b1;
end
else if(i==1'b0) //当i的第七位为0时候
begin
y<=3'b001;
gs<=1'b0;
eo<=1'b1;
end
else if(i==1'b0) //当i的第6位为0时候
begin
y<=3'b010;
gs<=1'b0;
eo<=1'b1;
end
else if(i==1'b0) //当i的第5位为0时候
begin
y<=3'b011;
gs<=1'b0;
eo<=1'b1;
end
else if(i==1'b0) //当i的第4位为0时候
begin
y<=3'b100;
gs<=1'b0;
eo<=1'b1;
end
else if(i==1'b0) //当i的第3位为0时候
begin
y<=3'b101;
gs<=1'b0;
eo<=1'b1;
end
else if(i==1'b0) //当i的第2位为0时候
begin
y<=3'b110;
gs<=1'b0;
eo<=1'b1;
end
else if(i==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
页:
[1]