• 締切済み

Verilog学習中です。

VHDLは一通り学んだんですが、VerilogHDLの方が一般的だということで VerilogHDLを自力で学習中なのですがわからないことがあり基本的なのですが質問させてください。 VHDLでは信号定義する際に、 signal文で定義すればよいのですが、VerilogHDLではレジスタ型reg、ネット型wireの二種類で定義するという点なのですが・・・ この二つの違いは本を読んで学習して一応だいたいはわかりました。 ですがwire型でしかassign文は書けませんし、reg型でしかalways文、function文は使えないので xor X1 (x2,thcode1[3],thcode1[2]); xor X2 (x1,thcode1[2],thcode1[1]); xor X3 (x0,thcode1[1],thcode1[0]); and X4 (yd[1],x2,x1); and X5 (yd[0],x2,x0); or X6 (sum,yd,mdcode) と書くとX6の箇所のsumにエラーが出てしまいます。 原因はydがwire型、mdcodeがreg型で定義されているからなのですが、後でsum,mdcodeをalways文で使いたいのし、ydをreg型で宣言してもエラーが出てしまいますしどうしたらいいのか困ってます。 誰か解消方法もしくはreg、wire型の混合演算の方法をご存じの方教えていただけませんか?

みんなの回答

  • mahaze
  • ベストアンサー率29% (217/731)
回答No.1

部分的に抜き出されていて、いまいち全体がつかめないですが。。。 左側から2つが入力で、3つめが出力と考えていいですか? sum,yd,mdcodeは全てwire宣言で構わないと思います。 sumをreg変数から持ってきたい場合は、別のreg変数(sum_r)を作り assign sum = sum_r; として使えばwireに変換できます。 always文中でも代入式の右辺や条件判定に使う場合はwire宣言のままでもかまいません。

taka11hiro
質問者

補足

わかりにくい説明ですいません。 //(out,in1,in2)// の順番になっています。 教えていただいた方法を試してみたいと思いますのでまた、わからないことがありましたらよろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A