2016-03-20 12 views
-2

a + b、a-b、& bまたはaのいずれかを計算するVerilogモジュールを作成しています。 b。Verilogモジュールはaとbとaを計算できません

問題は、a + bとa-bを計算することです。 ですが、& bとa |を計算することはできません。 bと何も返しません。

input [31:0] a, b; 
input [2:0] op; 
output [31:0] z; 
output ex; 
wire[31:0]a0,a1,a2,a3; 

assign a0 = a & b; 
assign a1 = a | b; 
assign a2 = a + b; 
assign a3 = a - b; 

assign z=a0; 
//assign z=a1; 
//assign z=a2; 
//assign z=a3; 

endmodule 

モジュール基本的に+ Bと、B、& B、及び計算| BおよびZに、その計算値を割り当てます。

そして、a + bとa-bを計算し、計算された値をzに代入します。

しかし、& bとa | bの場合、zには何も割り当てません。

どうすればこの問題を解決できますか?

私を助けてくれてどうもありがとう。

+1

私は[入力を設定してから遅れてください](http://codepad.org/xCv3b5N8)、うまくいくようです。 [最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve)を投稿してください。 – MikeCAT

答えて

0

zに何かを割り当てると確信しています。問題は、あまりにも多くをzに割り当てようとしていることです。

assignステートメントは、この場合はwirezを駆動するいくつかのハードウェアを表します。だから、あなたは4回を平行して運転しています。 4つの別々の塊からです。あなたが好きなら、あなたは短絡回路を持っています。 (Verilogはハードウェア記述言語です。ハードウェアここでは、ソフトウェアを記述していません。

input [2:0] opがあります。これは私の宿題のように見えますが、あなたはALUを設計するように求められていると思います。 ALUは入力(この場合はオペランド)のさまざまな操作を実行できるハードウェア(この場合は組合せロジック)の一括処理で、この場合はaおよびbです。どの操作が他の制御入力によって選択される必要があるかは、この場合はほぼ確実にopとする必要があります。

だから、あなたはopをテストしa+ba-ba&bまたはa|bのいずれかでzを駆動するいくつかのコードを必要とします。この仕事のために私には明白な構築物は、case文です:

case (op) 
    3'b000: 
    z =  // some expression, eg a + b, it depends on what op code 000 is supposed to mean 
    3'b001: 
    z =  // some other expression here 

      // etc etc 

    default: // perhaps... 
    z =  // ...something to drive z if none of the other branches are used 
endcase 

case文はalwaysブロック内に行く必要があります。私はこれが宿題であると思うので、私はあなたに答えを与えることはありません、私はあなたがそれを行う方法を考えさせます。

最後に、opが3ビット幅であることがわかります。これはALUに4つ以上の異なる操作が実行されていることを示しています。おそらく何かをする必要があるex出力があることもわかります。

0

ここには混乱があります。元の投稿コードは問題ありません。 zが必要に応じて割り当てられます。もう1つの答えは間違っています - 複数のドライバはありません。彼らはコメントアウトされています。遅延の提案も間違っています - 遅延はあなたのロジックに何の違いもありません。

関連する問題