FC2カウンター FPGAの部屋 2009年10月03日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

手押しカンナ盤を買ってしまいました

木工趣味が高じて、手押しカンナ盤を購入してしまいました。昨日届いたのですが、今日開けてやってみました。買ったのはこの機種ですが、ここでは買わずにオークションで15,500円でした。送料が1,800円、替刃を1組買ったので、それが2,500円で、19,800円でした。
いや~すごいです。2X4材があっという間につるつるになりました。ものすごい回転数でうるさいですが、木くずは99%は付属の袋に入るので周りが汚れません。
ただ、手を載せた板の下でカンナの歯が回っているのでスリルがあります。ちょっと怖い。そこでプッシュブロックを作ってみようと思っています。
teoshikannna_091003.jpg
  1. 2009年10月03日 21:44 |
  2. 木工
  3. | トラックバック:0
  4. | コメント:5

ISE11.3のConstrants Editorの使い方3

ISE11.3のConstrants Editorの使い方2”の続き

今度はOutputのタイミング制約をしていこう。左のConstraint TypeからOutputsを選択する。そうすると、Unconstrained Input Ports に各入力ポートが出てくるので、とりあえず、その中からcam_clk をダブルクリックして、制約を追加しよう。cam_clk は、ODDR2で出力する予定のCMOSカメラ用のクロックなので、なるようにしかならないのだが、一応どのくらいのディレイで出ている見るために、RISING, FALLING両エッジで10ns 程度入れておくことにする。
Constraints_Editor_15_091002.png

Create Clock to Pad (OFFSET OUT) ダイアログが開く。左上のClock pad net and period をDDRのラジオボタンをクリックした(DDRレジスタで出力するため)。Output clock pad net: をclk に変更、Rising edge constraintsのExternal clock to pad (offset out): に10ns、Fa edge constraintsのExternal clock to pad (offset out): に10ns を設定した。
Constraints_Editor_16_091002.png

これでOKボタンをクリックする。DDRなので、RISINGとFALLINGの2つのエントリが、Constraints EditorのCreate Timing Constraints for Output (OFFSET OUT)に入った。
Constraints_Editor_17_091002.png

次に、dac_blue<0> のタイミング制約を作成する。同様にUnconstrained Output Portsからdac_blue<0>をダブルクリックすると、Create Clock to Pad (OFFSET OUT) ダイアログが開く。
DAC(ADV7125)のデータシートの5ページ目から、データのセットアップ時間が0.2ns、ホールド時間が1.5ns ということが分かった。よって、Rising edge constraintsのExternal clock to pad (offset out): に41.66 - 0.2 - 0.8(配線遅延分)= 40.66 nsとした。ホールド時間は指定できないが、そのくらいは大丈夫だと思う。
Constraints_Editor_18_091002.png

SRAM関係は非同期なので、クロックからの出力時間は関係ないが、そろっていないとまずいので、とりあえず、Rising edge constraintsのExternal clock to pad (offset out): を 10ns としておく。
Constraints_Editor_19_091002.png

あとは例によって、テキストエディタでバスの制約はコピーした。結局、出力のタイミング制約は下のようになった。

NET "cam_clk" OFFSET = OUT 10 ns AFTER "clk" RISING;
NET "cam_clk" OFFSET = OUT 10 ns AFTER "clk" FALLING;
NET "dac_blue<0>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_blue<1>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_blue<2>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_blue<3>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_blue<4>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_blue<5>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_blue<6>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_blue<7>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<0>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<1>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<2>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<3>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<4>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<5>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<6>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_green<7>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<0>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<1>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<2>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<3>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<4>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<5>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<6>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "dac_red<7>" OFFSET = OUT 40.66 ns AFTER "cam_pclk";
NET "mem_addr<0>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<1>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<2>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<3>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<4>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<5>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<6>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<7>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<8>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<9>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<10>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<11>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<12>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<13>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<14>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<15>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<16>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_addr<17>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<0>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<1>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<2>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<3>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<4>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<5>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<6>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<7>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<8>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<9>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<10>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<11>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<12>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<13>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<14>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "mem_data<15>" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "n_mem_lowerB" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "n_mem_upperB" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "n_mem_rd" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "n_mem_we" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "vga_hsync" OFFSET = OUT 10 ns AFTER "cam_pclk";
NET "vga_vsync" OFFSET = OUT 10 ns AFTER "cam_pclk";


  1. 2009年10月03日 05:11 |
  2. Constraints Editor
  3. | トラックバック:0
  4. | コメント:0