- 締切済み
verilog HDLについての質問
verilogで以下のようなコードだと、エラーが起こります。 何故起こるのか、対処法はどのようにすればよいか教えてください。 //-----ソースコード---------------------------- modele Test(CLK1,CLK2,PG1); input CLK1; input CLK2; output PG1; reg dmy; always @(posedge CLK) begin dmy = 1; end always @(posedge CS) begin dmy = 0; end assign PG1 = dmy; //-----エラー内容------------------------------- Only one always block may assign a given variable dmy //-----以上---------------------------------------- regは複数のalwaysで変化させることはできませんということでしょうが、なぜでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- JYUZA
- ベストアンサー率29% (54/184)
原因はまさに「regは複数のalwaysで変化させることはできませんということでしょう」です。 「が、なぜでしょうか」に関してはその回路を実際に作ろうとすればわかります。合成結果を想像した時、FFで作成できない回路になるからです。同じ信号を別々のFFからは出せません。対策は#1の回答がよろしいかと思います。CSはif文が良いかと思います。
- bakeratta
- ベストアンサー率24% (317/1288)
regのdmyを、CLKとCSのposedgeで変化させようとしているからではないでしょうか? 変化(always文)をCLKだけにして、CSをifなどで組めませんか? 基本、一相同期で組むのであれば、そっちの方が良いと思いますが。