首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

4输入多路选择器的多种表示方式

4输入多路选择器的多种表示方式

module test(a,b,c,d,s0,s1,y);
    input a,b,c,d;
   input s0,s1;
    output y;
    reg y;
   always@*
    begin
    case({s1,s0})
       2'b00:y<=a;
     2'b01:y<=b;
     2'b10:y<=c;
     2'b11:y<=d;
     endcase
    end
endmodule   



//////////////////////////////////////////////////////////////
module test(a,b,c,d,s0,s1,y);
      input a,b,c,d,s0,s1;
   output y;
   wire [1:0] sel;
   wire at,bt,ct,dt;
   assign sel={s1,s0};
   assign at=(sel==2'b00);
   assign bt=(sel==2'b01);
   assign ct=(sel==2'b10);
   assign dt=(sel==2'b11);
  
    assigny=(a&at)|(b&bt)|(c&ct)|(d&dt);
  
  endmodule



/////////////////////////////////////////////////////  
module test(a,b,c,d,s0,s1,y);
     input a,b,c,d,s0,s1;
    outputy;
    wire at=s0?a:b;
  wire bt=s0?c:d;
  wire y=s1?at:bt;
endmodule



////////////////////////////////////////////////////////////
module test(a,b,c,d,s0,s1,y);
    inputa,b,c,d,s0,s1;
  output y;
  reg [1:0] sel;
  reg y;
  always@*
    begin
     sel={s1,s0};
    if (sel==0)y=a;
    else if(sel==1) y=b;
    elseif(sel==2) y=c;
    elsey=d;
  end
endmodule


//////////////////////////////////////////////////////////////////
实际上上述程序中的阻塞赋值与非阻塞赋值是可以互换的,且功能不变,电路不变。但是,在一般情况下,事情并非如此,即在不少情况下,不同的赋值方式将导致不同的电路结构和逻辑功能。尚在摸索之中。还有就是在同一个过程块中不能对同一变量进行不同方式的赋值,也不要在多个always过程块中对同一变量赋值,因为always块也是并行的。
继承事业,薪火相传
支持帮顶,路过支持一下
返回列表