#132. case语句
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