2017-04-14 38 views
0

(編集)私はVerilog算術プロジェクトで作業していますが、これは問題であると仮定して符号拡張部に固執しました。私は4ビット入力A、Bを持っていて、8ビット出力を持っているはずです。いくつかのプロセス(合計、サブ...)私は8ビット出力を作るために符号拡張を使用する必要があります。演算の本体のために、私はこのコードを持っています。これはコードの半分です。それだけで長いですcuzを私は..Verilogでの算術演算(符号拡張)

module arithmetic(A, B, AN0, DP, sum, sub, mult, div, comp, shiftLeft, 
shiftRight, signExtend); 

    input signed [3:0] A, B; 

    output [7:0] sum, sub, mult, div, comp, shiftLeft, shiftRight, 
    signExtend; 

    output AN0, DP; 

    //sum 
    reg [4:0] qsum; 
    [email protected] (A, B) 
     qsum = A+B; 

    assign sum = {{3{qsum[4]}},qsum}; 

    //sub 
    reg [4:0] qsub; 

    [email protected] (A, B) 
     qsub = A-B; 

    assign sub = {{3{qsub[4]}},qsub}; 

    //mult 
    reg [7:0] qmult; 
    [email protected] (A, B) 
     qmult = A * B; 

    assign mult = qmult; 

を半分の部分が含まれていなかったと私は私のシミュレーションをチェックすると、それはすべての値が、Z、及びXを持っていません。入力値も表示されません。なぜそれが起こっているのですか?ありがとう

(編集済み)これは私のテストベンチコードです。 8つの操作(和、乗算、減算、除算、比較、shiftleft、右シフト、符号拡張)

module lap3_top_tb(); 
reg signed [3:0] A, B; 
reg [2:0] Operation; 
wire [7:0] Result; 
wire DP, AN0; 

lab3_top ulap3_top(
    .A(A), 
    .B(B), 
    .Operation(Operation), 
    .Result(Result), 
    .DP(DP), 
    .AN0(AN0) 
); 

initial begin 
    A = 6; B = 7; Operation = 0; 
    #20; 
    A = -6; B = -7; Operation = 0; 
    #20;  
    A = 6; B = 7; Operation = 1; 
    #20; 
    A = -6; B = -7; Operation = 1; 
    #20; 
    A = 6; B = 7; Operation = 2; 
    #20; 
    A = -6; B = 7; Operation = 2; 
    #20; 
    A = 7; B = 4; Operation = 3; 
    #20; 
    A = 7; B = 0; Operation = 3; 
    #20; 
    A = 6; B = 7; Operation = 4; 
    #20; 
    A = -6; B = -7; Operation = 4; 
    #20; 
    A = 1; B = 6; Operation = 5; 
    #20; 
    A = 1; B = -6; Operation = 5; 
    #20; 
    A = 1; B = 6; Operation = 6; 
    #20; 
    A = 1; B = -6; Operation = 6; 
    #20; 
    A = 6; B = 0; Operation = 7; 
    #20; 
    A = -5; B = 0; Operation = 7; 
    #20; 
end 

endmodule 

lap3_topファイルがここにあります。 (mux_8_1は出力を選択し、実行結果スルー。あなたは、コードが必要な場合、私に知らせて!しかし、私は、マルチプレクサが正常に動作だと思います)

module lap3_top(A, B, Operation, Result, AN0, DP); 
    input signed [3:0] A, B; 
    input [2:0] Operation; 
    output AN0, DP; 

    output [7:0] Result; 
    wire a, b, c, d, e, f, g, h; 

    arithmetic uarithmetic(
    .A(A), 
    .B(B), 
    .AN0(AN0), 
    .DP(DP), 
    .sum(a), 
    .sub(b), 
    .mult(c), 
    .div(d), 
    .comp(e), 
    .shiftLeft(f), 
    .shiftRight(g), 
    .signExtend(h) 
    ); 

    mux_8_1 umux8_1(
    .A(a), 
    .B(b), 
    .C(c), 
    .D(d), 
    .E(e), 
    .F(f), 
    .G(g), 
    .H(h), 
    .Operation(Operation), 
    .Result(Result) 
    ); 

endmodule 

そんなにみんなに感謝!

+1

こんにちはJakeさん、あなたのテストベンチコードを共有できますか? –

+0

'testbench'から' sum'モジュールへのすべての接続を見る 'lab3_top'モジュールを投稿することもできますか? – Roman

答えて

0

私はあなたのコードをシミュレートしようと、あなたのコードに次の間違いを見つけた:あなたは、テストベンチモジュールでトップモジュールをインスタンス化するときに、モジュールのlab3_top ulap3_top(...);B 3_top名を使用しますが、あなたがしたいモジュールが別の名前を持っていますmodule lap3_top(...);la p 3_top。

私は名前を変更し、すべてがうまく動作します(私はないmux_8_1コード内のモジュールと、いくつかの操作を説明していない持っているので、波形にあなたがZZ状態、 を見ることができます)enter image description here

P.S.ちなみに、私はこのタグを追加するときにVivadoを使用すると仮定します。そして、そのような場合には、このようなエラーをチェックするヒントがあります(モジュール内で異なる名前でインスタンス化されたり、ライブラリ内でコンパイルできないモジュールでエラーが発生した場合)。階層内のすべてのモジュールを展開すると、エラーのあるモジュール?がサインインされます。 enter image description here

+0

うわー..私はこの間違いで多くの時間を費やしました。ありがとうございます! – Jake

+0

あなたは大歓迎です! – Roman

+0

@Jakeまた、今後のVivadoの作業に役立つと期待している情報を追加しました – Roman