FC2カウンター FPGAの部屋 2010年05月09日
FC2ブログ

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

FPGAの部屋

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

4つ引き出しがある桧の収納家具作り3(引き出し)

4つ引き出しがある桧の収納家具作り2”で外枠が大体完成した。天板を固定して、コーススレッドを打った穴に、桧材から作ったダボを打って、綺麗にした。
次は、引き出しを作成した。

1. 枠を作るために、1X8材を縦に切る。縦板の縦は引き出しを入れる枠の内寸より5mm小さく、横板の縦は10mm小さく切る。(後で下からの溝の位置を変えているので、組んだ状態では横板は縦板に比べて、上下が2.5mmずつ小さい。これはそこから空気を抜いて、引き出しが開け閉めがスムーズに出来るようにするためだ。下の隙間は横板が棚板と接触するのを避けるためでもある。これにより、引き出し開け閉めの際の抵抗を減少させることが出来る)
2. 引き出しの底板は、4mm厚のシナベニアを使用する。
3. 縦板の下から7.5mmの部分に4mmのストレートビットを使ったトリマーで6mmの深さの溝を掘る。横板は下から5mmの部分にやはり、幅4mm、深さ6mmの溝を掘る。
4. 縦板と横板を組み合わせた引き出しの幅は、引き出しを入れる枠の内寸より1mm小さくする。
5. 引き出しの底板は、縦板と横板を組み合わせた内寸よりも10mm大きく切断する。つまり、余裕は両端で1mmずつ。(これをぴったり5mmの深さの溝を掘ると、組み合わない可能性がある)
6. まずは横板の溝に、寸法通りに切断したシナベニアを入れる。横板の木口に接着剤を塗って、シナベニアに縦板をはめ込む。
7. はみ出した接着剤は水に濡らした雑巾で拭き取る。
8. クランプを4つかけて固定する。


今は8. の状態になっている。
hikidashi_100509.jpg

接着する前に、引き出しを入れてみたが、1mmの余裕では、きつすぎた。どうも誤差が1mm程度あるようだ。そこで縦板2枚を電動カンナ盤で0.5mmずつ削ったところ、スムーズに引き出しが動いた。
上図で、3つはクイックバークランプを使っているが、1つはL字クランプにした。やはり、クイックバークランプは締めが足りないので、反っている木をもとに戻すのには頼りない。もっと長いL字クランプの方が良いみたいだ。
なお、箱を作るには、普通はハタガネを使用するが、クイックバークランプの方が安いので、購入した。

(2010/05/10:追記) 今朝、引き出しの接着具合を見てきたが、たぶん、反りが修正されていて、少しゆるくなってしまった。引き出しの幅は、引き出しを入れる枠の内寸より2mm程度の隙間がある。1mm程度隙間が大きい。やはり、接着後に修正する必要があるようだ。木の反りを修正できる可能性があるため。
最初からぴったりに出来ていたので、かんな掛けする必要がなかった。残念。教訓にしよう。
  1. 2010年05月09日 18:58 |
  2. 木工
  3. | トラックバック:0
  4. | コメント:0

ISE12.1の疑問2と感想

ISE12.1の疑問”では、だいぶ勘違いして申し訳なかった。

まだ疑問がある。”ISE12.1が出ていました”で、defparamを使うとXSTでエラーが出るということを書いた。

ISE12.1でSP605のBRDデザインがXSTでエラーになる話ですが、これは、BRAMの初期値をdefparamで指定している部分でエラーとなっているようです。What's New in Xilinx ISE Design Suite 12のXST、Improved design methodology:を見ると、VHDLのgenericやVerilogのparameterを使わないといけないそうです。
つまり、プリミティブのインスタンスの時にVHDLだったらgeneric map, Verilogだったら# を使ってBRAMの初期値を入れる必要があると思われます。


ISE12.1のエラー画面を見ると、defparamの前に、// synthesis translate_off が記述されている。これは、ここからは論理合成時に無視するというディレクティブだ。これが効いていないのではないか?と思う。下図の記述の意味はシミュレーション時にはdefparamのデータを入れて、シミュレーションして、実際にFPGAにインプリメントするときには、初期値をデフォルト値にするという意味だと思う。それがXSTでエラーになるのだから、おかしいと思う。
ISE121_question_4_100509.png

上図で最初のエラーの全文を下に示す。

ERROR:Xst:3154 - "H:\HDL\FndtnISEWork\Spartan6\SP605_Sample_Projects\sp605_dsp_copy\remote_sources\Projects\Xilinx\ObiWan\FPGA\SP605\Dev\DSP48A\PB_CODE.v". Line 30. Unable to set attribute "INIT_00" with value "00110F07400C000EC0000018002A00FA002A00FA002A00FA002A00FAC0000010" on instance of block . This property is already defined with value "0000000000000000000000000000000000000000000000000000000000000000" on the block definition by a VHDL generic or a Verilog parameter. Apply the desired value by overriding the default VHDL generic or Verilog parameter. Using an attribute is not allowed.



ISE12.1でSpartan3A Starter KitのDDR2 SDRAMコントローラのバーストテスト回路をインプリメントすると、XSTは通るが、パーサーエラーが2個でる。
ISE121_question_5_100509.png

このプロジェクトは、DCMのアトリビュートの設定にdefparamを使っているが、この記述はXSTを通っている。

    DCM dcm_DDR2_clk_dcm (
        .CLKIN(sysclk),
        .CLKFB(clk_bufg),
        .DSSEN(1'b0),
        .PSINCDEC(1'b0),
        .PSEN(1'b0),
        .PSCLK(1'b0),
        .RST(1'b0),     // 前段のDCMがロックするまでリセット
        .CLK0(clk_node),
        .CLK90(),
        .CLK180(),
        .CLK270(),
        .CLK2X(),
        .CLK2X180(),
        .CLKDV(),
        .CLKFX(clk_sdram_node),
        .CLKFX180(),
        .LOCKED(dcm1_locked),
        .PSDONE(),
        .STATUS()
    );
    defparam dcm_DDR2_clk_dcm.CLKIN_PERIOD = 20.0;
    defparam dcm_DDR2_clk_dcm.DLL_FREQUENCY_MODE = "LOW";
    defparam dcm_DDR2_clk_dcm.DUTY_CYCLE_CORRECTION = "TRUE";
    defparam dcm_DDR2_clk_dcm.CLKDV_DIVIDE = 16.0;
    defparam dcm_DDR2_clk_dcm.PHASE_SHIFT = 0;
    defparam dcm_DDR2_clk_dcm.CLKOUT_PHASE_SHIFT = "NONE";
    defparam dcm_DDR2_clk_dcm.STARTUP_WAIT = "FALSE";
    defparam dcm_DDR2_clk_dcm.CLKFX_DIVIDE = 1;
    defparam dcm_DDR2_clk_dcm.CLKFX_MULTIPLY = 3;
    // defparam dcm_DDR2_clk_dcm.FACTORY_JF = 16'hFFFF;


BRAMはだめでDCMはOKなのか?それともSpartan-6はダメで、Spartan-3AはOKなのか?

どうやら、Spartan-6やVirtex-6などの6入力LUTとそれ以外ではXSTのアルゴリズムがそうという違うのではないだろうか?(当たり前という話もあるが。。。)Spartan-3Eで論理合成が5時間かかっていた仕事のプロジェクトをVirtex-6に試しに変更したら数分で終了した。(これはISE11.5でだったかISE12.1だったか記憶が曖昧)
ISE12.1でインプリメントがスピードアップするとしても、Spartan-6やVirtex-6が主になるんじゃないかと予想している。その他は、変わらないのではないだろうか?(あくまで私の予想です)
  1. 2010年05月09日 06:10 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0