Artix-7で作るUSB3.0 CMOSカメラでAXI-Interconnectを使ってみた
Artix-7版USB3.0 CMOSイメージセンサ取り込み装置で、CoreGenの生成するAXI Interconnectを使ってみました。
数か月前にもCoreGenのAXI-Interconnectに挑戦してみたのですが、その時はAXI Interconnectが動かずそのままになっていました。
今回、久しぶりにチャレンジしてみたのですが、最初はs_axi_arreadyがずっとLのまま動かなかった(つまり下位デバイスのReadの準備ができた状態にならない)のですが、CoreGenの設定でINTERCONNECT_ACLKを10000psにして、
次の画面でIs Aclk Asyncをチェックしたら動くようになりました。
どちらが効いているのかは不明です。
さて、CoreGenで生成したAXI-Interconnectに、USB FX3コントローラと、カメラモジュールと、DDR3メモリコントローラをつなぎます。
inst_axi_ic : axi_ic PORT MAP ( INTERCONNECT_ACLK => axiclk, INTERCONNECT_ARESETN => axiresetn, S00_AXI_ARESET_OUT_N => open, S00_AXI_ACLK => axiclk, S00_AXI_AWID => usb_axi_awid(0 downto 0), S00_AXI_AWADDR => usb_axi_awaddr, S00_AXI_AWLEN => usb_axi_awlen, S00_AXI_AWSIZE => usb_axi_awsize, S00_AXI_AWBURST => usb_axi_awburst, S00_AXI_AWLOCK => usb_axi_awlock(0), S00_AXI_AWCACHE => usb_axi_awcache, S00_AXI_AWPROT => usb_axi_awprot, S00_AXI_AWQOS => usb_axi_awqos, S00_AXI_AWVALID => usb_axi_awvalid, S00_AXI_AWREADY => usb_axi_awready, S00_AXI_WDATA => usb_axi_wdata, S00_AXI_WSTRB => usb_axi_wstrb, S00_AXI_WLAST => usb_axi_wlast, S00_AXI_WVALID => usb_axi_wvalid, S00_AXI_WREADY => usb_axi_wready, S00_AXI_BID => usb_axi_bid(0 downto 0), S00_AXI_BRESP => usb_axi_bresp, S00_AXI_BVALID => usb_axi_bvalid, S00_AXI_BREADY => usb_axi_bready, S00_AXI_ARID => usb_axi_arid(0 downto 0), S00_AXI_ARADDR => usb_axi_araddr, S00_AXI_ARLEN => usb_axi_arlen, S00_AXI_ARSIZE => usb_axi_arsize, S00_AXI_ARBURST => usb_axi_arburst, S00_AXI_ARLOCK => usb_axi_arlock(0), S00_AXI_ARCACHE => usb_axi_arcache, S00_AXI_ARPROT => usb_axi_arprot, S00_AXI_ARQOS => usb_axi_arqos, S00_AXI_ARVALID => usb_axi_arvalid, S00_AXI_ARREADY => usb_axi_arready, S00_AXI_RID => usb_axi_rid(0 downto 0), S00_AXI_RDATA => usb_axi_rdata, S00_AXI_RRESP => usb_axi_rresp, S00_AXI_RLAST => usb_axi_rlast, S00_AXI_RVALID => usb_axi_rvalid, S00_AXI_RREADY => usb_axi_rready, S01_AXI_ARESET_OUT_N => open, S01_AXI_ACLK => axiclk, S01_AXI_AWID => cam_axi_awid(0 downto 0), S01_AXI_AWADDR => cam_axi_awaddr, S01_AXI_AWLEN => cam_axi_awlen, S01_AXI_AWSIZE => cam_axi_awsize, S01_AXI_AWBURST => cam_axi_awburst, S01_AXI_AWLOCK => cam_axi_awlock(0), S01_AXI_AWCACHE => cam_axi_awcache, S01_AXI_AWPROT => cam_axi_awprot, S01_AXI_AWQOS => cam_axi_awqos, S01_AXI_AWVALID => cam_axi_awvalid, S01_AXI_AWREADY => cam_axi_awready, S01_AXI_WDATA => cam_axi_wdata, S01_AXI_WSTRB => cam_axi_wstrb, S01_AXI_WLAST => cam_axi_wlast, S01_AXI_WVALID => cam_axi_wvalid, S01_AXI_WREADY => cam_axi_wready, S01_AXI_BID => cam_axi_bid(0 downto 0), S01_AXI_BRESP => cam_axi_bresp, S01_AXI_BVALID => cam_axi_bvalid, S01_AXI_BREADY => cam_axi_bready, S01_AXI_ARID => cam_axi_arid(0 downto 0), S01_AXI_ARADDR =>cam_axi_araddr, S01_AXI_ARLEN => cam_axi_arlen, S01_AXI_ARSIZE => cam_axi_arsize, S01_AXI_ARBURST => cam_axi_arburst, S01_AXI_ARLOCK => cam_axi_arlock(0), S01_AXI_ARCACHE => cam_axi_arcache, S01_AXI_ARPROT => cam_axi_arprot, S01_AXI_ARQOS => cam_axi_arqos, S01_AXI_ARVALID => cam_axi_arvalid, S01_AXI_ARREADY => cam_axi_arready, S01_AXI_RID => cam_axi_rid(0 downto 0), S01_AXI_RDATA => cam_axi_rdata, S01_AXI_RRESP => cam_axi_rresp, S01_AXI_RLAST => cam_axi_rlast, S01_AXI_RVALID => cam_axi_rvalid, S01_AXI_RREADY => cam_axi_rready, M00_AXI_ARESET_OUT_N => open, M00_AXI_ACLK => axiclk, M00_AXI_AWID => ddr_axi_awid, M00_AXI_AWADDR => ddr_axi_awaddr, M00_AXI_AWLEN => ddr_axi_awlen, M00_AXI_AWSIZE => ddr_axi_awsize, M00_AXI_AWBURST => ddr_axi_awburst, M00_AXI_AWLOCK => ddr_axi_awlock(0), M00_AXI_AWCACHE => ddr_axi_awcache, M00_AXI_AWPROT => ddr_axi_awprot, M00_AXI_AWQOS => ddr_axi_awqos, M00_AXI_AWVALID => ddr_axi_awvalid, M00_AXI_AWREADY => ddr_axi_awready, M00_AXI_WDATA => ddr_axi_wdata, M00_AXI_WSTRB => ddr_axi_wstrb, M00_AXI_WLAST => ddr_axi_wlast, M00_AXI_WVALID => ddr_axi_wvalid, M00_AXI_WREADY => ddr_axi_wready, M00_AXI_BID => ddr_axi_bid, M00_AXI_BRESP => ddr_axi_bresp, M00_AXI_BVALID => ddr_axi_bvalid, M00_AXI_BREADY => ddr_axi_bready, M00_AXI_ARID => ddr_axi_arid, M00_AXI_ARADDR => ddr_axi_araddr, M00_AXI_ARLEN => ddr_axi_arlen, M00_AXI_ARSIZE => ddr_axi_arsize, M00_AXI_ARBURST => ddr_axi_arburst, M00_AXI_ARLOCK => ddr_axi_arlock(0), M00_AXI_ARCACHE => ddr_axi_arcache, M00_AXI_ARPROT => ddr_axi_arprot, M00_AXI_ARQOS => ddr_axi_arqos, M00_AXI_ARVALID => ddr_axi_arvalid, M00_AXI_ARREADY => ddr_axi_arready, M00_AXI_RID => ddr_axi_rid, M00_AXI_RDATA => ddr_axi_rdata, M00_AXI_RRESP => ddr_axi_rresp, M00_AXI_RLAST => ddr_axi_rlast, M00_AXI_RVALID => ddr_axi_rvalid, M00_AXI_RREADY => ddr_axi_rready );
・・長い! ぐちゃーっと同じようなものを延々と書きます。
その後もで紆余曲折あったけど動きました。
ノートPCにArtix-7 CMOSイメージセンサをつないでお出かけしましょう。
神田川の風景を撮影してみました。本当は2048×1536で撮影したのですが、このブログは横1600までしか対応していないようなので、1600×1200にリサイズしています。
デジカメ並みに綺麗です。 こんなカメラが自作できてしまう。やはりUSB3.0とArtix-7は面白い。
8bitで屋外を撮影しようとすると、明るいところと暗いところが出てしまって、色深度が足りないですね。
| 固定リンク






コメント