2017-05-12 25 views
1

を使用せずに16 Bit Arithmetic right shift functionverilogに書きたいとします。シフト演算子を使用しない算術右シフト

マイコードは、これまで:

module my_shift(Number, Range, Shifted); 
    input [15:0] Number; 
    input [3:0] Range; 
    output[15:0] Shifted; 
    reg Shifted; 

always @(Number) 
    Shifted = shifted_number(Number, Range); 

    function[15:0] shifted_number; 
    input [15:0] number; 
    input [3:0] Range;   //4 bit shift range 
    integer i; 
    integer j; 

    begin 
     for (i = 0; i < Range; i = i + 1) begin 
      for (j = 0; j < 15; j = j + 1) begin 
       shifted_number[j] = number[j+1]; 
      end 
     end 
     shifted_number[15] = number[15]; 
    end 

    endfunction 

endmodule 

私は私のfunctionをテストするための簡単なテストベンチを書きました。 私はちょうどshiftの3つの異なる数字を1でbitにします。

私のテストベンチ:

module test; 
reg [15:0] Number; 
reg [3:0] Range; 
wire[15:0] shifted; 

my_shift shift_number(Number, Range,shifted); 

initial 
$monitor($time," -->Number = %b, shifted = %b, ",Number,shifted); 

initial begin 
Range = 1; 
Number = 3; 

#10; 
Number = 4; 

#10; 
Number = 5; 

#100 $finish; 
end 

endmodule 

私に次のようoutput与える:

0 - >数= 0000000000000011、シフト= 0000000000000001、

10 - >数値を= 0000000000000100、シフト= 0000000000000000、

20 - >数= 0000000000000101、シフト= 0000000000000000、

それがコンパイル

が、警告がである:

my_shift shift_number(Number, Range,shifted);

警告:

warning: Port sizes don't match in port #3

コンパイラが私にこの警告を表示し、出力が間違っているのはなぜですか?

+0

新しい質問があるので、受け入れられた回答を受け入れないでください。新しい質問を投稿する必要があります。次に、期待される出力を表示します。 – toolic

+0

申し訳ありませんが、私は新しい質問をするだけでこれが悪いと思っていました – TheDoctor

答えて

2

あなたは間違って1ビットregとしてShiftedを宣言:

変更:

output [15:0] Shifted; 
    reg Shifted; 

へ:

output reg [15:0] Shifted; 

私は今、この出力を得る:

  0 -->Number = 0000000000000011, shifted = 1000000000000001, 
      10 -->Number = 0000000000000100, shifted = 1000000000000010, 
      20 -->Number = 0000000000000101, shifted = 1000000000000010, 

私は2つの異なるシミュレータであなたのコードを実行し、はるかに役立つ警告とエラーメッセージを得ました。 edaplaygroundであなたの運を試すことができます。

+0

あなたは正しいです。 'Veriwell'では ' output [15:0]を使う必要があります。 reg [15:0]シフトされた; – TheDoctor

関連する問題