FPGAのプログラミングについての質問

このQ&Aのポイント
  • FPGAを制御するためのプログラミングについての質問
  • FPGAの内部クロックとリセット信号についての疑問
  • FPGAのプログラミング方法についての疑問
回答を見る
  • ベストアンサー

FPGAのプログラミング

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

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

  • ベストアンサー
  • golgo20
  • ベストアンサー率42% (3/7)
回答No.3

> これは水晶発信機がFPGA上に搭載されていて電源を入れるとクロックが発生するという意味ではないのでしょうか? 違います。 FPGAは、内部に水晶発振器を持っていません。 あくまでクロックは外部から供給する形になります。 http://www.ipros.jp/adv/08842/?rss=1 このような水晶発振器をFPGAと同じ基板(ボード上)に取り付けてFPGAと繋ぎます。 「タイミング管理」に関してですが FPGAには色々な回路組み込むことが出来ます。 その色々な回路のタイミング調整をPLLなどを使用して「FPGAで一括管理できる(オンチップでタイミング管理)」 という意味になります。

buju12
質問者

お礼

迅速なご返答ありがとうございます. すみません. ボードも含めてFPGAだと完全に勘違いしておりました. ボードをよく見ると発信器がありました。。。 くだらない質問に付き合っていただきありがとうございました. 申し訳ありません. でもスッキリしました(笑)

その他の回答 (2)

  • golgo20
  • ベストアンサー率42% (3/7)
回答No.2

追加です。 QuartusII 8.0をお使いのようですので 「ALTPLL」をご使用になられてはいかがでしょうか? QuartusIIメニュー → Tools → Megawizard Plug-In Manager "Create a new custom ..."で"Next"を押します。 次の画面の左側にライブラリの一覧があるかと思いますが 「I/O」の+(プラス)をほどいて「ALTPLL」を選択します。 右側では、選択した「ALTPLL」をVerilogで生成するのか VHDLで生成するのか。また、生成する場所(ディレクトリ)を指定します。 この状態で"Next"を押すと 実際に「ALTPLL」の分周や逓倍を設定できるGUI画面に移動します。 分周率や逓倍率はユーザ側で自由に設定可能です。 (もちろん限界はありますが)

  • golgo20
  • ベストアンサー率42% (3/7)
回答No.1

こんにちは。 基本的に勘違いをされているようなので簡単に説明します。 クロック、リセット信号はFPGAの外部から入力されます。 クロックは水晶発信器などで生成します。 リセットは単純に外部スイッチでLow信号をFPGAに入力するものと思って下さい。 仮に、水晶発信器で生成されたクロックが100MHzだとします。 FPGAはその100MHzのクロックを「PLL」という機能を使って 50MHzや200MHzに分周・逓倍します。 質問者さんはPLLをverilogで実現しようと考えているのでしょうか? ALTERAやXilinxでは、PLLを既にハードで装備しているので わざわざverilogでPLLを作る必要は御座いません。

buju12
質問者

補足

こんにちは. ご回答ありがとうございます. >質問者さんはPLLをverilogで実現しようと考えているのでしょうか? FPGAはALTERAのCycloneなのですが,PLLが搭載されており オンチップでのタイミング管理ができるという表記がありますが, これは水晶発信機がFPGA上に搭載されていて電源を入れるとクロックが発生するという意味ではないのでしょうか? 基本的な事を理解していなくて申し訳ありません. 宜しくお願いします.

関連するQ&A

  • 古いFPGAデバイスの開発をしたいです。

    QuartusII(Version 13.0.1)をインストールしているのですが、 「EP1K10TC100-3」が選択できません。 QuartusIIでは使えないのでしょうか? あと、「GHDL」というHDLのコンパイラがあるらしいですがQuartusIIを使わないで、 "HDLをエディタで書いて->「GHDL」でコンパイル->FPGAデバイスへ書き込み" というのは可能でしょうか? FPGAは初めてになります。 FPGAというのが、マイコンで例えれば(1)プログラムを書いて(HDL書いて)(2)コンパイルして(論理合成して)(3)デバイスへ書き込む という流れに、(4)タイミングの調整というのが入ったものなのかなとは思っています。

  • 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 みたいな感じです. 宜しくお願いします.

  • FPGAを独学で学ぶ方法

    FPGAを独学で学ぶ方法 自分は大学でVerilogHDLを学びました。 加算器やデコーダ、セレクタ、ステートマシンなど 専門書に書いてある内容は大体理解できました。 しかし、応用回路が全く記述できません。 たとえばPWM発生回路、信号処理、マイコンと接続など 行数が長くなるプログラムは組めません そこでもう一度Verilogを勉強しなおしたいのですが 開発環境がありません。 XilinxのISEは無料で手に入るのですが、ボードはどうすればいいのでしょう? また、開発環境について詳しく書いてある書籍がほしいです。 予算は1万円前後です。 また、コードを組むコツを教えてください。 C言語やVBは得意でしたがVerilogはあまり理解できませんでした。

  • FPGAにおけるバスの引き回し

    よろしくお願い致します。 現在、アルテラ製「CycloneIII」のFPGA設計を行っております。 使用言語はVHDLです。 FPGAにはマイコンからのアドレスバス(26bit)、データバス(16bit)、 nWR、nRD、nCSが接続されます。 さらにFPGA内部には120個のレジスタが用意され、 マイコンはこのレジスタに対してアクセスを行います。 当初、FPGAは正常に動作していました。 しかし、仕様追加でレジスタを数個追加しただけで 今まで正常に動作していたレジスタが動作しなくなりました。 (書き込みができない、出力データに抜けが生じる等) そこで皆様に質問ですが、 FPGA内部に100を超えるレジスタを用意する場合 一般的にバスや制御信号をどのようにして引き回しているのでしょうか。 (ファンアウトを減らすためにnWR信号を各レジスタごとに用意する等・・・) 何卒よろしくお願い致します。

  • FPGA や CPLD は何に使うんですか?

    普段PICマイコンを使って遊んでいます。 調べごとをするときは当然のようにネットを使うんですが 時々FPGAやCPLDに関しての記載事項があったりして それについても調べてみたんですがイマイチ何に使うのかが判りません。 現状での僕の理解は以下のとおりです。 ・プログラムを書きICの中にあらかじめ道を作ってあげるため  内部での判断時間がなくINからOUTへ結果出力までの時間がマイコン  等に比べてものすごく早い。 ・一見するとICだけどイメージとしてはプログラムで指定したとおりの  道が入っている。 ・ピンが1から100まであったとして30番のピンと56番のピンに信号が入  ったら88番に出力するみたいな使い方をする。 この程度です。 そこで質問です。 質問1 処理が早いといってもFPGAやCPLDは単体ではなくマイコン等の先につけ て判断自体はマイコンがやるんだから結局マイコンのスピードになって しまう気がするんですがそもそもどういうところに使うんですか? 質問2 イメージとしてはICの中にプリント基板を作るようなことなんでしょうか?

  • クロックのレベル変換

    電源電圧5Vで生成されたクロックを、3.3VのFPGAで使用したいのですが、 使用するFPGAに5Vトレラントがありません。 FPGAの入力クロックのジッタ仕様は、サイクルジッタが±300ps、 周期ジッタが±1000psです。 これらの仕様を満たすために、FPGAの前段にレベル変換IC(5V→3.3V) を挿入することを考えていますが、そもそも、クロックをレベル変換 すること自体が間違っているのでしょうか? それとも、上記仕様を満たすレベル変換ICが存在するので、 上記構成で考えても問題ないでしょうか? ちなみに、電源電圧5Vで生成されたクロックを、3.3Vで生成するように 変更することはできません。 お手数ですが、ご教授をお願い致します。

  • FPGAのシミュレーションに関して

    いつもお世話になっています。 以下の開発環境におけるFPGAのロジックのシミュレーションに疑問があるので質問します。 環境 modelsim Altera starter edition 質問概要 10進カウンターを作ってクロックの立ち上がりで動作するように作ったのに立下りで動作するのは何故か。(10進数をカウンター内部変数TQで数え上げqに出力しているがTQはクロックの立ち上がりで動いているが、qは立下りで動いている様に見える) 10進カウンターの内部構造 ソース概要 ・内部変数TQが0から始まり、+1していき10回数えたら0から桁上がりの変数cを1にしてやりなおし。 ・計算中の内部変数TQで7SEG LEDを駆動させるためのアウトプットqがある。 ・リセットは0の時リセットされる。 VHDLのソースを載せます。 library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity COUNT10 is port(RESET,CLK : in std_logic; Q: out std_logic_vector(3 downto 0); C: out std_logic ); end COUNT10; architecture RTL of COUNT10 is signal TQ : std_logic_vector(3 downto 0); begin process (RESET,CLK ) begin if(RESET='0') then TQ <= "0000"; C<='0'; elsif(CLK 'event and CLK ='1') then if(TQ="1001") then TQ <= "0000"; C <='1'; elsif(TQ="0000") then C <='0'; TQ <= TQ + '1'; else TQ <= TQ + '1'; end if; end if; Q<=TQ; end process; end RTL; シミュレーション結果 クロックを数え上げた内部変数TQがqへ値を渡す仕組みになっています。 これがたち下がりの時に行われている様に見える。

  • アルテラ CYCLONE3のリセット信号は

    アルテラ社のCYCLONE3を使用した回路を製作していてリセット信号の事でお聞きします。 電源投入後コンフィギュレーションを開始しコンフィギュレーション完了後に内部ロジックが動作を始めますが、この時リセット信号は外部からリセットICなどにより入力する必要はないのでしょうか? 内部ロジックではリセット信号処理を必要としています。  always@(negedge rst or posedge clk) などとしています。 外部からリセットICなどによりリセットを入れる場合、そうとうにディレイ時間の長いリセットICが必要になると思いますが、FPGA専用のリセットICなど有るのでしょうか。 またはCYCLONE3には内部にPOR回路がある様ですが、この回路を内部ロジックのリセット信号に使用する事は出来ないのでしょうか。 宜しくお願いします。

  • PLDデバイスのリセット信号に関して

    PLDデバイス(CPLD、FPGA)でHDL言語できしょうしています、 always@(posedge clk or negedge rst)begin if(!rst)begin reg <= 0; end if begin レジスタのリセットを上記の様に記述しますが、この「rst」の信号はPLDデバイスの外部から 入力される設定なのですが、通常PLDのリセット信号をどの様な回路構成で生成するのでしょうか? PLD外部にCPUが有る場合はCPUから入力すればよいと思いますが、CPUなどが無くPLDデバイス 単体の場合、PLDデバイス用のリセットICなどあるのでしょうか? PLDデバイスはCPLDタイプであっても内部的にロジックをローディングするコンフィギュレーション動作が必要でこの間は数百msec程度かかると思われます。 ※CPUのリセット時間に比べかなり長いと思われます。 しかし通常のCPU用のリセットICはそんなに長い期間用はあまり無いと思います。 又はアルテラ社のデバイスを見ると「POR](パワーオンリセット)なる、ブロックが内蔵されていますが、このモジュールをリセット回路として使用できるのでしょうか。その場合、冒頭のVerilog言語で どの様に記述すればいいのでしょうか。 よろしくお願いします。

  • MAXIM社製DS1743書き込み不良

    MAXIM社製のリアルタイムクロックDS1743をFPGAから制御しようと しているのですが、書き込みを行おうと、WEをLowに落として、 データラインにデータを出力しようとしても、DS1743側が信号を 出していてぶつかっているのか、うまく信号が出ません (Highになりきらなかったり、すぐにまたLowになったり) 代理店経由メーカーには問い合わせているのですが わからないという回答のみ。 どなたか同じような現象があり、解決されたことがあれば 解決策をお教えいただきたく。 よろしくお願いします。

専門家に質問してみよう