Verilog:使用casex进行合成

时间:2014-07-30 09:22:32

标签: verilog

我希望实现一个并行大小写块来检查16位寄存器的值。在某些情况下,我需要它来检查所有16位。但是,在其他情况下,我只需要检查几个。 casex 适用于此方案吗?如果您还没有推断, 将合成

它是微处理器控制矩阵的一部分。它是连接到指令寄存器的Moore机器。指令是16位宽。对于某些指令,例如 mov ,机器状态完全相同,只是寄存器/内存寻址不同。该指令包含有关它所引用的寄存器或存储器的信息,因此我不需要为每条可能的指令明确说明。

例如,如果我的操作码是1111,其余的12位是寻址,我可以简单地使用16&b; b1111xxxxxxxxxxxx的情况。

我希望它是并行的,所以我不使用if-else语句。我不确定这是否会按照我的意图运作。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

是的,您可以使用casex或casez。

来自IEEE 1800-2012的示例:

用casez,你可以使用?对于不关心价值观:

logic[7:0] ir;
casez(ir)
8'b1???????: instruction1(ir);
8'b01??????: instruction2(ir);
8'b00010???: instruction3(ir);
8'b000001??: instruction4(ir);
endcase

以下是casex语句的示例。它演示了在模拟过程中如何动态控制donot-care条件的极端情况。在这个例子中,如果 r = 8' b01100110,然后调用任务stat2。

logic[7:0] r, mask;
mask = 8'bx0x0x0x0;
casex(r ^ mask)
8'b001100xx: stat1;
8'b1100xx00: stat2;
8'b00xx0011: stat3;
8'bxx010100: stat4;
endcase