我希望实现一个并行大小写块来检查16位寄存器的值。在某些情况下,我需要它来检查所有16位。但是,在其他情况下,我只需要检查几个。 casex 适用于此方案吗?如果您还没有推断, 将合成 。
它是微处理器控制矩阵的一部分。它是连接到指令寄存器的Moore机器。指令是16位宽。对于某些指令,例如 mov ,机器状态完全相同,只是寄存器/内存寻址不同。该指令包含有关它所引用的寄存器或存储器的信息,因此我不需要为每条可能的指令明确说明。
例如,如果我的操作码是1111,其余的12位是寻址,我可以简单地使用16&b; b1111xxxxxxxxxxxx的情况。
我希望它是并行的,所以我不使用if-else语句。我不确定这是否会按照我的意图运作。任何建议将不胜感激。
答案 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