📜  Verilog案例声明

📅  最后修改于: 2021-01-11 14:51:34             🧑  作者: Mango

Verilog案例声明

case语句检查给定的表达式是否与列表和分支内的其他表达式之一匹配。通常习惯于实现设备。

如果存在测量单位要检查的许多条件,并且将其综合为优先级编码器而不是设备,则if-else构造可能不适用。

在Verilog中,case语句包括Verilog关键字,case(“ casez”,“ casex”)和endcase之间的所有代码。案例陈述可以是多选一的构造,大致类似于护理if-else-if陈述中的助理。

句法

Verilog case语句以case关键字开头,以endcase关键字结尾。

括号区域单位内的表达式旨在专门进行一次评估,并与书写顺序内的替代方案列表进行比较。

并且选择与给定的度量单位表达式匹配的声明为死。多个语句块应该进行排序,并且应在开始和结束之内。

case ()
    case_item1 : 
    case_item2,
    case_item3 : 
    case_item4 :     
      begin
            
      end
    default: 

endcase

如果所有情况都不符合给定的表达式,则默认项目计量单位内的语句将失效。默认语句不是强制性的,并且在case语句中只有一个默认语句。 Case语句是嵌套的。

执行将退出case块,但是如果没有任何一项与表达式匹配,并且没有给出默认语句,则不执行任何操作。

下面的时尚模块包括一个2位信号选择信号,以将三个不同的3位输入之一路由到指定的符号。

case语句用于将正确的输入分配给支持sel值的输出。由于sel可以是2位信号,因此它将有20个2个组合,从零到3。如果sel为3,则默认语句有助于将输出设置为零。

module my_mux (input [2:0] a, b, c,         // three 3-bit inputs
                      [1:0]sel,               // 2-bit opt for signal to choose on from a, b, c
               output reg  [2:0] out);             // Output 3-bit signal
  // invariably block is dead whenever a, b, c or sel changes in value
 invariably @ (a, b, c, sel) begin
    case(sel)
      2'b00    : out = a;         // If sel=0, output can be a
      2'b01    : out = b;         // If sel=1, output is b
      2'b10    : out = c;         // If sel=2, output is c
      default  : out = 0;         // If sel is something, out is commonly zero
    endcase
  end
endmodule

案例声明标题

case语句头由case(“ casez”,“ casex”)关键字和后跟case表达式组成,通常都在一行代码中。

当将full_case或parallel_case指令添加到case语句时,指令的度量单位将作为注释实时添加到case语句标题顶部的case表达式之后以及随后的任何代码行之前。

案例项目

案例项目是将习惯的位,向量或Verilog表达式与案例表达式进行比较。

与“ C ”等不同的高级编程语言不同,Verilog的case语句包含隐式的break语句。

与此案例表达式相匹配的第一个案例项导致相应的案例项语句失效,因此为此跳过的所有其余案例事物度量单位都经过case语句。

案例陈述

如果案例项目与该案例表达式匹配,则案例项目语句是一个或多个终止的Verilog语句。与VHDL不同,Verilog的大小写本身可以是表达式。

要更改Verilog代码文档的解析,如果对于一个特定的案例项目来说,一条Verilog案例项目的语句中有多个是无效的,则应该在关键字“ begin”“ end”之间加上Verilog案例项目的语句。

凯斯

在Verilog中,有一个casez语句,它是case语句的变体,它启用“ z”和“?”整个案例比较中将其视为“无关”值。

“ Z”和“?”度量单位被视为无关,无论它们是否在case表达式内或是否在case项目内。

当秘密编写“不关心”的案例陈述时,请使用casez陈述并使用“?”字符而不是“ z”字符,目的是“无关”位。

凯斯

在Verilog中,有一个casex语句,它是case语句的一种变体,它使“ z”,“?”和“ x”值在整个比较过程中都被视为“无关”值。

“ x”,“ z”和“?”度量单位被视为无关,无论它们是否在case表达式内或是否在case项目内。

完整案情陈述

完整case语句可以是case语句,其中所有可获取的case-expression二进制模式都与case项目或case默认值匹配。

如果case语句不包含case默认值,并且可以查找与任何已打印的case都不匹配的二进制case表达式,则case语句不完整。

完整的case语句可以是一个case语句,其中每个可获取的二进制,非二进制以及二进制和非二进制模式的混合都作为case语句装入case语句中。

Verilog并不希望案例陈述是完整的合成或高密度脂蛋白模拟,但是Verilog案例陈述通过添加案例默认值而变得完整。 VHDL希望案例陈述能够完全模拟高密度脂蛋白,而这通常需要在“其他”子句中进行关联。

平行案例陈述

并行case语句可以是内部的case语句,只能将case表达式与一个case项目匹配。

如果可以找到一个案例表达式,该案例表达式可能与一个案例项目相匹配,则匹配的案例事物度量单位表示为重叠案例事物,因此case语句不是并行的。

硬件原理图

详细说明了RTL代码以获得代表4比1多路复用器的硬件原理图。

执行上述设计后,当sel为3时输出为零,并且与其他值的分配输入相对应。

ncsim> run
[0]  a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0
[10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5
[20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5
[30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1
[40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0
ncsim: *W,RNQUIE: Simulation is complete.

在case语句中,仅当表达式的每一位与包括0、1,x和z的替代项之一匹配时,比较才会成功。在上面的示例中,如果sel中的任何位是x或z,则将执行默认语句,因为其他替代项均不匹配。在这种情况下,输出将全为零。

ncsim> run
[0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0
[10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0
[20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0
[30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0
[40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0
[50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0
[60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0
[70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0
[80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0
[90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0
ncsim: *W,RNQUIE: Simulation is complete.

如果设计中的case语句在case项目备选中包含x和z,则结果将有所不同。

module mux (input [2:0] a, b, c, output reg [2:0] out);

  // Case items have x and z, and sel has to match the exact value for
  // output to be assigned with the corresponding input
 
 always @ (a, b, c, sel) begin
    case(sel)
      2'bxz: out = a;
      2'bzx: out = b;
      2'bxx: out = c;
      default: out = 0;
    endcase
  end

endmodule

区分大小写和if-else

case语句与if-else-if在两个方面不同,例如:

  • if-else块中给出的表达式更为通用,而在case块中,单个表达式与多个项目匹配。
  • 当表达式中有X和Z值时,这种情况将提供确定的结果。