• ベストアンサー

Verilog記述について質問です。

Verilog HDL記述を始めたばかりの初心者です。 初歩的な質問だとは思いますが、どうかご回答よろしくお願いします。 (1)always文によるイベントの数に制限はあるのでしょうか? (2)シミュレーションをした後、波形が網目状(?)になっているときはシミュレーションが上手くいってないということなのでしょうか? 抽象的な質問で申し訳ないですが、どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • JYUZA
  • ベストアンサー率29% (54/184)
回答No.1

質問の捉え方が難しいですが・・・ (1)基本的にはないです。デバイスの容量以内であればいいかと思います。 (2)シミュレータにもよるかもしれませんが一般的には結果として不定値が出ていると思われます。シミュレーションがうまくいかないというよりはそう動いてしまう回路になっているということです。

kenchnag
質問者

補足

ご回答ありがとうございます。 もう1つ質問してもよろしいでしょうか? まだFPGAボードを使う所までいってないのですが、一応適当にデバイスを指定して波形のシミュレーションしています。その指定したデバイスの容量が不足しているせいで正しく動作しないということはあるのでしょうか??

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

その他の回答 (1)

  • JYUZA
  • ベストアンサー率29% (54/184)
回答No.2

#1です。 >一応適当にデバイスを指定して波形のシミュレーションしています。 >その指定したデバイスの容量が不足しているせいで正しく動作しないということはあるのでしょうか?? ほとんどないと思います。その場合、例えばalteraならコンパイル時にエラーもしくはワーニングになる可能性が強いです。その辺の内容を見直せば分かるかと思います。 あまりにも技術的に古いデバイスを指定した場合はディレイ等が間に合わずに誤動作する可能性はあります。使用率とかにもよりますが。せめてシリーズ名だけでも合わせた方が良いでしょう。

kenchnag
質問者

お礼

丁寧にご回答ありがとうございました。 今のところ波形のシミュレーション結果だけ見れればいいので、デバイスは気にしてなかったのですが…もしかしたら指定したデバイスが悪いのかもしれませんね。 デバイスに関しては全く無知なので、いろいろ検討していきたいと思います。 本当にありがとうございました。

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

関連するQ&A

  • Verilog-HDLのFF記述について

    先程アップしたのは、図が変になってしまいました。 改めて質問します。 1つのFF(非同期リセット)をVerilog-HDLで記述すると、以下のように記述出来ますよね? always @ ( posedge CLK or negedge RESET ) begin if ( !RESET ) begin Q <= 1'b0 ; xQ <= 1'b1 ; end else begin Q <= D ; xQ <= ~D ; end end この1つのFFをalways文を2つ使って記述出来るんですか? ご回答宜しくお願いします。

  • verilog HDLを使ったステートマシン記述について

    verilog HDLについての質問です。ステートマシンについてというよりは、文法的な質問になるかもしれません。 verilogでステートマシンを記述する際に、ステート内で使うのは、だいたいがif~else文かと思うのですが、elseを使わずに、if(条件)~if(条件)~・・・というように、必ず条件が一致すれば、順番に実行するというように記述することは可能でしょうか? よろしくお願いします。

  • Verilog記述方法に関して

    以下のVerilog記述についてどの様な記述が一般的か教えてほしい のですが? QuartusIIにて合成を行っているのですが、 「Can't resolve multiple constant drive for net ****」の エラーメッセージが発生します。 記述は以下の様なもので、別々のクロックでalways内から同じ変数 に代入しています。これが問題の様ですが、これを回避するための 一般的な処理方法はどの様にすればよいのでしょうか? Verilog初心者で、この様な処理自体がナンセンスなのかもしれません が、どなたか分かる方御願い致します。 【抜粋のため分かり難いですが記述内容は以下の様なもの】 always@(posedge clkB) begin : ClrV<= 1'b1; : end always@(posedge clkA) begin : if(ClrV) ClrV<= 1'b0; : end 以上

  • 「入門Verilog HDL記述」 の 一例について

    「入門Verilog HDL記述」を読みながらVerilog を勉強中なのですが、周りに聞ける人がいないので、質問させてください。 (ちなみに VHDL は習得しているつもりです。) いろいろ疑問点があるので、分けて何点か質問させていただきました。 改訂版 入門Verilog HDL記述の240ページのリスト II.5に generate ブロックと if 分についての以下のようなコードがありますが、 これは期待通りには動かないと思うのですが。。。 module sel2to1_2( input sel, input [3:0] d0, d1, output [3:0] dout ); parameter sel_type = 1; generate if(sel_type == 1) begin: sel_always reg [3:0] dout; always @* begin if(sel) dout <= d1; else dout <= d0; end end else if(sel_type == 2) begin: sel_cond wire [3:0] dout; assign dout = (sel == 1) ? d1 : d0; end endgenerate endmodule ModelSimでシミュレーションしてみましたが、generate文の中の reg [3:0] dout は generate 文の中のスコープでのみ定義されているらしく、 output [3:0] dout とは別の信号らしいです。よってoutputには何も代入されず。 試しに、xilinx の ISE でコンパイルしてみたが、やっぱり output には なにも接続されず、セレクタなんて生成されませんでした。 そもそも module sel2to1_2( input sel, input [3:0] d0, d1, output [3:0] dout ); reg [3:0] dout; みたいに書くと、2回宣言されているとなってエラーになります。 よって、参照ソースコードみたいに reg と wire を切り替えるような書き方はそもそもできないのでは? 皆さんどう思われますか? (インデントがうまくいかず、読みづらくてすいません。)

  • verilog HDL のレジスタ記述について

    こんにちは verilog初心者です。論理合成をしていて気になる点があったので質問させていただきました。 二つのクロックの立ち上がりで書き込むレジスタを記述していて、 (全て1bit、clkはクロック) always @(posedge clk1 or posedge clk2) begin q <= d; end としたところ、シミュレーションはできますが論理合成はできませんでした。 自分の持っている参考書に「複数の書き込み信号があるレジスタはない」という記述があったので一応納得しました。 ところが、 always @(posedge clk1 or posedge clk2) begin if (clk1==1) q <= d; else if (clk2==1) q <= d; end と記述すると論理合成できてしまいます。 両者の書き込み信号に対する振る舞いは同じように思うのですが、一体何が違うのでしょうか。 わかる方いましたら是非ご教示下さい。よろしくお願いします。

  • verilog HDLの[=]と[<=]の使い分け

    現在Verilog HDLを勉強しており、ひと通り勉強は終わりました。 しかしブロッキング代入[=]とノンブロッキング代入[<=]の使い分けをどこまで暗記すれば良いのか分かりません。 皆様は、[=]と[<=]の使い分け、あるいはネット型、レジスタ型への代入をする際の区別をどのように暗記していますか?「このポイントを理解すれば大丈夫!」みたいなことを教えていただけると助かります。 今思いつく例としては↓のとおりです ・assign文では[=]を使用しなければならない。 ・assign文の左辺は[ネット型]のみ ・case文のHPによって[=]を使用しなければならない。 ・ http://veri.jp/ba_nba.html のHPの最後のほうで『ほかにも「assign 文では NBA "<=" が使えません」という誤った注意書き』と書いてありますが、この記述の意味がわかりません。 ・回路記述ではダメなのに、シミュレーション記述では問題がない等等、、、 他にもfunction文やalways文の中で式を書く時にも困っています。

  • verilogでの記述、always@の使い方

    verilogでの記述の仕方について質問です。 画像のようなタイミングチャートを考えています。 clkとplsは入力、dataが出力です。 構成は、  pls↑の次のclk↑で、dataをアサートする。 というのを考えています。 pls↑やclk↑は、posedgeを使えばよいと思うのですが、 私の考え通りに記述すると always @(posedge pls)begin @(posedge clk)begin data <= 1; end end こんな感じになるのか?となってしまいます。 @()begin end の中に@()beginを記述することが出来るのか というところから疑問です。 出来たとしても、これが私が意図したとおりに動作するのかがよくわかりません。 ネットで、 always @() @() と記述すると順序回路ができるとあったのですが、いまいち動作が分かりません。 どなたか、動作を教えていただけないでしょうか。 また、pls↑の次のclk↑で、dataをアサートする方法を教えていただけないでしょうか。 よろしくお願い致します。

  • Verilog-HDLでの記述方法

    Verilog-HDLで回路を記述しているのですが、疑問点があるので質問させていただきます。 回路記述はおおまかに以下のようなものです。 module Adder(A, B, S, C); input [3:0] A; input [3:0] B; output [3:0] S; output C; 4ビット加算器のインスタンス(.A(A), .B(B), .S(S), .C(C)); endmodule この回路への入力は上位モジュールから与えられるとします。 このような回路記述をしていたとして、たとえば入力線Aの特定のビットが常に0になってしまう故障を記述したいとき wire err = 1'b0; assign A[0] = err; という記述を追加してみたのですが、どうもA[0]には不定値が入り込んでいるようです。 このような記述ではA[0]を常に0にすることはできないのでしょうか?またこのような故障を仮定したい場合はどのように記述すべきなのでしょうか?

  • verilogでのwhile文について質問

    verilog初心者です。 while文での処理を記述していたのですが、 下記のように変更するとエラーとなってしまいます。 なんとか出来る方法はないでしょうか? module TEST(in_data, state, clock, reset, out); input [9:0] in_data; input [5:0] state; input clock; input reset; output [5:0] out; reg [5:0] out; always@(posedge clock or negedge reset) begin if(reset == 0) begin out = 0; end else begin out = in_data; while(out > 7)begin out = out >> 1; end end end // always@ (posedge clock or negedge reset) endmodule // TEST 上のように書くと、合成でき、シミュレーションでも期待する値は得ることが出来ました。 以下のようにwhile文を変更するとエラーとなってしまいます。 while(out > state)begin out = out >> 1; end よろしくお願いします。

  • フリーのverilog-HDLシミュレータ

    Windows上で動作するフリーのverilog-HDLシミュレータを探しています。 Siliosが少し前までフリーでダウンロードできたそうなのですが、今はダウンロードが禁止されています。。 例えば、このような回路を波形を見ながら解析したいと考えています。 //○シミュレーション対象:4ビット加算回路 module adder ( a, b, q ); input [3:0] a,b; output [3:0] q; assign q = a + b; endmodule //○シュミレーション記述 `timescale 1us/1us module adder_test; reg [3:0] a,b; wire [3:0] q; parameter STEP=1000 adder adder ( a, b, q ); initial begin a = 4'h0; b = 4'h0; #STEP a = 4'h5; b = 4'ha; #STEP a = 4'h7; b = 4'ha; #SEEP $finish; end endmodule

このQ&Aのポイント
  • Wi-Fi接続での印刷が遅くなり、1枚ずつ転送中と表示される問題が発生しました。設定を元に戻す方法を教えてください。
  • Windows11を使用しており、無線LAN経由でプリンターに接続しています。
  • 関連するソフト・アプリや電話回線の情報は特にありません。
回答を見る