两者的含义相同吗?

Is both have the same meaning?

在 Verilog 代码中

case ({Q[0], Q_1})
  2'b0_1 :begin 
    A<=sum[7];        Q<=sum;        Q_1<=Q;
  end
  2'b1_0 : begin 
    A<=difference[7]; Q<=difference; Q_1<=Q;
  end
  default: begin 
    A<=A[7];          Q<=A;          Q_1<=Q;
  end
endcase

上面的代码是否与下面的代码相同

case ({Q[0], Q_1})
  2'b0_1 : {A, Q, Q_1} <= {sum[7], sum, Q};
  2'b1_0 : {A, Q, Q_1} <= {difference[7], difference, Q};
  default: {A, Q, Q_1} <= {A[7], A, Q};
endcase

如果是,那为什么我得到不同的结果?

编辑:-A、Q、和、差均为8位值,Q_1为1位值。

是的,它们是一样的。例如尝试这个小代码并检查,输出是相同的:

module test;

wire A,B,C;

reg p,q,r;

initial 
begin
 p=1; q=1; r=0;
end

assign  {A,B,C} = {p,q,r};

initial   #1 $display("%b %b %b",A,B,C); 

endmodule

总的来说如果想了解连接运算符,可以参考here

编辑:我假设 Ap , BqCr 长度相同。

不,这些不一样。连接运算符 ({ ... }) 允许您从几个不同的信号创建向量,允许您既使用这些向量又分配给这些向量,从而导致分量信号的分配将从结果中获得适当的位。从您之前的问题 (Please Explain these verilog code?) 中,我看到 AQsumdifference 都是 8 位值,而 Q_1是一个 1 位值。让我们检查第一个作业(注意其他三个作业以相同的方式工作):

{A, Q, Q_1} <= {sum[7], sum, Q};

如果我们看右边,我们可以看到连接的结果是一个 17 位向量,因为 sum[7] 是 1 位(sum 的 MSb) ,sum是8位,Q是8位(1+8+8=17)。假设 sum = 8'b10100101Q = 8'b00110110{sum[7], sum, Q} 会是什么样子?好吧,它是 sumQ 的值的串联,所以它将是 17'b1_10100101_00110110,第一位来自 sum[7],接下来的 8 位来自 sumQ.

的最后 8 位

现在我们必须将这个 17 位值分配给左侧。在左边,我们有 {A, Q, Q_1},它也是 17 位(A 是 8 位,Q 是 8 位,Q_1 是 1 位)。但是,我们必须将上面获得的 17 位值中的位分配给构成这个新的 17 位向量的适当信号,这意味着 8 个最高有效位进入 A,接下来的 8 位进入 Q,最低有效位进入 Q_1。因此,如果我们从上面获取值 (17'b1_10100101_00110110),并以这种方式拆分它 (17'b11010010_10011011_0),我们会看到 A = 8'b11010010Q = 8'b10011011Q_1 = 1'b0 .因此,这与分配 A = sum[7]Q = sumQ_1 = Q 不同(这将导致 A = 8'b00000001Q = 8'b10100101Q_1 = 1'b0,其中Q 的许多位丢失,A 有 7 个额外位)。

然而,这并不意味着我们不能拆分左侧的连接,它看起来像这样:

A <= {sum[7], sum[7:1]};
Q <= {sum[0], Q[7:1]};
Q_1 <= Q[0];