如何使用数组从一个输入输出多个值?

How to use an array to output multiple values from one input?

我正在尝试编译 SystemVerilog 代码,该代码将基于两个按钮在 4 位 7 段显示器上生成输出。我得到了使用串联运算符的提示,但一直收到“无法解析多个常量驱动程序”错误。我相信这意味着对同一个信号有多个分配。我通过删除后 3 个 assign 语句并改用数组来更正此问题,但我不确定语法如何在每个寄存器中有两个输出时起作用。添加括号无效。

  (
     output logic [3:0]en, //7 segment digit selector
     output logic a,b,c,d,e,f,g,  //7 segment display
     input logic [1:0] x  //button input
  );

    logic [3:0] lut [4] = {(4'b1000,7'h01), (4'b0100,7'h04), (4'b0010,7'h01),(4'b001,7'h01)};
    assign [en,a,b,c,d,e,f,g] = lut[x]

    //this was my original code
    //assign {en,a,b,c,d,e,f,g} = x == 2'b11 ? {4'b1000,7'h01}:0;
    //assign {en,a,b,c,d,e,f,g} = x == 2'b10 ? {4'b0100,7'h0f}:0;
    //assign {en,a,b,c,d,e,f,g} = x == 2'b01 ? {4'b0010,7'h01}:0;
    //assign {en,a,b,c,d,e,f,g} = x == 2'b00 ? 0:{4'b0001,7'h01};

case语句常用于这种情况:

module disp
  (
     output logic [3:0]en, //7 segment digit selector
     output logic a,b,c,d,e,f,g,  //7 segment display
     input logic [1:0] x  //button input
  );

always_comb begin
    case (x)
        2'b11 : {en,a,b,c,d,e,f,g} = {4'b1000,7'h01};
        2'b10 : {en,a,b,c,d,e,f,g} = {4'b0100,7'h0f};
        2'b01 : {en,a,b,c,d,e,f,g} = {4'b0010,7'h01};
        2'b00 : {en,a,b,c,d,e,f,g} = {4'b0001,7'h01};
    endcase
end

endmodule

你是对的:你不能对同一个信号多次使用 assign 关键字。


这是一个带有数组的版本,模拟与 case:

module disp
  (
     output logic [3:0]en, //7 segment digit selector
     output logic a,b,c,d,e,f,g,  //7 segment display
     input logic [1:0] x  //button input
  );

    logic [10:0] lut [4] = {{4'b001,7'h01}, {4'b0010,7'h01}, {4'b0100,7'h0f}, {4'b1000,7'h01}};

always_comb begin
    {en,a,b,c,d,e,f,g} = lut[x];
end

endmodule

我重新排列了数组中的值以匹配 case