首页 文章

Verilog:使用casex进行合成

提问于
浏览
1

我想要实现一个并行的case块,它将检查16位寄存器的值 . 在某些情况下,我需要它来检查所有16位 . 但是,在其他人中,我只需要检查几个 . casex 适合这种情况吗?如果你还没有推断, it is to be synthesized .

它是一台连接到指令寄存器的Moore机器 . 指令是16位宽 . 对于某些指令,例如 mov ,除了寄存器/存储器寻址不同之外,机器状态完全相同 . 该指令包含有关它所引用的寄存器或内存的信息,因此我不需要为每个可能的指令明确地设置一个案例 .

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

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

1 回答

  • 1

    是的,你可以使用casex或casez .

    IEEE 1800-2012中的示例:

    用casez,你可以使用?因为不关心 Value 观:

    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
    

相关问题