#132. case语句

    ID: 132 Type: Default 1000ms 256MiB

case语句

题目描述

Verilog中的case语句几乎等同于if…else if…else…序列,其语法与C语言中的switch语句类似,如下例所示:

always @(*) begin // This is a combinational circuit case (in)

1'b1: out = 1'b1; // 对应if(in>=1) 语句

1'b0: out = 1'b0; // 对应else语句

default: out = 1'bx; //使用case实现组合逻辑时,必须有default,以防出现锁存器

endcase //endcase语句表示case语句结束,两者成对使用

end

-case语句以关键字case开始,以endcase结束,两者成对出现

-case语句中每个条目只执行一条语句,如要在一个条目下进行多个赋值,需要将多条预计放在begin/end关键字之间

-case条目允许重复或部分重叠,第一个匹配到的条目有效 当有多个条目进行选择时,使用case语句比if…else…语句方便很多,本例中,使用Verilog设计六选一选择器,当sel信号在0~5时,选择对应的数据输出,否则输出0,输入输出数据位宽均为4bit。

输入格式

1个 3bit 位宽选择信号 sel 6个 4bit 位宽数据信号 data0、data1、...

输出格式

1个 4bit 位宽信号 out

示例代码

module top ( 
    input [2:0] sel, 
    input [3:0] data0,
    input [3:0] data1,
    input [3:0] data2,
    input [3:0] data3,
    input [3:0] data4,
    input [3:0] data5,
    output reg [3:0] out   );//
    always@(*) begin  // This is a combinational circuit
        case(...)
    end

endmodule