を使用せずに16 Bit Arithmetic right shift function
をverilog
に書きたいとします。シフト演算子を使用しない算術右シフト
マイコードは、これまで:
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
コンパイラが私にこの警告を表示し、出力が間違っているのはなぜですか?
新しい質問があるので、受け入れられた回答を受け入れないでください。新しい質問を投稿する必要があります。次に、期待される出力を表示します。 – toolic
申し訳ありませんが、私は新しい質問をするだけでこれが悪いと思っていました – TheDoctor