请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3227|回复: 2
收起左侧

组合逻辑电路(1)-----编码器

[复制链接]

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
发表于 2013-1-25 14:36:16 | 显示全部楼层 |阅读模式
       对于一个逻辑电路,其输出状态在任何时刻只取决于同一时刻的输入状态,而与电路原来的状
态无关,这种电路被定义为组合逻辑电路。

        普通编码器:不能解决两个及其以上的输入有效时的编码处理
       1.jpg

module mb_83(x,y);
input[7:0] x;               

output[2:0] y;           

reg[2:0] 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
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42670
QQ
 楼主| 发表于 2013-1-25 14:43:06 | 显示全部楼层
优先编码器
2.jpg

【例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
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

0

主题

2

帖子

18

积分

新手上路

积分
18
发表于 2017-3-9 10:17:03 | 显示全部楼层
[s:151]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-2-19 13:04 , Processed in 0.193821 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表