• decoder3_8


    这两天回归书本,继续阅读书上的内容,此时的体会与刚开始学那会的体会是不一样的,比如3_8decoder,之前就认为可以用case来写,而书上有一种更简便的方式来描述,带给你新的思路,既然有新方式可以描述,那就来比较这两者有什么区别。

    方法1,利用case语句描述:

     1 module decoder3_8(in,out);
     2 input [2:0] in;
     3 output [7:0] out;
     4 
     5 reg [7:0] out;
     6 always @(*)
     7 begin
     8     case(in)
     9     3'b000: out = 8'b0000_0001;
    10     3'b001: out = 8'b0000_0010;
    11     3'b010: out = 8'b0000_0100;
    12     3'b011: out = 8'b0000_1000;
    13     3'b100: out = 8'b0001_0000;
    14     3'b101: out = 8'b0010_0000;
    15     3'b110: out = 8'b0100_0000;
    16     3'b111: out = 8'b1000_0000;
    17     default:out = 8'b0000_0000;
    18     endcase
    19 end
    20 
    21 endmodule

    方法2,利用移位方式描述:

    1 module decoder3_8(in,out);
    2 input [2:0] in;
    3 output [7:0] out;
    4 
    5 assign out = 1'b1<<in;
    6 
    7 endmodule

    从上面两种方式来看,方法2代码非常的少,一行就搞定,方法1得要好几行才描述完,一般给人感觉就是代码越少消耗的资源也就越少,其实不是的,来看具体比较结果吧:

    可以看到除了RTL Viewer不一样外,其他的基本都一样。

     在来看看仿真结果吧:

    激励文件:

     1 module decoder3_8_top;
     2 reg [2:0] in;
     3 wire [7:0] out;
     4 
     5 initial 
     6 begin
     7     in = 3'dz;
     8     #100;
     9     in = 3'd0;
    10     #100;
    11     in = 3'd1;
    12     #100;
    13     in = 3'd2;
    14     #100;
    15     in = 3'd3;
    16     #100;
    17     in = 3'd4;
    18     #100;
    19     in = 3'd5;
    20     #100;
    21     in = 3'd6;
    22     #100;
    23     in = 3'd7;
    24     #100;
    25 end
    26 decoder3_8 u1(
    27                 .in(in),
    28                 .out(out)
    29              );
    30 
    31 endmodule

    移位方式仿真波形:

    case方式仿真波形:

    结果是相同的。

  • 相关阅读:
    Ajax实现动态的二级级联菜单
    使用 Struts 2 实现国际化
    使用 Struts2 校验器校验用户注册信息
    Python基础 9.正则
    Python基础 8.迭代器 生成器 包
    Python基础 7.异常
    Python基础 6 .文件操作
    Python基础 5.类
    Python基础 4.函数
    Python基础 3 控制流程
  • 原文地址:https://www.cnblogs.com/wen2376/p/3458088.html
Copyright © 2020-2023  润新知