eric2013 发表于 2013-1-25 14:36:16

组合逻辑电路(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

eric2013 发表于 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 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

jorry 发表于 2017-3-9 10:17:03

页: [1]
查看完整版本: 组合逻辑电路(1)-----编码器