1

假设我有一个名为“myReg”的 8 位输出 reg 和一个名为“checkReg”的 8 位输入。我可以使用十六进制值在 case 语句中检查和分配它们的值吗?

例如(假设代码在一个总是块中)

case (checkReg)
    2'hA0:myReg <= 2'h10;
    2'hB0:myReg <= 2'hC0;
    //Other cases
endcase

我希望上面的代码执行以下操作:如果 checkReg = 10100000,则将 myReg 设置为 00010000。如果 checkReg = 10110000,则将 myReg 设置为 11000000。

我不确定是否可以检查并将十六进制值分配给向量并将其自动转换为二进制。

4

1 回答 1

4

对于直接基础转换(bin、oct、hex、dec),您不需要在 verilog 中进行任何特殊转换。BCD 转换之类的事情确实需要额外的步骤。

单引号前的数字是位大小,而不是位数。2'hA0应该是8'hA0,否则高位值将被屏蔽。

reg [7:0] myReg;
always @* begin
  case (checkReg)
    8'hA0: myReg = 8'h10;
    8'hB0: myReg = 8'hC0;
    //Other cases
  endcase
end
于 2014-11-25T22:47:14.583 回答