2016-12-29 6 views
0

変数 'V'は連続的および手続き的な割り当てによって作成されます 変数 'F'は連続的および手続き的な割り当てによって記述されます。なぜ私のためにこのエラーがModelSimで発生するのですか?

私のコードは次のとおりです。

module ALU(input signed [7:0] A,B ,input [2:0] sel ,input Si,input Ci ,output logic signed [15:0] F ,output logic N,Z,V,Eq); 
always @(A,B,sel) begin 
    F=15'b 0; 
    N=1'b 0; 
    Z=1'b 0; 
    V=1'b 0; 

    case(sel) 
    3'b 000:begin F=A+B+Ci; end 
    3'b 001:F=A+(~B+1); 
     3'b 010:F=A<<1; 
     3'b 011:F=A>>>1; 
     3'b 100:begin F=A>>1; F[7]=Si; end 
     3'b 101:begin F=A<<1; F[0]=Si; end 
     3'b 110:F=A*1.5; 
     3'b 111:F=A*B; 
    endcase 
end 
assign V=(A[7]==B[7]&&F[7]!=A[7])?1'b1:1'b0; 
assign F[15:8]=(V)?((A[7]==1)?8'b11111111:8'b00000000):((F[7]==1)?8'b11111111:8'b00000000); 

ENDMODULE

答えて

1

問題は常にブロックでは、あなたが手続き(変数の型)の割り当てを作っているということです。しかし、あなたはまた、モジュールの終わりに向かって連続した割り当てをしています。

プロシージャの割り当てのみを持つように、alwaysブロックへの連続的な代入をリファクタリングすることがあります。

+0

私は全く割り当てを使用すべきではないという意味ですか? – beginner

+0

@beginnerそれぞれの 'always'ブロックと' assign'ステートメントは、あなたのケースの組み合わせ論理ではハードウェアのブロックになります。変数を複数の場所から駆動すると、複数のハードウェアブロックの出力を実質的に短絡してしまいます。 –

0

問題は、言語で許可されていない連続的な割り当て(F = ...の割り当て)と手続き的な割り当て(alwaysブロック内)の両方を使用していることです。

私はこの場合、プロシージャ割り当てを使用するためにのみコードをリファクタリングするかもしれないと推測しています。

ポイントはIEEE1800-2012の10.3.2で規定されています。第10.6項の「手続き的継続的割当て」への参照が表示されますが、これは将来廃止される可能性があるため避けることをお勧めします。

関連する問題