• 締切済み

verilogによる複数のクロックの作成

verilogでのプログラミングですが,まず入力クロック(clk1)を適当に分周したクロック(clk2)を生成し,そのクロック(clk2)を遅延させたクロック(clk3)を生成したいのですが,どのようなプログラムを作成すれば良いのでしょうか? clk1からclk2を生成するところまでのプログラムは作成できているのですが,clk3の生成がうまくできません. 図で示すと以下のような信号を生成したいです. clk1 _「L_「L_「L_「L_「L_「L_「L_「L_「L_「L_「L_「L_「L  clk2 _「  L _ _ _「  L _ _ _「  L _ _ _「  L _ _ clk3 _ _ _  _ _ _ _ _ _ _ _ 「  L _ _ _「  L _ 「  L みたいな感じです. 宜しくお願いします.

みんなの回答

  • monova
  • ベストアンサー率68% (68/100)
回答No.1

申し訳ありませんが、質問者様が提示している情報では 正確な回答が出来ません。 clk2 は clk1 の何分周 にしたのか、clk3 をどの程度 遅延させたいのか、遅延後のclk1,clk2 との同期関係は どの様になっているのか…等々の条件を提示して頂かないと 回答が曖昧になってしまいます。 また、どの程度まで出来ているのかソースを提示してみては 如何でしょうか? ザックリとした回答でしたら、clk1かclk2をクロックとして DFFで遅延させたいだけの個数を配置する。 JK-FF を利用して遅延させる。 カウンタを利用する。 等々があると思います。

関連するQ&A

  • FPGAのプログラミング

    QuartusII version 8.0を使って,verilogのプログラミングを行いFPGAを動かそうと考えているのですが,プログラミングの経験がないため非常に苦戦しています. FPGAより制御系の信号を生成してたいのですが,そもそもFPGAの内部クロックはFPGAごとに決まっていて,電源を入れると内部クロックが発生し,それを分周していくといった感じでプログラムを作成すればよいのでしょか? また,FPGAのリセット信号もFPGA内部で元々生成されるのでしょか? FPGAを動かすためにはどのようにプログラミングを行っていけばよいのかいまいち理解できておりません。。。 宜しくお願いいたします.

  • Verilog記述について

    いつもお世話になっております。 Verilogである動作を実現したいのですがなかなか良いアイデアが 浮かびません。どうか皆さんの知恵をお貸しください。 動作は信号のディレイなのですが、 1.Aの信号の状態をCLK1(1周期70ns)で検出します。 2.AがH→Lとなります。 3.AがLとなってからCLK2(1周期500us)で20msカウントします。 4.20ms後、出力QをH→Lとします。 (初期状態はA=H、Q=Hです) 検出するCLKとカウントするCLKを一緒にすれば問題はないのですが、 それだと、内部のFFが無駄に多くなってしまいます。 検出は早いCLKで、カウントは分周したCLKで回路を組みたいのです。 以上、宜しくお願い致します。

  • verilogでデマルチプレクサの作り方

    verilog初心者です。 ISEにてロジックを作成しているのですが、 verilogでデマルチプレクサをつくりたいのですが良い参考資料が 見当たらない為困っています。 module SEL(CLK, S, OUT); input CLK; input [2:0] S; output [3:0] OUT; といったような構成なので このクロック信号をセレクト結果によって たとえば s=000 OUT[0]=CLK OUT[1]=0 OUT[2]=0 OUT[3]=0 s=001 OUT[0]=0 OUT[1]=CLK OUT[2]=0 OUT[3]=0 といったようにしたくて、case文等を使用して 出力させようと記述してみたものの、エラーでパラで出力できない と表示されます。 何卒アドバイスをお願いします。

  • verilogである信号の数クロック遅れの信号を生成させる記述方法をお

    verilogである信号の数クロック遅れの信号を生成させる記述方法をお伺いします。 動作記述でOKです。 通常、「sig_a」 から2クロック遅れの「sig_b」を生成させるのなら: > sig_a - 2clockおくれ -> sig_b ----------------------------------- reg [2:0] regs; assign sig_b = regs[2]; asisgn regs[0] = sig_a; always @(posedge CLK) regs[2:0] <= {regs[1:0], sig_a}; ----------------------------------- のように、パイプラインに信号を通すことで実現できるですが、 何クロック遅れるかを可変(動的に設定する)としたいのです。 動作モデル的な記述で簡単にかけないのでしょうか? ------------------------------------ [NGの例]: これだとNcycle_delayがSIM途中で更新されたとき、反映できない。。。 initial begin  sig_b <= #D 1'b0;   while(1) begin   repeat(Ncycyle_delay) @(posedge CLK);    while(1) begin     sig_b <= sig_a;     repeat(1) @(posedge CLK);    end   end end ------------------------------------ 宜しくお願い致します。

  • 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での通信

    現在CPLD(MAX2)とVerilog-HDLを用いて、センサの信号が入力された回数をPCにシリアル通信(RS232C)で送信する回路を作成しています。 http://www.hmwr-lsi.co.jp/fpga/fpga_3.htm 上記のサイトを参考に通信部を作成しましたが、 例えば「300」 と送信したい場合に 8'b0000_0011(3) 8'b0000_0000(0) 8'b0000_0000(0) と3回にわけて送信したいのですが、Verilog-HDLではそのように記述すればよいでしょうか? お分かりになられる方がいらっしゃいましたら、ご教授宜しくお願い致します。

  • CPLDでの分周について

    入力クロック1MHzを、8bit(4×2のBCDコード)で099の入力信号に対し、同じく99種類の出力パルス(入力"1"で20Hz程度,入力99で2KHz程度)を生成する機能を設けたいのですが、CPLDで実現可能でしょうか。 CPLDは分周自体が不得意と聞いた事もあるような気がしますが・・・ 宜しくお願いします。

  • FPGA/Verilogでのモジュールの違い

    現在,FPGAとVerilogを用いて、モータの回転数をセンサでカウントする回路を作成しています。 countという名前のカウント回路を作成し、2つのセンサ(センサ1とセンサ2)があるため、count1,count2とインスタンスを2つ作成しています。 トップモジュールでは以下のように宣言しています。 count count1( .CLK( CLK), .SENSOR( SENSOR1), .COUNT_DIGI_0( COUNT_DIGI_20), .COUNT_DIGI_1( COUNT_DIGI_21), .COUNT_DIGI_2( COUNT_DIGI_22), ); count count2( .CLK( CLK), .SENSOR( SENSOR2), .COUNT_DIGI_0( COUNT_DIGI_0), .COUNT_DIGI_1( COUNT_DIGI_1), .COUNT_DIGI_2( COUNT_DIGI_2), ); countモジュール内では、SENSORが入力されると、カウント数が1upするだけです。 COUNT_DIGI_*は別の回路にカウント数を伝えるためにwireで接続しています。 最初に,センサ1をcount1に、センサ2をcount2に接続したところ、2つのカウント数に相違がでてしまいました。(count2のカウント数が多い) センサの配線が悪いと思い、センサ1の出力をcoun1とcount2に接続してテストしてもカウント数に相違がでてしまいました。 なぜ、同じモジュールを使用し、入力も同じなのに、結果に違いが出るのでしょうか? FPGAの特性などがあるのでしょうか? お分かりになられる方がいらっしゃいましたら宜しくご教授お願い致します。

  • 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つ使って記述出来るんですか? ご回答宜しくお願いします。

  • デジタル回路だけでクロックを逓倍するには

    FPGAに20MHzのクロックを入力し、自作するロジックで、より高いクロックを生成したいと考えています。PLL技術などをざっと調べてみたのですが、ロジックだけで作成できるか見当がつきません。FPGA内のロジックだけでクロックを逓倍することはできるのでしょうか?

専門家に質問してみよう