2017-06-26 7 views
-1

レジスタ内のバイナリを符号拡張してゼロ拡張するコードの形式は何ですか?Verilog:レジスタでバイナリを拡張するには?

すなわち

reg[0:0] a;  //a is 1-bit. 
reg[31:0] b, c; //b and c are 32-bits. 
//some code... 

、32ビットにaを符号拡張bに追加し、そしてcに結果を置きます。

ゼロ拡張aを32ビットに変換してbに追加し、結果をcに入力します。

+0

@toolicあなたがそこで何をしたのか説明できますか?ありがとう – NoName

+0

'reg [0:0] a;' => 'reg a;'これは1ビットです。 –

答えて

0

署名拡張にはさまざまな方法がありますが、最小限のコードを必要とする方法を使用します。 Verilog レプリケーションの連結操作を使用します。

レプリケーション形式:{numberOfTimesToRepeat{value}}

すなわち{20 {[0]}}

aにおける第0ビットは、20回の登録レプリケート。

連結形式:レジスタ{value1, value2}

すなわち{A、B}

連結しバイナリabを登録します。サイン拡張する

{{31 {[0]}}、A}

aレジスタ31回で0ビット目を複製し、そしてその前に連結レジスタのバイナリはaです。ゼロ拡張する

{{31 {ゼロ}}、A} //ゼロはゼロのビットを含む1ビットのレジスタです。

値0を31回複製し、レジスタaのバイナリの前に連結します。ここ

1

は、システムVerilogの方法である:上記の例b

logic signed a; 
logic [31:0] b, c; 
... 

b = a; 

aの符号拡張値となるであろう。

+0

この方法を使用すると、ゼロ拡張はどうですか?論理unsigned a;と論理unsigned [31:0] b、c; '? – NoName

+0

の 'signed'変数は符号拡張されます。他はすべてゼロ拡張されます。比較がサインインアカウントをとるので、 'signed'変数は関係演算の結果を変更することに注意してください。また、符号付き変数は、符号を示すために上位ビットを使用します。 – Serge

関連する問題