FC2カウンター FPGAの部屋 The Simple MicroBlaze Microcontroller 18 (CMOSカメラ回路のシミュレーション)
FC2ブログ

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

FPGAの部屋

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

The Simple MicroBlaze Microcontroller 18 (CMOSカメラ回路のシミュレーション)

SMMのシミュレーションをISE12.4のISimで行った。”The Simple MicroBlaze Microcontroller 6(シミュレーション)”を参考にして、SMMのシミュレーション用VHDLファイル、lcd_rot_cont_smm.vhdを作った。と言っても変更したのは、スティミュラスの部分だけで、とてもシンプルな変更だ。変更点を下に示す。

    process begin
        DOUT <= (others => '0');
        BE <= (others => '0');
        ADDR <= (others => '0');
        CS <= '0';
        
        wait for 100 ns;
        
        -- これから下のwaitまでの間にスティミュラスを書く
        
        -- SMM_WR_CYCLE(TIMER_ADDR, X"00000010", "1111", clk, rnw, cs, addr, dout, be); -- Timerへ書き込み、16クロックカウント
        
        -- wait until INTERRUPT_ACK_node'event and INTERRUPT_ACK_node='1'; -- INTERRUPT_ACK_node の立ち上がりまでwait
        -- wait for 1 ns;
        
        -- SMM_WR_CYCLE(LCD_ADDR, X"12340000", "1111", clk, rnw, cs, addr, dout, be); -- LCDへ書き込み
        
        -- -- ボタンの状況をrd_dataに読み出し
        -- SMM_RD_CYCLE(BUTTON_ADDR, "1111", rd_data, clk, rnw, cs, addr, din, be);
        
        wait for 460 us;
        
        SMM_WR_CYCLE(SCCB_REG_WR, X"12340000", "1111", clk, rnw, cs, addr, dout, be); -- OV7670の設定レジスタへ書き込み
        
        wait;
    end process;


CMOSカメラ回路(現在は、CMOSカメラ回路にSMMを組み込んでCMOSカメラの設定レジスタの設定をしようと思っている)のISimシミュレーション用のバッチファイル (CamDispCntrler_DDR2_tb.bat) を下に示す。

rm CamDispCntrler_DDR2_tb.exe
K:\HDL\Xilinx\12.4\ISE_DS\ISE\bin\nt\fuse work.CamDispCntrler_DDR2_tb work.glbl -incremental -d OVL_VERLOG -i ..\ -i ..\..\..\DDR2_SDRAM_cont_266\Simulation\512Mb_ddr2 -i H:\HDL\OVL\std_ovl -d sg3 -d x16 -d OVL_ASSERT_ON -d OVL_FINISH_OFF -L unisims_ver=%XILINX%\verilog\hdp\nt\unisims_ver -L unimacro_ver=%XILINX%\verilog\hdp\nt\unimacro_ver -L XilinxCoreLib_ver=%XILINX%\verilog\hdp\nt\xilinxcorelib_ver -L accellera_ovl_vlog=%XILINX%\verilog\hdp\nt\accellera_ovl_vlog -o CamDispCntrler_DDR2_tb.exe -prj CamDispCntrler_DDR2_Capt_SCCB_tb.prj
CamDispCntrler_DDR2_tb.exe -gui


CamDispCntrler_DDR2_tb.batを実行すると、CamDispCntrler_DDR2_Capt_SCCB_tb.prjのコンパイルを実行して、リンクし、CamDispCntrler_DDR2_tb.exeができるので、それを実行するとISimが走って、シミュレーションができる。
CamDispCntrler_DDR2_Capt_SCCB_tb.prjの内容を下に示す。

verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/addr_fifo.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/async_fifo_fall.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/async_fifo_rise.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/controller.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/dcm_module.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/ddr2_cont_iob.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/dm_io_pad.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/dq_io_pad.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/dqs_io_pad.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/dqsb_io_pad.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/rddata_afifo.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/read_write_io.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/REFREQSM.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/wrdata_fifo.v
verilog work ../../../DDR2_SDRAM_cont_266/Sources/ddr2_sdram_cont/ddr2_sdram_cont.v
verilog work "../../Synth122/ipcore_dir/cam_cont_afifo.v"
verilog work "../../Synth122/ipcore_dir/cam_data_afifo.v"
verilog work ../../Sources/SWDiv.v
verilog work ../../Sources/SW_Controller.v
verilog work ../../Sources/VGA_Display_Controller.v
verilog work ../../Sources/Arbiter.v
verilog work ../../Sources/Camera_Controller.v
verilog work ../../Sources/dcm_CAM_DDR2_clk.v
verilog work ../../Sources/synchronizer.v
vhdl work ../../Sources/freqdiv.vhd
vhdl work ../../Sources/One_Transaction_SCCB.vhd
vhdl work ../../Sources/SCCB_Reg_Controller.vhd
vhdl work ../../Sources/SCCB_reg_values_ROM.vhd
vhdl work ../../Sources/lcd_rot_cont.vhd
vhdl work ../SMM_noUART_sim_pack.vhd
vhdl work ../lcd_rot_cont_smm.vhd
vhdl work ../../Sources/lcd_ctlr.vhd
vhdl work ../../Sources/timer.vhd
vhdl work ../../Sources/rot_enc_cont.vhd
vhdl work ../../Sources/swdiv_rot.vhd
vhdl work ../../Sources/ROTSW_SM.vhd
verilog work ../../Sources/CamDisp_Cntrler_DDR2.v
verilog work ../OV7670_Model.v
verilog work H:\HDL\FndtnISEWork\Spartan3A_starter_kit\DDR2_SDRAM_cont_266\Simulation\512Mb_ddr2\ddr2.v
verilog work ../CamDispCntrler_DDR2_tb.v
verilog work H:\HDL\Xilinx\12.2\ISE_DS\ISE\verilog\src\glbl.v


VerilogとVHDLを混在でシミュレーションしている。Verilog、VHDL混在でシミュレーション出来るのはISimの大きな利点の一つだ。ModelSim SEだったら混在行けるけど、なかなか混在でシミュレーションできるシミュレーターは少ないし高価だ。
これでコンパイルしたら、エラーになってしまった。OVLアサーションを入れてあるので、OVLのライブラリが無かったのがエラーの原因だった。
ISimでOVLのVHDL, Verilog混在シミュレーション(OVLライブラリのコンパイルと登録)”を見ながら、ISE12.4でOVLをコンパイルしてライブラリ化した。(この記事が間違っていたで、修正しました。VHDLライブラリがコンパイル出来なかった)
OVLライブラリを生成してリンクしたら、コンパイルが通って、ISimが立ち上がった。
起動時にOV7670の設定レジスタをセットするが、それを1つにして、SMMから12番アドバイスに34というデータを書きこむスティミュラスを試してみた。この記事の一番上のリストがそれだ。
シミュレーション結果を下に示す。
SMM_65_101228.png

実線のカーソルが初期化時のSCCBインタフェースの波形(設定レジスタ書き込み)で、破線のカーソルがSMMから12番アドバイスに34というデータを書きこむ波形だ。
これを見る限り、上手くいっているようなんだが?なぜ設定がうまくいかないんだろう?初期化時には問題なく上手くいっているんだけど?もう一度SDKでデバックしてみよう。それで上手くいっているようであれば、オシロスコープで見てみたい。
  1. 2010年12月28日 09:15 |
  2. SMM
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1675-e5cac0b8
この記事にトラックバックする(FC2ブログユーザー)