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で屋外を撮影しようとすると、明るいところと暗いところが出てしまって、色深度が足りないですね。
最近のコメント