FC2カウンター FPGAの部屋 2014年01月
fc2ブログ

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

FPGAの部屋

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

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製14(ハードウェアのデバック2)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製13(ハードウェアのデバック1)”の続き。

前回はデバックを行うネットを指定してILAコアを挿入し、インプリメントを行ったがタイミングエラーが発生した。
今回は、クロック間のタイミング制約を設定して、インプリメントを行い、ハードウェアをエクスポートしてSDKを立ち上げる。

・timing.xdc に pclk と clk_fpga_0 間の制約を無視するように、false_path 制約を追加した。
Cam_VDMA_172_140130.png

set_false_path -from [get_clocks pclk] -to [get_clocks clk_fpga_0]


・これでもう一度インプリメントを行ったところ、タイミングエラーは無くなった。
Cam_VDMA_173_140130.png

・timing.xdc には、ILAの制約が入っていた。ILAの制約を下に示す。

create_debug_core u_ila_0 labtools_ila_v3
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_0]
set_property C_ADV_TRIGGER true [get_debug_cores u_ila_0]
set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_0]
set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_0]
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
set_property port_width 1 [get_debug_ports u_ila_0/clk]
connect_debug_port u_ila_0/clk [get_nets [list CamD_VDMA_i/processing_system7_0/FCLK_CLK0]]
set_property port_width 4 [get_debug_ports u_ila_0/probe0]
connect_debug_port u_ila_0/probe0 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARCACHE[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARCACHE[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARCACHE[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARCACHE[3]}]]
create_debug_core u_ila_1 labtools_ila_v3
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_1]
set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_1]
set_property C_ADV_TRIGGER true [get_debug_cores u_ila_1]
set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_1]
set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_1]
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_1]
set_property C_TRIGIN_EN false [get_debug_cores u_ila_1]
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_1]
set_property port_width 1 [get_debug_ports u_ila_1/clk]
connect_debug_port u_ila_1/clk [get_nets [list CamD_VDMA_i/processing_system7_0_FCLK_CLK0]]
set_property port_width 32 [get_debug_ports u_ila_1/probe0]
connect_debug_port u_ila_1/probe0 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[3]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[4]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[5]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[6]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[7]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[8]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[9]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[10]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[11]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[12]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[13]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[14]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[15]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[16]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[17]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[18]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[19]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[20]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[21]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[22]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[23]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[24]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[25]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[26]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[27]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[28]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[29]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[30]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARADDR[31]}]]
create_debug_core u_ila_2 labtools_ila_v3
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_2]
set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_2]
set_property C_ADV_TRIGGER true [get_debug_cores u_ila_2]
set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_2]
set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_2]
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_2]
set_property C_TRIGIN_EN false [get_debug_cores u_ila_2]
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_2]
set_property port_width 1 [get_debug_ports u_ila_2/clk]
connect_debug_port u_ila_2/clk [get_nets [list CamD_VDMA_i/processing_system7_0_FCLK_CLK2]]
set_property port_width 32 [get_debug_ports u_ila_2/probe0]
connect_debug_port u_ila_2/probe0 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[0]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[1]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[2]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[3]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[4]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[5]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[6]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[7]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[8]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[9]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[10]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[11]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[12]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[13]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[14]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[15]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[16]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[17]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[18]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[19]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[20]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[21]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[22]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[23]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[24]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[25]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[26]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[27]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[28]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[29]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[30]} {CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TDATA[31]}]]
create_debug_core u_ila_3 labtools_ila_v3
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_3]
set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_3]
set_property C_ADV_TRIGGER true [get_debug_cores u_ila_3]
set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_3]
set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_3]
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_3]
set_property C_TRIGIN_EN false [get_debug_cores u_ila_3]
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_3]
set_property port_width 1 [get_debug_ports u_ila_3/clk]
connect_debug_port u_ila_3/clk [get_nets [list mt9d111_pclk_IBUF_BUFG]]
set_property port_width 24 [get_debug_ports u_ila_3/probe0]
connect_debug_port u_ila_3/probe0 [get_nets [list {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[0]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[1]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[2]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[3]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[4]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[5]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[6]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[7]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[8]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[9]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[10]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[11]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[12]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[13]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[14]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[15]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[16]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[17]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[18]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[19]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[20]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[21]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[22]} {CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TDATA[23]}]]
create_debug_port u_ila_0 probe
set_property port_width 3 [get_debug_ports u_ila_0/probe1]
connect_debug_port u_ila_0/probe1 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARPROT[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARPROT[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARPROT[2]}]]
create_debug_port u_ila_0 probe
set_property port_width 4 [get_debug_ports u_ila_0/probe2]
connect_debug_port u_ila_0/probe2 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWCACHE[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWCACHE[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWCACHE[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWCACHE[3]}]]
create_debug_port u_ila_0 probe
set_property port_width 3 [get_debug_ports u_ila_0/probe3]
connect_debug_port u_ila_0/probe3 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWPROT[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWPROT[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWPROT[2]}]]
create_debug_port u_ila_0 probe
set_property port_width 2 [get_debug_ports u_ila_0/probe4]
connect_debug_port u_ila_0/probe4 [get_nets [list {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_BRESP[0]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_BRESP[1]}]]
create_debug_port u_ila_0 probe
set_property port_width 2 [get_debug_ports u_ila_0/probe5]
connect_debug_port u_ila_0/probe5 [get_nets [list {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RRESP[0]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RRESP[1]}]]
create_debug_port u_ila_1 probe
set_property port_width 2 [get_debug_ports u_ila_1/probe1]
connect_debug_port u_ila_1/probe1 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARBURST[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARBURST[1]}]]
create_debug_port u_ila_1 probe
set_property port_width 8 [get_debug_ports u_ila_1/probe2]
connect_debug_port u_ila_1/probe2 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[3]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[4]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[5]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[6]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARLEN[7]}]]
create_debug_port u_ila_1 probe
set_property port_width 3 [get_debug_ports u_ila_1/probe3]
connect_debug_port u_ila_1/probe3 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARSIZE[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARSIZE[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARSIZE[2]}]]
create_debug_port u_ila_1 probe
set_property port_width 64 [get_debug_ports u_ila_1/probe4]
connect_debug_port u_ila_1/probe4 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[3]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[4]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[5]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[6]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[7]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[8]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[9]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[10]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[11]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[12]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[13]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[14]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[15]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[16]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[17]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[18]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[19]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[20]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[21]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[22]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[23]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[24]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[25]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[26]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[27]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[28]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[29]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[30]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[31]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[32]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[33]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[34]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[35]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[36]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[37]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[38]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[39]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[40]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[41]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[42]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[43]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[44]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[45]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[46]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[47]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[48]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[49]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[50]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[51]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[52]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[53]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[54]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[55]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[56]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[57]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[58]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[59]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[60]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[61]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[62]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RDATA[63]}]]
create_debug_port u_ila_1 probe
set_property port_width 2 [get_debug_ports u_ila_1/probe5]
connect_debug_port u_ila_1/probe5 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RRESP[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RRESP[1]}]]
create_debug_port u_ila_1 probe
set_property port_width 32 [get_debug_ports u_ila_1/probe6]
connect_debug_port u_ila_1/probe6 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[3]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[4]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[5]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[6]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[7]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[8]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[9]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[10]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[11]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[12]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[13]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[14]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[15]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[16]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[17]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[18]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[19]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[20]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[21]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[22]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[23]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[24]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[25]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[26]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[27]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[28]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[29]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[30]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWADDR[31]}]]
create_debug_port u_ila_1 probe
set_property port_width 2 [get_debug_ports u_ila_1/probe7]
connect_debug_port u_ila_1/probe7 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWBURST[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWBURST[1]}]]
create_debug_port u_ila_1 probe
set_property port_width 8 [get_debug_ports u_ila_1/probe8]
connect_debug_port u_ila_1/probe8 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[3]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[4]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[5]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[6]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWLEN[7]}]]
create_debug_port u_ila_1 probe
set_property port_width 3 [get_debug_ports u_ila_1/probe9]
connect_debug_port u_ila_1/probe9 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWSIZE[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWSIZE[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWSIZE[2]}]]
create_debug_port u_ila_1 probe
set_property port_width 2 [get_debug_ports u_ila_1/probe10]
connect_debug_port u_ila_1/probe10 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_BRESP[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_BRESP[1]}]]
create_debug_port u_ila_1 probe
set_property port_width 32 [get_debug_ports u_ila_1/probe11]
connect_debug_port u_ila_1/probe11 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[3]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[4]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[5]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[6]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[7]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[8]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[9]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[10]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[11]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[12]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[13]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[14]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[15]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[16]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[17]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[18]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[19]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[20]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[21]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[22]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[23]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[24]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[25]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[26]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[27]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[28]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[29]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[30]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WDATA[31]}]]
create_debug_port u_ila_1 probe
set_property port_width 4 [get_debug_ports u_ila_1/probe12]
connect_debug_port u_ila_1/probe12 [get_nets [list {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WSTRB[0]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WSTRB[1]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WSTRB[2]} {CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WSTRB[3]}]]
create_debug_port u_ila_1 probe
set_property port_width 9 [get_debug_ports u_ila_1/probe13]
connect_debug_port u_ila_1/probe13 [get_nets [list {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[0]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[1]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[2]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[3]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[4]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[5]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[6]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[7]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWADDR[8]}]]
create_debug_port u_ila_1 probe
set_property port_width 32 [get_debug_ports u_ila_1/probe14]
connect_debug_port u_ila_1/probe14 [get_nets [list {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[0]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[1]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[2]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[3]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[4]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[5]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[6]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[7]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[8]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[9]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[10]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[11]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[12]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[13]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[14]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[15]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[16]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[17]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[18]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[19]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[20]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[21]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[22]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[23]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[24]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[25]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[26]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[27]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[28]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[29]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[30]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WDATA[31]}]]
create_debug_port u_ila_1 probe
set_property port_width 9 [get_debug_ports u_ila_1/probe15]
connect_debug_port u_ila_1/probe15 [get_nets [list {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[0]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[1]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[2]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[3]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[4]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[5]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[6]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[7]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARADDR[8]}]]
create_debug_port u_ila_1 probe
set_property port_width 32 [get_debug_ports u_ila_1/probe16]
connect_debug_port u_ila_1/probe16 [get_nets [list {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[0]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[1]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[2]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[3]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[4]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[5]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[6]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[7]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[8]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[9]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[10]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[11]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[12]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[13]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[14]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[15]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[16]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[17]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[18]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[19]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[20]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[21]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[22]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[23]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[24]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[25]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[26]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[27]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[28]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[29]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[30]} {CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RDATA[31]}]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe17]
connect_debug_port u_ila_1/probe17 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe18]
connect_debug_port u_ila_1/probe18 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_ARVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe19]
connect_debug_port u_ila_1/probe19 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RLAST]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe20]
connect_debug_port u_ila_1/probe20 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe21]
connect_debug_port u_ila_1/probe21 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_MM2S_RVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe22]
connect_debug_port u_ila_1/probe22 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe23]
connect_debug_port u_ila_1/probe23 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_AWVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe24]
connect_debug_port u_ila_1/probe24 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_BREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe25]
connect_debug_port u_ila_1/probe25 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_BVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe26]
connect_debug_port u_ila_1/probe26 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WLAST]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe27]
connect_debug_port u_ila_1/probe27 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe28]
connect_debug_port u_ila_1/probe28 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXI_S2MM_WVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe29]
connect_debug_port u_ila_1/probe29 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe30]
connect_debug_port u_ila_1/probe30 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_ARVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe31]
connect_debug_port u_ila_1/probe31 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe32]
connect_debug_port u_ila_1/probe32 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_AWVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe33]
connect_debug_port u_ila_1/probe33 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_BREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe34]
connect_debug_port u_ila_1/probe34 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_BVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe35]
connect_debug_port u_ila_1/probe35 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe36]
connect_debug_port u_ila_1/probe36 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_RVALID]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe37]
connect_debug_port u_ila_1/probe37 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WREADY]]
create_debug_port u_ila_1 probe
set_property port_width 1 [get_debug_ports u_ila_1/probe38]
connect_debug_port u_ila_1/probe38 [get_nets [list CamD_VDMA_i/processing_system7_0_axi_periph_M00_AXI_WVALID]]
create_debug_port u_ila_2 probe
set_property port_width 1 [get_debug_ports u_ila_2/probe1]
connect_debug_port u_ila_2/probe1 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TLAST]]
create_debug_port u_ila_2 probe
set_property port_width 1 [get_debug_ports u_ila_2/probe2]
connect_debug_port u_ila_2/probe2 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TREADY]]
create_debug_port u_ila_2 probe
set_property port_width 1 [get_debug_ports u_ila_2/probe3]
connect_debug_port u_ila_2/probe3 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TUSER]]
create_debug_port u_ila_2 probe
set_property port_width 1 [get_debug_ports u_ila_2/probe4]
connect_debug_port u_ila_2/probe4 [get_nets [list CamD_VDMA_i/axi_vdma_0_M_AXIS_MM2S_TVALID]]
create_debug_port u_ila_2 probe
set_property port_width 1 [get_debug_ports u_ila_2/probe5]
connect_debug_port u_ila_2/probe5 [get_nets [list CamD_VDMA_i/custom_vtc_0_vtg_sync]]
create_debug_port u_ila_3 probe
set_property port_width 1 [get_debug_ports u_ila_3/probe1]
connect_debug_port u_ila_3/probe1 [get_nets [list CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TLAST]]
create_debug_port u_ila_3 probe
set_property port_width 1 [get_debug_ports u_ila_3/probe2]
connect_debug_port u_ila_3/probe2 [get_nets [list CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TREADY]]
create_debug_port u_ila_3 probe
set_property port_width 1 [get_debug_ports u_ila_3/probe3]
connect_debug_port u_ila_3/probe3 [get_nets [list CamD_VDMA_i/mt9d111_inf_axi_stream_0_m_axis_TVALID]]
create_debug_port u_ila_3 probe
set_property port_width 1 [get_debug_ports u_ila_3/probe4]
connect_debug_port u_ila_3/probe4 [get_nets [list CamD_VDMA_i/mt9d111_inf_axi_stream_0_s2mm_fsync]]
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]


次にハードウェアをエクスポートして、SDKを立ち上げる。

必ず Sourcesウインドウから、CamD_VDMA_i(IP Integrator の Diagramファイル)を開いてから、CamD_VDMA_i を右クリックし、右クリックメニューから Export Hardware for SDK... を選択した。
Cam_VDMA_174_140129.png

・Export Hardware for SDKダイアログが表示された。Launch SDKにチェックを入れて、OKボタンをクリックした。
Cam_VDMA_175_140129.png

・SDKが立ち上がった。
Cam_VDMA_177_140129.png

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製15(ハードウェアのデバック3)”に続く。
  1. 2014年01月31日 04:32 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製13(ハードウェアのデバック1)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製12(実機でテスト)”の続き。

前回、ディスプレイが真っ暗だったので、Vivado Logic Analyzer でデバックしてみることにした。
なお、”IP インテグレーターを使用した IP サブシステムの設計 UG994 (v2013.4) 2013 年 12 月 18 日”の61ページからの”第 4 章 IP インテグレーター デザインのデバッグ"を参考にした。

・Sourcesウインドウから、CamD_VDMA_wrapper を展開して、CamD_VDMA_iのDiagramを表示させた。

・axi_vdma_0 の S_AXIS_S2MM からのネットをクリックして、右クリックし、右クリックメニューからMark Debugを選択する。
Cam_VDMA_144_140128.png

・axi_vdma_0 の S_AXIS_S2MM からのネットに緑色のデバックマークが付いた。
Cam_VDMA_145_140128.png

・axi_vdma_0 の M_AXI_MM2S, M_AXI_S2MM, M_AXIS_MM2S, mm2s_fsync, 2smm_fsync のネットにMark Debug を行った。
Cam_VDMA_146_140128.png

・Flow Navigator のIP Integrator -> Generate Block Design をクリックした。
Cam_VDMA_147_140128.png

・Generte Output Products ダイアログが表示された。Generate ボタンをクリックした。
Cam_VDMA_148_140128.png

・IP Integrator の生成が終了した。

・Flow Navigator の Synthesis -> Run Synthesis をクリックして、論理合成をスタートした。
Cam_VDMA_69_140115.png

・論理合成が終了し、ダイアログが表示された。Open Synthesized Design のラジオボタンをクリックして、OKボタンをクリックした。
Cam_VDMA_70_140115.png

・Synthesized Design が表示された。Schematic をクリックした。
Cam_VDMA_149_140129.png

・Schematic が表示された。
Cam_VDMA_150_140129.png

・Window メニューからDebug を選択した。
Cam_VDMA_151_140129.png

・Debug は左上のウインドウに表示されたが、下のウインドウに移動した。
Cam_VDMA_152_140129.png

・Debugウインドウの Set up Debug アイコンをクリックしてDebug ウィザートを実行する。
Cam_VDMA_153_140129.png

・Set up Debugダイアログが表示された。Next >ボタンをクリックした。
Cam_VDMA_154_140129.png

・Debug を行うネットが出てくるが、ところどころClock Domain がundefined になっているので、FCLK_CLK0を指定する。GNDやVCCへ接続されている信号なのだが一応クロックを指定しておく。
Cam_VDMA_155_140129.png

・undefined のネットをすべて選択し、右クリックメニューからSelect Clock Domain を選択した。
Cam_VDMA_156_140129.png

・Select Clock Domain ダイアログが表示された。FCLK_CLK0 を選択して、OKボタンをクリックした。
Cam_VDMA_157_140129.png

・undefined のネットに、FCLK_CLK0を割り当てた。次の2つの undefined のネットもやってしまっているので、エラーが無くなっている。
Cam_VDMA_158_140129.png

・あと2つ、undefined のネットがあったので、FCLK_CLK0 を割り当てた。Next >ボタンをクリックした。
Cam_VDMA_159_140129.png

・Enable advanced trigger mode と Enable basic capture mode のチェックボックにチェックを入れた。
Cam_VDMA_160_140129.png

・Summary が表示されたので、Finish ボタンをクリックした。
Cam_VDMA_161_140129.png

・ILAコアが挿入されて、Debug画面が変わった。
Cam_VDMA_162_140129.png

・ビットストリームを生成する。
Cam_VDMA_163_140129.png

・Save Project ダイアログが表示された。Save ボタンをクリックした。
Cam_VDMA_164_140129.png

・インプリメントをやるかどうか聞いてきた。Yesボタンをクリックした。
Cam_VDMA_165_140129.png

・約3時間かかって、インプリメントが終了した。クリティカル・ワーニングが出ていた。
Cam_VDMA_166_140129.png

・クリティカル・ワーニングはタイミングなので、Timing Summary を表示させる。Report Timing Summary をクリックした。
Cam_VDMA_167_140129.png

・Report Timing Summary ダイアログが表示された。そのままOKボタンをクリックした。
Cam_VDMA_168_140129.png

・Timing Summary が表示された。やはりエラーが出ていた。
Cam_VDMA_169_140129.png

・clk_fpga_0 のタイミングエラーは ILAコアでのタイミングエラーだった。
Cam_VDMA_170_140129.png

・pclk to clk_fpga_0 のタイミングエラーも ILAコアでのタイミングエラーだった。
Cam_VDMA_171_140129.png

タイミングエラーはすべて、ILAコアでのタイミングエラーなので、無視することにした。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製14(ハードウェアのデバック2)”に続く。
  1. 2014年01月29日 05:33 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製12(実機でテスト)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製11(ハードウェアのエクスポート)”の続き。

・SDKで cam_disp_vdma プロジェクトを作り、cam_disp_vdma.c を作製した。作製時のAXI VDMAのレジスタ設定は、”AXI VDMAのレジスタ設定(Triple Frame Buffer)”の通りに行った。
Cam_VDMA_137_140127.png

ビットストリームをZedBoardにダウンロードする。

・ZedBoardの電源をONにする。

・ダウンロード・ケーブルをZedBoard に接続した。

・Xilinx Tools メニューからProgram FPGA を選択した。
Cam_VDMA_138_140127.png

・Program FPGA ダイアログが開く。Bitstream: の右側の Browse... ボタンをクリックし、CamD_VDMA\CamD_VDMA.runs\impl_1フォルダの CamD_VDMA_wrapper.bit を選択した。

・Program FPGA ボタンをクリックする。
Cam_VDMA_139_140127.png

Run Configuration を作製する。

・Project Exprlor から cam_disp_vdma を右クリックし、右クリックメニューから Run As -> Run Configuration を選択する。
Cam_VDMA_140_140127.png

・Run Configurations ダイアログが表示される。Xilinx C/C++ application (GDB) を右クリックし、右クリックメニューからNew を選択する。
Cam_VDMA_141_140127.png

・Run Configurations ダイアログに cam_disp_vdma Debug が作製されて、Runボタンをクリックする。
Cam_VDMA_142_140127.png

・プログラムが起動されたが、ディスプレイは真っ暗だった。ダメだ。動作しない
Cam_VDMA_143_140128.jpg

ホコリだらけのディスプレイで申し訳ない。次は、ChipScope AXI Monitor を入れてデバックすることにする。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製13(ハードウェアのデバック1)”に続く。
  1. 2014年01月28日 05:58 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

筑波山登山トレーニングに行ってきました

昨日の午後から家の奥さんと筑波山登山トレーニングに行ってきました。

神郡の市営駐車場に車を止めて、つくば道を歩いて筑波山神社まで走って行きましたと言いたいところですが、途中が急坂なので、途中から歩いちゃいました。奥さんは余裕で走れたみたいですが、歩くのに付き合ってくれました。
筑波山神社から迎場コースでつつじヶ丘まで行きました。やはり、登りは走れずに歩きで行きました。やはり、奥さんは走って登れそうです。やはり、トレランの修行を積んでいるだけあって違いますね。。。
つつじヶ丘に着いたら、スポーツドリンクを飲んで休憩。それから同じ道を戻りました。山道を駆け下るのは足に来ますね。。。まあ何とか、筑波山神社まで戻ってきました。それからまたつくば道を駆け下りましたが、もう足が持たなくなってきて、最後は歩きでした。でも、結構楽しかったです。違うルートも行ってみたいですね。

タイムは1時間41分、距離は8.54km、最低高度24m、最高高度536mでした。

ガーミンのランナー用GPSトレーナーForeAthlete 10Jを持っているので、ガーミン・コネクトで走った記録を管理できます。筑波山登山トレーニングの情報をプライベートから公開に変更したので見てみて下さい。
tukuba_training_140127.jpg
  1. 2014年01月26日 21:51 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

AXI VDMAのレジスタ設定(Triple Frame Buffer)

AXI VDMAを Triple Frame Buffer (LogiCORE IP AXI Video Direct Memory Access v6.1Product Guide for Vivado Design Suite PG020 December 18, 2013の65ページ)の設定値に設定する際のAXI VDMAのレジスタ設定値の覚書を書いておく。

Triple Frame Bufferのレジスタ設定( SVGA画面(800ピクセル x 600ライン)、フレーム・バッファのアドレスは0x10000000から)

オフセット0x00 – 0x8B : MM2S_DMACR

GenlockSrc : 1 = Internal Genlock
GenlockEn : 1 = Genlock or Dynamic Genlock Synchronization enabled. MM2S synchronized to Genlock frame input.
Circular_Park : 1 = Circular Mode – Engine continuously circles through MM2S_FRMSTORE frame buffers.
RS : 1 = Run – Start VDMA operations.
オフセット0x5C – 0x10000000 : MM2S_START_ADDRESS1
オフセット0x60 – 0x10200000 : MM2S_START_ADDRESS2
オフセット0x64 – 0x10400000 : MM2S_START_ADDRESS3
オフセット0x58 – 0xc80 : MM2S_FRMDLY_STRIDE
Stride(Bytes) : 0xc80 (3200Bytes, 800Words)
オフセット0x54 – 0xc80 : MM2S_HSIZE
Horizontal Size(Bytes) : 0xc80 (3200Bytes, 800Words)
オフセット0x50 – 0x258 : MM2S_VSIZE
Vertical Size(Lines) : 0x258 (600Lines)
オフセット0x30 – 0x3 :
Circular_Park : 1 = Circular Mode – Engine continuously circles through MM2S_FRMSTORE frame buffers.
RS : 1 = Run – Start VDMA operations.
オフセット0xac – 0x10000000 : S2MM_START_ADDRESS1
オフセット0xb0 – 0x10200000 : S2MM_START_ADDRESS2
オフセット0xb4 – 0x10400000 : S2MM_START_ADDRESS3
オフセット0xa8 – 0xc80 : S2MM_FRMDLY_STRIDE
Stride(Bytes) : 0xc80 (3200Bytes, 800Words)
オフセット0xa4 – 0xc80 : S2MM_HSIZE
Horizontal Size(Bytes) : 0xc80 (3200Bytes, 800Words)
オフセット0xa0 – 0x258 : S2MM_VSIZE
Vertical Size(Lines) : 0x258 (600Lines)

  1. 2014年01月25日 08:31 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI IIC v2.0 を使用した時のIOBUF

今回は、一時今やっているシリーズを離れて、”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製3”で使用した iic_3state_buf について書いておこうと思う。更に、ikwzm さんに教えてもらった方法についてもやってみることにする。

AXI IICは、Xilinx社のI2CインターフェースのAXIバス用のIPである。このIPのI2Cの出力がIICバス出力で、トライステート・バッファが付いていない状態になっている。詳しくは、”LogiCORE IP AXI IIC Bus Interface v2.0 Product Guide for Vivado Design Suite PG090 December 18, 2013”を参照のこと。今回は、AXI IIC v2.0 のIICバス出力にインターフェース出来るIICバス入力のトライステート・バッファを作る。

iic_3state_bufプロジェクトをVivado 2013.4で作製して、iic_3state_buf.v を書いた。下に、Vivado 2013.4のプロジェクトを示す。
iic_3state_buf_1_140124.png

iic_3state_buf.v を示す。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2014/01/18 20:31:13
// Design Name:
// Module Name: iic_3state_buf
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////

`default_nettype none

module iic_3state_buf(
    output  wire    sda_i,
    input   wire    sda_o,
    input   wire    sda_t,
    output  wire    scl_i,
    input   wire    scl_o,
    input   wire    scl_t,
    inout   wire    sda,
    inout   wire    scl
);
    assign sda = (sda_t==1'b1) ? 1'bz : sda_o;
    assign sda_i = sda;
    assign scl = (scl_t==1'b1) ? 1'bz : scl_o;
    assign scl_i = scl;
endmodule

`default_nettype wire


簡単なコードだ。

これを、IP化した。入力は、interface_iic として定義した。
iic_3state_buf_2_140124.png

ワーニングが10個出ているが、大丈夫のようだ?
これで、CamD_VDMA で使用している iic_3state_buf が出来た。(IPとして生成しています)

(2014/02/03:追記 上のiic_3state_buf IPでは、AXI IICの外部ポートがうまくインプリメントできなかったです。下のikwzm さんに教えてもらった手順を行うことを強くお勧めします)詳しくは、”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製15(ハードウェアのデバック3)”参照。

次に、ikwzm さんに教えてもらった手順を以下に示す。

1) Open Block Design で該当するデザインを開く.

2) AXI_IICのインスタンスのIICポートを右クリックして、Make Externalをクリックして IIC を外部端子とする

3)Souces窓の .bd ファイルを右クリックして Create HDL Wrapper...をクリック.

4) Let Vivado manager wrapper and auto-update を選択.

こうして生成したラッパーファイルには IIC の入出力ポートに 双方向のIOBUF が追加されています。

追記)Project Setting で Top module name を生成したラッパーファイルに変更するのを忘れずに.


ikwzmさん、度々教えて頂いて、ありがとうございます。

さて、新規プロジェクトを作製してやってみよう。
iic_3state_buf_3_140124.png

因みに、S_AXIポートやIICポートを作製する際には、右クリックメニューから、Create Interface Port... を選択して、インターフェース・ポートを作製した。

design_1_i の右クリックメニューから、Create HDL Wrapper...を行って、ラッパーファイルを作ったら、IOBUFがインスタンスされていた。
iic_3state_buf_4_140124.png

見事に、IOBUFがインスタンスされていた。

この方法がオフィシャルな方法なのかもしれないが、やはり自分でIOBUFのIPを作ったほうが、IP Integrator で完結しているので、自分の好みにあっている。自作IOBUF IPを使用しようと思う。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製12(実機でテスト)”に続く。
  1. 2014年01月24日 04:27 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製11(ハードウェアのエクスポート)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製10(IPの更新)”の続き。

まだ、インプリメント終了、ビットストリーム生成後のことを書いていなかったので書こうと思う。

論理合成、インプリメント、ビットストリーム生成が終わった後のプロジェクト。
Cam_VDMA_124_140122.png

Utilization は、LUTで11%使用しているそうだ。
Cam_VDMA_125_140122.png

次には、ハードウェアをエクスポートしてSDKを立ち上げる。

・Fileメニューから Export -> Export Hardware for SDK... を選ぶ。
Cam_VDMA_126_140122.png

・PlanAhaedの時に、エクスポート・フォルダが怪しかったので、Export to のフォルダを指定した。Workspace のフォルダを指定はこれからする。
Cam_VDMA_127_140122.png

・CamD_VDMA -> CamD_VDMA.sdk -> SDK -> SDK_Export を指定した。
Cam_VDMA_128_140122.png

・Launch SDK にチェックを入れて、OKボタンをクリックした。
Cam_VDMA_129_140122.png

・そうしたらエラーが発生した。
Cam_VDMA_130_140122.png

エラーは、”ERROR: [Common 17-39] 'export_hardware' failed due to earlier errors.”だった。ネットでぐぐってみると、”ERROR: [Common 17-39] 'export_hardware' failed due to earlier errors.”が見つかった。

見ても普通のインプリメント手順をやれとしか書いていないが。。。あ、そう言えば、自作カスタムIPを変更してから、Generate Output Products... をやってなかった。もしかして、インプリメントしなくても Generate Output Products... をやればハードウェアをエクスポートすることが出来るんじゃないだろうか?アドレス情報くらいをSDK に渡せば良いのだと思う。
2014/01/30 追記:CamD_VDMA_i のダイアグラム(IP配線図)を開いておいて、Export Hardware for SDK... を選択すれば良いようだ。”Problems with webpack license for ZC702 dev kit”)

・Sourcesウインドウで、CamD_VDAM_i を選択して、右クリックし、右クリックメニューから Generate Output Products... を選択する。
Cam_VDMA_131_140122.png

・Generate Output Productsダイアログが表示された。Generate ボタンをクリックする。
Cam_VDMA_132_140122.png

・Generate Output Productsが終了した。この時は、Synthesis, Implementation とも Out-of-date になっていた。

・Sourcesウインドウで、CamD_VDAM_i を選択して、右クリックし、右クリックメニューから Export Hardware of SDK... を選択する
Cam_VDMA_133_140122.png

・もう一度、Export Hardware of SDKダイアログが表示された。今度は、フォルダの指定はデフォルトのまま、Launch SDKだけチェックを入れてOKボタンをクリックした。
Cam_VDMA_134_140122.png

・生成してい途中のダイアログが出て、終了した。
Cam_VDMA_135_140122.png

・やった。SDK立ち上がりました。
Cam_VDMA_136_140122.png

ハードウェアもエクスポートされていた。

・その後、もう一度、論理合成、インプリメント、ビットストリームの生成を行った。
  1. 2014年01月23日 05:14 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製10(IPの更新)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製9(False Pathの設定)”の続き。

IP Integrator でIPを接続して回路を作っているが、自作カスタムIP自体の回路を変更したいときに、自作カスタムIPのブロジェクトでIPを再生成しても、すでに作製済みのIP Integrator のBlock Design では変更されていなかった。自作カスタムIP自体の回路を変更した時に、すでに作製済みのIP Integrator のBlock Design に反映させる方法を探ってみた。

具体的には、”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製8(Propertiesの検証)”で、HDMI関係の信号は、出力のレジスタの論理が複雑だからか?”IOB=FORCE”になっていてもIOBのレジスタにマップされていなかった。video_out_zed プロジェクトを立ちあげて、video_out_zed.v のHDMI関連信号の出力ポートを wire から reg に変更してFFを付加したが、IPを再生成してから、CamD_VDMAを再度論理合成、インプリメントしても同じ状況だった。video_out_zed.v の変更点を下に示す。

// XPS のIP、v_axi4s_vid_out のVideo出力を受けてVGAポートとHDMI出力に出力する
// video_out_zed.v
// 2013/06/09
//

`default_nettype none

module video_out_zed # (
    parameter  VIDEO_DATA_WIDTH = 24
) (
    input    wire    pixclk,            // pixel clock
    input    wire    aresetn,        // AXI reset
    input    wire    video_de,    // data enable
    input    wire    video_hsync,
    input    wire    video_vsync,
    input    wire    video_vblank,
    input    wire    video_hblank,
    input    wire    [VIDEO_DATA_WIDTH-1:0]    video_data,

    (* IOB = "FORCE" *) output    reg     [3:0]    vga_red,
    (* IOB = "FORCE" *) output    reg     [3:0]    vga_green,
    (* IOB = "FORCE" *) output    reg     [3:0]    vga_blue,
    (* IOB = "FORCE" *) output    reg        vga_hsync,
    (* IOB = "FORCE" *) output    reg        vga_vsync,

    output    wire    hdmi_clk,    // 下のモジュールで ODDR プリミティブを宣言してあるので、wire宣言のままとした
    (* IOB = "FORCE" *) output    reg     hdmi_vsync,
    (* IOB = "FORCE" *) output    reg     hdmi_hsync,
    (* IOB = "FORCE" *) output    reg     hdmi_data_e,
    (* IOB = "FORCE" *) output    reg     [15:0]    hdmi_data
);

    reg        reset_1b, reset;
    reg        [7:0]    red, green, blue;
    reg        hsyncx, vsyncx;
    wire    hdmi_vs, hdmi_hs;
    wire    hdmi_de;
    wire    [15:0]    hdmi_d;

// 途中は略

    always @(posedge pixclk) begin
       if(reset) begin
            hdmi_vsync    <= 1'b1;
            hdmi_hsync    <= 1'b1;
            hdmi_data_e <= 1'b0;
            hdmi_data    <= 16'd0;
       end else begin
            hdmi_vsync    <= hdmi_vs;
            hdmi_hsync    <= hdmi_hs;
            hdmi_data_e    <= hdmi_de;
            hdmi_data    <= hdmi_d;
       end
    end

endmodule

`default_nettype wire


つまり、IOポートの宣言の所で、wire 宣言だったHDMI関連の出力信号を reg 宣言にして、Flip Flopを記述したわけだ。これで、インプリメントしたつもりが、以前と同様の回路になってしまっていたわけだ。
Cam_VDMA_110_140120.png

さて、自作カスタムIPの回路を修正して、すでに作製済みのIP Integrator のBlock Design に反映させる方法を紹介しよう。うまくいくかどうか分からなかったため、要点だけの画面キャプチャとなっているので、ご了承願いたい。

・まずは、Sourcesウインドウから CamD_VDMA_i のDiagram を起動する。(IP Integrator)

・video_out_zed_0 を選択して、右クリックし、右クリックメニューから Edit IP Packager を選ぶ。
Cam_VDMA_119_140121.png

・video_out_zedプロジェクトに、video_out_zed_v1_0_projectを作製するというダイアログが出てくる。確かOKボタンをクリックした。

・もう1つ、video_out_zed プロジェクトの Vivado 2013.4が立ちあげて、IPを編集することが出来た。
Cam_VDMA_120_140121.png

・HDLソースを修正して、Review and Package で Re-Package IP ボタンをクリックした。
Cam_VDMA_121_140121.png

・video_out_zed 自作カスタムIPが再度生成されたようだ。確か、video_out_zed_v1_0_projectのVivado 2013.4 は自動的に閉じられたと思う。

・これで、CamD_VDMAプロジェクトに戻って、論理合成、インプリメントを行うと、video_out_zed.v の変更内容が反映されていた。

下に、hdmi_data[0]ポートを示す。OLOGICにレジスタがマップされているのがわかる。
Cam_VDMA_122_140122.png

OLOGIC にマップされている hdmi_data_reg[0] のプロパティを見ると、FORCE 属性が設定されているのが見える。
Cam_VDMA_123_140122.png

Vivado 2013.4 では、IOBの FORCE 属性は付加することはできるが、IOポートの信号の宣言が wire の場合は効かない気がする。因みに、PlanAhead で作ったカメラ表示回路では、IOポートの信号の宣言が wire の場合でもOLOGIC にレジスタがマップされていた。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製11(ハードウェアのエクスポート)”の続く。
  1. 2014年01月22日 04:45 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製9(False Pathの設定)

”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製8(Propertiesの検証)”の続き。

今回は、タイミングエラーが出たので、False Path を設定して、タイミング制約をかけないパスを指定する。なお、クロック間にFalse Path を指定するが、クロック間の乗り換えは2段FFでインターフェースしてあるので問題ないはずだ。

・Flow Navigator -> Synthesis -> Edit Timing Constraints をクリックする。

・Timing Constraintsウインドウで、Exception -> SetFalse Path をクリックして、Set False Path 画面をダブルクリックする。
Cam_VDMA_111_140121.png

・Set False Pathウインドウが開く。Start Points のFrom の脇の ... ボタンをクリックする。
Cam_VDMA_112_140121.png

・Choose Start Points ダイアログが表示された。Find name of type で clocks を選択し、Findボタンをクリックする。

・Find results にクロックが表示されるので、clk_fpga_0 を選択して、右向き矢印をクリックした。

・OKボタンをクリックした。
Cam_VDMA_113_140121.png

・次に、End Points のFrom の脇の ... ボタンをクリックする。
Cam_VDMA_114_140121.png

・Choose End Points ダイアログが表示された。Find name of type で clocks を選択し、Findボタンをクリックする。

・Find results にクロックが表示されるので、clk_fpga_2 を選択して、右向き矢印をクリックした。

・OKボタンをクリックした。
Cam_VDMA_115_140121.png

・Start PointとEnd Point が入ったので、OKボタンをクリックした。
Cam_VDMA_116_140121.png

・Timing Constraints ウインドウに、clk_fpga_0 から clk_fpga_2 への False Path が設定できた。
Cam_VDMA_117_140121.png

・次に、clk_fpga_0 から pclk への False Path も設定した。
Cam_VDMA_118_140121.png

・セーブを行い、timing.xdc を観察した。記述内容を下に示す。

create_clock -period 28.000 -name pclk -waveform {0.000 14.000} [get_ports mt9d111_pclk]
set_input_delay -clock [get_clocks pclk] -rise 11.000 [get_ports {mt9d111_cam_data[0] mt9d111_cam_data[1] mt9d111_cam_data[2] mt9d111_cam_data[3] mt9d111_cam_data[4] mt9d111_cam_data[5] mt9d111_cam_data[6] mt9d111_cam_data[7] mt9d111_href mt9d111_pclk mt9d111_vsync}]

set_false_path -from [get_clocks clk_fpga_0] -to [get_clocks clk_fpga_2]
set_false_path -from [get_clocks clk_fpga_0] -to [get_clocks pclk]


Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製10(IPの更新)”に続く。
  1. 2014年01月21日 05:20 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製8(Propertiesの検証)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製7(インプリメント)”の続き。

今回は、HDLに記述した制約(Properties)がどうなっているか検証した。

Propertiesは、IOブロックのレジスタに割り当てたいレジスタを下のVerilog HDL記述のように書いてある。つまり、ポート宣言の前に、”(* IOB = "FORCE" *)”を追加してあるのだ。

module video_out_zed # (
    parameter  VIDEO_DATA_WIDTH = 24
) (
    input    wire    pixclk,            // pixel clock
    input    wire    aresetn,        // AXI reset
    input    wire    video_de,    // data enable
    input    wire    video_hsync,
    input    wire    video_vsync,
    input    wire    video_vblank,
    input    wire    video_hblank,
    input    wire    [VIDEO_DATA_WIDTH-1:0]    video_data,

    (* IOB = "FORCE" *) output    reg     [3:0]    vga_red,
    (* IOB = "FORCE" *) output    reg     [3:0]    vga_green,
    (* IOB = "FORCE" *) output    reg     [3:0]    vga_blue,
    (* IOB = "FORCE" *) output    reg        vga_hsync,
    (* IOB = "FORCE" *) output    reg        vga_vsync,

    (* IOB = "FORCE" *) output    wire    hdmi_clk,
    (* IOB = "FORCE" *) output    wire    hdmi_vsync,
    (* IOB = "FORCE" *) output    wire    hdmi_hsync,
    (* IOB = "FORCE" *) output    wire    hdmi_data_e,
    (* IOB = "FORCE" *) output    wire    [15:0]    hdmi_data
);


この記述は、Vivado でも大丈夫かもしれないということでインプリメントを行った。しかし、”Vivado Design Suite Properties Reference Guide UG912 (v2013.4) December 20, 2013”には、IOB = TRUEとIOB=FALSE(94ページ)しか載っていなかった。果たして大丈夫なのかと思っていたのだが、大丈夫だったみたいだ。
下に、vga_blue_reg[0] を示す。IOBはFORCE 属性が付いていて、OLOGICのレジスタに割り当てられていた。
Cam_VDMA_109_140120.png

だが、HDMI関係の信号は、出力のレジスタの論理が複雑だからか?”IOB=FORCE”になっていてもIOBのレジスタにマップされていなかった。
Cam_VDMA_110_140120.png

HDMI関係の出力信号は、output wire で宣言してあるからかもしれない。output reg で宣言して見ようと思う。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製9(False Pathの設定)”に続く。
  1. 2014年01月20日 18:43 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製7(インプリメント)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製6(配置制約)”の続き。

今回は、論理合成、インプリメント、ビットストリームの生成を行った。

・Flow Navigator のProgram and Debug -> Generate Bitstream をクリックして、論理合成、インプリメント、ビットストリームの生成を行った。

・論理合成、インプリメント、ビットストリームの生成が終了した。
Cam_VDMA_101_140120.png

・critical warning が1つあるので、見てみると

[Route 35-39] The design did not meet timing requirements. Please run report_timing_summary for detailed reports.

でタイミングが制約と合っていないようだ。

・Flow Navigator のImplementation から Report Timing Summary をクリックしてタイミングを見てみよう。
Cam_VDMA_102_140120.png

・Report Timing Summary ダイアログが表示された。デフォルト値のまま、OKボタンをクリックする。
Cam_VDMA_103_140120.png

・下に Timing ウインドウが表示された。
Cam_VDMA_104_140120.png

・Inter-Clock Paths の clk_fpga_0 to clk_fpga_2 と clk_fpga_0 to pclk が赤い。更に、Other Path Groups -> **asyc_default** -> clk_fpga_0 to clk_fpga_2 が赤くなっている。
Cam_VDMA_105_140120.png

・Inter-Clock Paths の clk_fpga_0 to clk_fpga_2 は、出力用ピクセルクロックで動作する video_out_zed_0 モジュールに、AXIバスのリセットを入れたのが問題のようだ。
Cam_VDMA_106_140120.png

・下のように、aresetn は同期化処理をしてある。以前修正したのだが、修正がされていないのかな?

	// synchronization of reset_1b
always @(posedge pixclk) begin
reset_1b <= ~aresetn;
reset <= reset_1b;
end


・Inter-Clock Paths の clk_fpga_0 to pclk は、init_done に関連するものだった。
Cam_VDMA_107_140120.png

・init_done も同様に、同期化処理をしてある。

    -- ARESETN をACLK で同期化
process (ACLK) begin
if ACLK'event and ACLK='1' then
reset_1d <= not ARESETN or not init_done;
reset_2d <= reset_1d;
end if;
end process;
reset <= reset_2d;

-- ARESETN をpclk で同期化
process(pclk) begin
if pclk'event and pclk='1' then
preset_1d <= not ARESETN or not init_done;
preset_2d <= preset_1d;
end if;
end process;
preset <= preset_2d;


・Other Path Groups -> **asyc_default** -> clk_fpga_0 to clk_fpga_2 は、custom_axi4s_video_0 の aresetn がまずいようだ。
Cam_VDMA_108_140120.png

・これも、非同期FIFOでリセットの同期化処理をONにしているので、大丈夫なはずなんだけど。。。

	// video_fifo のインプリメント
video_fifo video_fifo_i (
.rst(~aresetn), // input rst
.wr_clk(aclk), // input wr_clk
.rd_clk(video_clk), // input rd_clk
.din(s_axis_video_tdata), // input [31 : 0] din
.wr_en(s_axis_video_tvalid & s_axis_video_tready), // input wr_en
.rd_en(vtg_act_vid), // input rd_en
.dout(video_data), // output [31 : 0] dout
.full(vfifo_full), // output full
.almost_full(vfifo_almost_full), // output almost_full
.overflow(vfifo_overflow), // output overflow
.empty(vfifo_empty), // output empty
.almost_empty(vfifo_almost_empty), // output almost_empty
.underflow(vfifo_underflow) // output underflow
);


次回は、これらにTIG制約を掛けてみよう。video_out_zed_0 IP は再生成してみる。

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製8(Propertiesの検証)”に続く。
  1. 2014年01月20日 04:42 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製6(配置制約)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製5(タイミング制約)”の続き。

今回はIOピンの配置とIOSTANDARD、できれば、FFのIOBへの配置を成約する。

・まずは、location.xdc を作製した。(手抜きした、作製の手順は、”Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製4”を参照)
Cam_VDMA_94_140118.png

・黄色のワーニングが出てきたので、Reloadをクリックして、Synthesized Design を開き直した。

・下のIOポートで、IOポートの配置を成約する。最初は、mt9d111_pclk を制約した。

・I/O Std を LVCMOS33 に変更して、mt9d111_pclk を上のPackage のPin にドラック&ドロップして配置を決定した。
Cam_VDMA_95_140118.png

・すべてのピン配置を固定して、IOSTANDARDを固定した。
Cam_VDMA_100_140119.png

・timing.xdc を下に示す。

create_clock -period 28.000 -name pclk -waveform {0.000 14.000} [get_ports mt9d111_pclk]
set_input_delay -clock [get_clocks pclk] -rise 11.000 [get_ports {mt9d111_cam_data[0] mt9d111_cam_data[1] mt9d111_cam_data[2] mt9d111_cam_data[3] mt9d111_cam_data[4] mt9d111_cam_data[5] mt9d111_cam_data[6] mt9d111_cam_data[7] mt9d111_href mt9d111_pclk mt9d111_vsync}]


・location.xdc を下に示す。

set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_red[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[15]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[14]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[13]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[12]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_data[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {mt9d111_cam_data[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_pclk]
set_property PACKAGE_PIN AA9 [get_ports mt9d111_pclk]
set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_standby]
set_property PACKAGE_PIN Y10 [get_ports mt9d111_standby]
set_property PACKAGE_PIN V13 [get_ports {hdmi_data[15]}]
set_property PACKAGE_PIN V14 [get_ports {hdmi_data[14]}]
set_property PACKAGE_PIN U17 [get_ports {hdmi_data[13]}]
set_property PACKAGE_PIN V15 [get_ports {hdmi_data[12]}]
set_property PACKAGE_PIN W15 [get_ports {hdmi_data[11]}]
set_property PACKAGE_PIN W13 [get_ports {hdmi_data[10]}]
set_property PACKAGE_PIN Y15 [get_ports {hdmi_data[9]}]
set_property PACKAGE_PIN AA17 [get_ports {hdmi_data[8]}]
set_property PACKAGE_PIN AB17 [get_ports {hdmi_data[7]}]
set_property PACKAGE_PIN AA16 [get_ports {hdmi_data[6]}]
set_property PACKAGE_PIN AB16 [get_ports {hdmi_data[5]}]
set_property PACKAGE_PIN AB15 [get_ports {hdmi_data[4]}]
set_property PACKAGE_PIN Y14 [get_ports {hdmi_data[3]}]
set_property PACKAGE_PIN AA14 [get_ports {hdmi_data[2]}]
set_property PACKAGE_PIN AA13 [get_ports {hdmi_data[1]}]
set_property PACKAGE_PIN Y13 [get_ports {hdmi_data[0]}]
set_property SLEW FAST [get_ports {hdmi_data[15]}]
set_property SLEW FAST [get_ports {hdmi_data[14]}]
set_property SLEW FAST [get_ports {hdmi_data[13]}]
set_property SLEW FAST [get_ports {hdmi_data[12]}]
set_property SLEW FAST [get_ports {hdmi_data[11]}]
set_property SLEW FAST [get_ports {hdmi_data[10]}]
set_property SLEW FAST [get_ports {hdmi_data[9]}]
set_property SLEW FAST [get_ports {hdmi_data[8]}]
set_property SLEW FAST [get_ports {hdmi_data[7]}]
set_property SLEW FAST [get_ports {hdmi_data[6]}]
set_property SLEW FAST [get_ports {hdmi_data[5]}]
set_property SLEW FAST [get_ports {hdmi_data[4]}]
set_property SLEW FAST [get_ports {hdmi_data[3]}]
set_property SLEW FAST [get_ports {hdmi_data[2]}]
set_property SLEW FAST [get_ports {hdmi_data[1]}]
set_property SLEW FAST [get_ports {hdmi_data[0]}]
set_property SLEW FAST [get_ports {vga_blue[3]}]
set_property SLEW FAST [get_ports {vga_blue[2]}]
set_property SLEW FAST [get_ports {vga_blue[1]}]
set_property SLEW FAST [get_ports {vga_blue[0]}]
set_property SLEW FAST [get_ports {vga_green[3]}]
set_property SLEW FAST [get_ports {vga_green[2]}]
set_property SLEW FAST [get_ports {vga_green[1]}]
set_property SLEW FAST [get_ports {vga_green[0]}]
set_property PACKAGE_PIN W12 [get_ports {mt9d111_cam_data[7]}]
set_property PACKAGE_PIN V12 [get_ports {mt9d111_cam_data[6]}]
set_property PACKAGE_PIN W11 [get_ports {mt9d111_cam_data[5]}]
set_property PACKAGE_PIN W10 [get_ports {mt9d111_cam_data[4]}]
set_property PACKAGE_PIN V10 [get_ports {mt9d111_cam_data[3]}]
set_property PACKAGE_PIN V9 [get_ports {mt9d111_cam_data[2]}]
set_property PACKAGE_PIN W8 [get_ports {mt9d111_cam_data[1]}]
set_property PACKAGE_PIN V8 [get_ports {mt9d111_cam_data[0]}]
set_property PACKAGE_PIN AB19 [get_ports {vga_blue[3]}]
set_property PACKAGE_PIN AB20 [get_ports {vga_blue[2]}]
set_property PACKAGE_PIN Y20 [get_ports {vga_blue[1]}]
set_property PACKAGE_PIN Y21 [get_ports {vga_blue[0]}]
set_property PACKAGE_PIN AA21 [get_ports {vga_green[3]}]
set_property PACKAGE_PIN AB21 [get_ports {vga_green[2]}]
set_property PACKAGE_PIN AA22 [get_ports {vga_green[1]}]
set_property PACKAGE_PIN AB22 [get_ports {vga_green[0]}]
set_property PACKAGE_PIN V20 [get_ports {vga_red[0]}]
set_property PACKAGE_PIN U20 [get_ports {vga_red[1]}]
set_property PACKAGE_PIN V19 [get_ports {vga_red[2]}]
set_property PACKAGE_PIN V18 [get_ports {vga_red[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports hdmi_clk]
set_property IOSTANDARD LVCMOS33 [get_ports hdmi_data_e]
set_property IOSTANDARD LVCMOS33 [get_ports hdmi_hsync]
set_property IOSTANDARD LVCMOS33 [get_ports hdmi_iic_Scl]
set_property IOSTANDARD LVCMOS33 [get_ports hdmi_iic_Sda]
set_property IOSTANDARD LVCMOS33 [get_ports hdmi_vsync]
set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_href]
set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_Scl]
set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_Sda]
set_property PULLUP true [get_ports mt9d111_Scl]
set_property PULLUP true [get_ports mt9d111_Sda]
set_property PACKAGE_PIN W18 [get_ports hdmi_clk]
set_property PACKAGE_PIN U16 [get_ports hdmi_data_e]
set_property PACKAGE_PIN V17 [get_ports hdmi_hsync]
set_property PACKAGE_PIN AA18 [get_ports hdmi_iic_Scl]
set_property PACKAGE_PIN Y16 [get_ports hdmi_iic_Sda]
set_property PACKAGE_PIN W17 [get_ports hdmi_vsync]
set_property PACKAGE_PIN AB10 [get_ports mt9d111_href]
set_property PACKAGE_PIN Y11 [get_ports mt9d111_Scl]
set_property PACKAGE_PIN AB11 [get_ports mt9d111_Sda]
set_property IOSTANDARD LVCMOS33 [get_ports mt9d111_vsync]
set_property IOSTANDARD LVCMOS33 [get_ports vga_vsync]
set_property IOSTANDARD LVCMOS33 [get_ports vga_hsync]
set_property PACKAGE_PIN AA11 [get_ports mt9d111_vsync]
set_property PACKAGE_PIN Y19 [get_ports vga_vsync]
set_property SLEW FAST [get_ports {vga_red[3]}]
set_property SLEW FAST [get_ports {vga_red[2]}]
set_property SLEW FAST [get_ports {vga_red[1]}]
set_property SLEW FAST [get_ports {vga_red[0]}]
set_property SLEW FAST [get_ports hdmi_clk]
set_property SLEW FAST [get_ports hdmi_data_e]
set_property SLEW FAST [get_ports hdmi_hsync]
set_property SLEW FAST [get_ports hdmi_vsync]
set_property SLEW FAST [get_ports vga_hsync]
set_property SLEW FAST [get_ports vga_vsync]
set_property PACKAGE_PIN AA19 [get_ports vga_hsync]
set_property IOSTANDARD LVTTL [get_ports mt9d111_xck]
set_property PACKAGE_PIN AA8 [get_ports mt9d111_xck]


Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製7(インプリメント)”に続く。
  1. 2014年01月19日 07:28 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製5(タイミング制約)

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製4”の続き。

本来は、表示されているPackage のピン配置からやると思うのだが、チュートリアル通りに Timing.xdc から作ったので、タイミング制約からやってみた。

・Edit Timing Constraints をクリックした。
Cam_VDMA_73_140115.png

・タイミング制約の画面が表示された。
Cam_VDMA_74_140116.png

All Constraints を見ると、Create Clockはすでに CamD_VDMA_processing_system7_0_0.xdc で定義されいる。但し、CMOSカメラの pclk 入力のクロック制約が無い。その他にもプロセッサとの関連で設定されている制約がある。
今回のタイミング制約では、CMOSカメラの pclk 入力のクロック制約、CMOSカメラの入力信号のセットアップ時間とHDMI出力用IC(ADV7511) に出力する信号のクロックからの出力時間(hdmi_clkをクロックとする出力時間の制約になるので、制約できない可能性があるので、やめました)を設定することにする。(後で、IOBにFFを使用する制約を検討することにします)

最初に、CMOSカメラの pclk 入力のクロック制約を入力しよう。

・Create Clockウインドウの Double click to create a Create Clock constraint をダブルクリックする。

・Clock name: に pclk と入力する。

・... ボタンをクリックする。
Cam_VDMA_77_140116.png

・Specify Clock Source Objects ダイアログが表示された。

・Findボタンをクリックすると、Find resultsペインに入力が表示された。

・mt9d111_pclk をクリックして、右向き矢印をクリックすると、Selected name:に mt9d111_pclk が入った。
Cam_VDMA_78_140116.png

・OKボタンをクリックした。

・Source objectsに mt9d111_pclk ポートが入った。
Cam_VDMA_79_140116.png

・Create Clockウインドウに pclk が入った。下には、XDC記述が表示されている。
Cam_VDMA_80_140116.png


次に、CMOSカメラの入力信号のセットアップ時間を入力しよう。

・Inputs をクリックして、右のウインドウをダブルクリックする。
Cam_VDMA_81_140116.png

・Set Input Delayダイアログが表示された。Clock の右側の ... ボタンをクリックする。
Cam_VDMA_82_140116.png

・Findボタンをクリックすると、Find resultsに4つのクロックが表示された。pclkを選択して、右向き矢印ボタンをクリックした。
Cam_VDMA_83_140117.png

・Selected nameに pclk が入った。
Cam_VDMA_84_140117.png

・次に、Objects(ports) の右の ... ボタンをクリックする。
Cam_VDMA_85_140117.png

・Options のWith pattern に *mt9d111* と入力し、Findボタンをクリックすると、Find results に mt9d111_ のポートが表示された。

・右向き矢印ボタンをクリックした。
Cam_VDMA_86_140117.png

・mt9d111_ のポートが右のSelected name に入ったので、OKボタンをクリックした。

・Delay value に 11 ns を入力し、Delay value specifies rising delay にチェックを入れた。OKボタンをクリックした。
Cam_VDMA_92_140117.png

・Timing Constrains の Set Input Delay に入った。
Cam_VDMA_87_140117.png

これまで書いたタイミング制約を、timing.xdc に書き込む。

・Fileメニューから Save Constraints を選択した。
Cam_VDMA_88_140117.png

・ダイアログが表示された。論理合成をもう一度やるそうな?なぜだろうか?
Cam_VDMA_89_140117.png

・timing.xdc にセーブするというダイアログが表示された。OKボタンをクリックする。
Cam_VDMA_90_140117.png

・論理合成やインプリメントの前に、デザインをリロードして、制約を再度バリデーションしろとダイアログが出てきたがどうすればよいのだろうか?
Cam_VDMA_91_140117.png

・何はともあれ、制約をtiming.xdc にセーブできたようだ。
Cam_VDMA_93_140117.png

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製6(配置制約)”に続く。
  1. 2014年01月17日 05:30 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製4

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製3”の続き。

・Address Editor タブをクリックした。

・processing_system7_0 の方はアドレスがマップされていて問題なかった。

・axi_vdma_0 の方は、Data_MM2Sの方はマップされていたが、Rangeを 256M に、Offset Address を 0x10000000 に変更した。

・Data_S2MMは Unmapped だったので、右クリックし、右クリックメニューから Assign Address を選択して、アドレスを一旦マップさせて、、Offset Address を 0x10000000 に変更した。
Cam_VDMA_51_140115.png

・ブロックデザインをセーブした。

・Design Sourecesから CamD_VDMA.bd を選択して、右クリックメニューから、Generate Output Products... を選択した。
Cam_VDMA_52_140115.png

・Generate Output Productsダイアログがでた。Generate ボタンをクリックした。
Cam_VDMA_53_140115.png

・DiagramのIPのいろんな生成ファイルを生成しているようだ。

・生成が終了した。CamD_VDMAの下にインスタンスしてあるIPが生成された。
Cam_VDMA_54_140115.png

・Hierarchyウインドウを UnDock してみた。
Cam_VDMA_55_140115.png

・HDL Wapper ファイルを生成する。Design Soures の CamD_VDMAを右クリックし、右クリックメニューから Create HDL Wrapper... を選択した。
Cam_VDMA_56_140115.png

・ Create HDL Wrapperダイアログが開いた。デフォルトのまま、OKボタンをクリックした。
Cam_VDMA_57_140115.png

・CamD_VDMA_wapper.v が生成された。
Cam_VDMA_58_140115.png

・Sourcesウインドウで、右クリックし、右クリックメニューから Add Sources... を選択した。
Cam_VDMA_59_140115.png

・Add Sourcesダイアログが表示された。Add or Create Constraints のラジオボタンにチェックが入っていることをカクンして、Next>ボタンをクリックした。
Cam_VDMA_60_140115.png

この辺りは、”Vivado Design Suite Tutorial Using Constraints UG945 (v2013.4) December 19, 2013”を参考にしている。

・Add Sourcesダイアログで、Specify constraint set の下向き三角をクリックして、Create Constraint Set... を選択した。
Cam_VDMA_61_140115.png

・Create Constraint Setのダイアログが開いた。constrs_camd を新規作成するので入力した。OKボタンをクリックした。
Cam_VDMA_62_140115.png

・Create File... ボタンをクリックした。
Cam_VDMA_63_140115.png

・Create Constrains Fileダイアログが開いた。File name に timing を入力して、OKボタンをクリックした。
Cam_VDMA_64_140115.png

・timing.xdc がリストに入った。Finishボタンをクリックした。
Cam_VDMA_65_140115.png

・Constraints -> constrs_camd -> timing.xdc が生成された。
Cam_VDMA_66_140115.png

・constrs_camd を右クリックし、右クリックメニューから Make Activce を選択した。
Cam_VDMA_67_140115.png

・アクティブ化されて太字になった。
Cam_VDMA_68_140115.png

・Flow Navigator -> Project Manager -> Synthesis -> Run Synthesis をクリックして、論理合成を開始した。
Cam_VDMA_69_140115.png

・論理合成が終了して、Synthesis Completed ダイアログが出た。これからは制約を作っていく。

・Open Synthesized Design のラジオボタンをクリックして、OKボタンをクリックした。
Cam_VDMA_70_140115.png

・Critical Messages ダイアログが表示された。
Cam_VDMA_71_140115.png

・Open Synthesized Design の画面になった。
Cam_VDMA_72_140116.png

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製5(タイミング制約)”に続く。
  1. 2014年01月16日 04:03 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製3

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製2”の続き。

・init_done用のGPIOを追加する。ダブルクリックして、ダイアログを出して、GPIO Widthを 1 にした。
Cam_VDMA_38_140113.png

・AXI VDMAをクリックして選択し、Block Propertiesから c_enable_debug_all を 1 にした。
Cam_VDMA_39_140113.png

・AXI VDMAの配線が増えた。これで、s2mm_prmry_reset_out_n から出力することが出来る。
Cam_VDMA_40_140113.png

・Run Connection Automation をクリックし、/axi_gpio_0/S_AXI を選択した。
Cam_VDMA_41_140113.png

・Run Connection Automation ダイアログが開く。OKボタンをクリックした。
Cam_VDMA_42_140113.png

・processing_system7_0_axi_periph の M01_AXI ポートが増えて、axi_gpio_0/S_AXIと接続された。axi_gpio_0 の s_axi_aclk と s_axi_aresetn も接続された。
Cam_VDMA_43_140113.png

・AXI VDMAをダブルクリックして、ダイアログを出した。
・Advancedタブをクリックして、Fsync Optionsを変更した。(Write Channel Options -> s2mm_fsync, Read Channel Options -> mm2s_fsync)
Cam_VDMA_44_140113.png

・processing_system_0(ZYNQ) をダブルクリックして、出てきたダイアログの Clock Configuration をクリックする。
・CMOSカメラ用のクロックを忘れていたので、FCLK_CLKにチェックマークを入れて、36MHzに設定した。
Cam_VDMA_45_140113.png

・video_out_zed_0 をダブルクリックして、Video Data Width を 32 に変更した。
Cam_VDMA_46_140113.png

(2014/01/18:AXI_IICが入ってなかったので追加)
・AXI_IICを2つ追加した。
Cam_VDMA_96_140118.png 
・AXI_IICの名前を axi_iic_mt9d111  と axi_iic_hdmi に設定した。
Cam_VDMA_97_140118.png 

Cam_VDMA_98_140118.png  

・自作lのiic_3state_buf_0, iic_3state_buf_1 をAdd IP した。iic_3state_buf については、”
Cam_VDMA_99_140113.png 

・配線を全て済ませて、完成した。
Cam_VDMA_47_140113.png

・これで、Diagramの何もない所で右クリックし、右クリックメニューから Validate Design を選択するとエラーだった。

・これは、以前出たのと同じエラーだ。対処法もわかっている。mt9d111_pclk の External Port Properties の Frequency (MHz) を 100 に変更した。
Cam_VDMA_49_140113.png

・これで、Diagramの何もない所で右クリックし、右クリックメニューから Validate Design を選択すると成功した。
Cam_VDMA_48_140113.png

・DiagramウインドウをVivado 2013.4に Dock した。
Cam_VDMA_50_140113.png

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製4”に続く。
  1. 2014年01月15日 04:28 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

かぐや姫の物語(映画)を見てきました

かぐや姫の物語(映画)を見てきました。竹取物語のストーリーそのもので、かぐや姫の心の葛藤を描いている気がします。それなりです。最後の歌が一番良かったです。あまり感動がなかったような???
  1. 2014年01月12日 20:37 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製2

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製1”の続き。

・custom_vtcをAdd IPする。何もない所で、右クリックメニューからAdd IPを選択した。
Cam_VDMA_12_140112.png

・IPのカタログが出てくるので、Searchボックスに custom と入力して検索する。custom_vtc_v1_0 が出てくるので、ダブルクリックする。
Cam_VDMA_13_140112.png

・custom_vtc_0 がAdd IPされた。
Cam_VDMA_14_140112.png

・同様に、mt9d111_inf_axi_stream_0, custom_axi4s_video_0, video_out_zed_0 もAdd IP した。
Cam_VDMA_15_140112.png

・axi_vdma_0, axi_interconnect_0, axi_interconnect_1 も追加した。(axi_interconnectは後で自動生成されるので、Add IP する必要がなかった)
Cam_VDMA_16_140112.png

・Run Connection Automation をクリックすると、2つ選択しが出てきたので、/axi_vdma_0/S_AXI_LITE を選択した。
Cam_VDMA_17_140112.png

・Run Connection Automation ダイアログが表示された。OKボタンをクリックする。
Cam_VDMA_18_140112.png

・processing_system7_0_axi_periph(AXI interconnect) が追加されて、PSのGP0ポートに接続された。
・axi_interconnect_1 が不要になったので、削除した。
Cam_VDMA_19_140112.png

・axi_interconnect_1 の削除後の様子。
Cam_VDMA_20_140112.png

・次に、HP0ポートが無いので、processing_system7_0を設定する。processing_system7_0をダブルクリックした。

・Re-customize IP、ZYNQ7 Processing System(5.3)が表示された。
Cam_VDMA_21_140112.png

・Page Navigator からPS-PL Configuration を選択した。HP Slave AXI Interface を展開して、S AXI HP0 interface のSelect にチェックを入れて、S_AXI_HP0_DATA_WIDTH が64になっているのを確認する。
Cam_VDMA_22_140112.png

・Page Navigator からPeripheral I/O Pinsを開いてみた。どのデバイスが使われているか、わかりやすい。
Cam_VDMA_23_140112.png

・Page Navigator からMIO Configuration を選択した。この辺りは、XPSよりもわかりやすい気がする。
Cam_VDMA_24_140112.png

・Page Navigator からPL Fabric Clocks を展開して、FCLK_CLK2 にチェックを入れて、Actual Frequency を40MHz に設定した。
Cam_VDMA_25_140112.png

・Page Navigator からDDR Configuration を見てみた。
Cam_VDMA_26_140112.png

・Page Navigator からSMC Timing Calculation を見てみた。
Cam_VDMA_27_140112.png

・Page Navigator からInterrupts を見てみた。
Cam_VDMA_28_140112.png

・OKボタンをクリックした。

・processing_system7_0 にS_AXI_HP0 が追加された。
Cam_VDMA_29_140112.png

・Run Connection Automation をクリックし、出てきた/processing_system7_0/S_AXI_HP0 を選択した。
Cam_VDMA_32_140112.png

・Run Connection Automation ダイアログが開く。OKボタンをクリックした。
Cam_VDMA_33_140112.png

・axi_mem_intercon(AXI interconnect) が自動的に生成され、processing_system7_0/S_AXI_HP0と接続された。また、axi_mem_intercon とaxi_vdma_0/M_AXI_MM2S が接続された。
Cam_VDMA_34_140112.png

・axi_interconnect_0 が必要なかったので、削除した。axi_interconnect は自分でAdd IPする必要は無いようだ。
Cam_VDMA_35_140112.png

・axi_mem_intercon をダブルクリックして、Re-customize IP ダイアログを開いた。

・Number of Slave Interfaces を 2 に設定する。
Cam_VDMA_36_140112.png

・増えたポートに接続する。axi_vdma_0/M_AXI_S2MM から、axi_mem_intercon/S01_AXI に接続する。
Cam_VDMA_37_140112.png

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製3”に続く。
  1. 2014年01月12日 18:00 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製1

Vivado 2013.4のIP Integrator でAXI VDMAを使ったカメラ表示回路を作製してみようと思う。

長くなるので、肝心なところ以外は端折っていきます。
参考にするFPGAの部屋のブログ記事は、”Vivado IP Integrator のチュートリアル(Lab1)1(Vivado プロジェクトの生成)”から始まるVivado IP Integrator のチュートリアルシリーズです。

・まずは、Vivado 2013.4のZedBoardのプロジェクトを作製した。
Cam_VDMA_1_140111.png

・左の Flow Navigator -> Project Manager -> IP Catalog をクリックする。

・右に IP Catalog のウインドウが出る。そこで右クリックして、右クリックメニューから IP Setting... を選択する。
Cam_VDMA_2_140111.png

・Project Setting のダイアログが出る。Add Repository... ボタンをクリックして、自作したIPをインポートする。
Cam_VDMA_3_140111.png

・custom_vtc, mt9d111_inf_axis, video_out_zed, custom_axi4s_video の4つのIPをリポジトリに追加する。
Cam_VDMA_4_140111.png

・IP Catalog のBase IP に追加されているのがわかる。
Cam_VDMA_5_140111.png

・左の Flow Navigator -> Project Manager -> Create Block Design をクリックする。

・Create Block Design ダイアログが出る。CamD_VDMAと入力して、OKボタンをクリックする。
Cam_VDMA_6_140111.png

・Diagramウインドウが開く。

・Add IPをクリックして、IPコアをインポートする。
Cam_VDMA_7_140111.png

・ZYNQ 7 Processing System をダブルクリックする。
Cam_VDMA_8_140111.png

・ZYNQがインポートされた。
Cam_VDMA_9_140111.png

・Run Block Automation をクリックした。

・Run Block Automation ダイアログが開いた。OKボタンをクリックした。
Cam_VDMA_10_140111.png

・ポートが増えて、DDRとFIXED_IOの外部ポートが追加された。
Cam_VDMA_11_140111.png

Vivado 2013.4でAXI VDMAを使ったカメラ表示回路の作製2”に続く。
  1. 2014年01月11日 05:38 |
  2. ZedBoard
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4 で AXI VDMA をシミュレーションする

Vivado 2013.4のIP Integrator で、AXI VDMAのシミュレーションをしようとしている。AXI VDMAのシミュレーションは、当初 ISim で行ったが、最後までシミュレーションすることができずに断念した。次に、Questaでシミュレーションを行ったら、最後までシミュレーションすることができた。今度は、AXI VDMAのシミュレーションをVivado 2013.4のシミュレータでやってみた。

出来上がったVivado 2013.4 IP Integrator の画面を下に示す。
Vivado_2013_4_20_140108.png

これで、Verilog HDLのラッパーファイルを生成して、テストベンチとCMOSカメラのモデルを用意してシミュレーションを行った。そうしたら、コンパイルは通ったのだが、シミュレーションが始まった所でエラーが出てしまった。
Vivado_2013_4_21_140108.png

それは、ビルトインFIFOのBehavioral Simulation Modelがサポートされていないので、エラーだそうだ。ショック。。。

FAILURE : Behavioral models do not support built-in FIFO configurations. Please use post-synthesis or post-implement simulation in Vivado.


post-synthesis Simulation だったら問題ないということで、論理合成を行った。無事に論理合成が成功して、post-synthesis Simulation を行ったが、こっちは問題ない。しかしやはり遅いですね。。。
Vivado_2013_4_22_140108.png

100usec シミュレーションをしてみたが、3分09秒かかった。100usec当たり3分として、17msec間シミュレーションをするのにかかる時間は170x3=510分、510分/60 = 8.5時間必要だ。長いし、信号名が論理合成後の信号名になってしまうので、見にくい。

Web上で検索すると、”AR# 56989 LogiCORE IP AXI Video Direct Memory Access v6.0 - 「FAILURE : Behavioral models do not support built-in FIFO configurations」というエラー メッセージが表示される”がヒット。。。
tcl コマンドを実行すると、BUILT_IN FIFO が、ビヘイビアー シミュレーションをサポートするブロック RAM FIFO に置き換えられるそうだが、論理合成はリソースのペナルティがあるとのことだ。つまり、使用するリソースが増えるということだと思う。

それでは、tclコマンド実行して、Behavioral Simulationする前に、インプリメントをしてみた。
インプリメントが成功した。
Vivado_2013_4_23_140109.png

次は、tclコマンドを実行した。

set_property -dict [list CONFIG.Component_Name {axi_vdma_0 } CONFIG.c_enable_debug_all {1}] [get_ips axi_vdma_0]


でも、axi_vdma_0 を選択しながらだと、エラーになってしまう。
axi_vdma_0 のダイアログを出しながらだと、tclコマンドが実行されない?どうやったらよいのだろうか?
Vivado_2013_4_24_140109.png

たぶん、この tclコマンドは、最上位の階層のAXI VDMAのFIFOを変更するスクリプトなので、IP Integrator の下の axi_vdma_0 には適用できないのじゃないだろうか?tclコマンドの書き方を探ってみることにする。

(2013/01/10:追記)
ikwzmさん、ありがとうございました。 CONFIG.c_enable_debug_allを1にして、シミュレーションすることができました。

・まずは、Diagramウインドウで、axi_vdma_0 をクリックして、Soure File Properties ウインドウのProperties タブをクリックする。

・CONFIGを展開して、c_enable_debug_all を1 にすると、axi_vdma_0 が大きくなった。今まで隠れていた出力信号が表示されるようになった。そうか、この辺りで、いろいろなオプション信号を表示させることが出来るのか?
Vivado_2013_4_25_140109.png

周りに、c_enable_debug_info_0, c_enable_debug_info_1 … などの信号があるので、これらを1 にすれば、信号が選べるのかもしれない?

・この状態でセーブして、Behavioral Simulation を行ったところシミュレーションが成功した。。。
Vivado_2013_4_26_140109.png

・34msec シミュレーションを行った。私の古いパソコンで4時間40分かかった。見事にシミュレーションができた。
Vivado_2013_4_27_140110.png

Viavdo Simulator は ISim よりもきちんとシミュレーションが出来るようだが、まだ未サポートの事項があるようなので、注意が必要だ。早く、SystemVerilog に対応してくれるととても嬉しい。その際には、SystemVerilog に乗り換えたい。


試しにインプリメントしてみました。インプリメントも通ったので、問題なさそうです。
Vivado_2013_4_28_140110.png

Vivado 2013.4 IP Integrator で1つ回路を実際に作ってみて、ZedBoardで動作させてみようと思います。
  1. 2014年01月09日 04:37 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:2

Vivado 2013.4 IP Integrator での[BD 41-237] Bus Interface property FREQ_HZ Error

Vivado 2013.4のIP Integrator で、AXI VDMAのシミュレーションをしようとしている。AXI VDMAのシミュレーションは、当初 ISim で行ったが、最後までシミュレーションすることができずに断念した。次に、Questaでシミュレーションを行ったら、最後までシミュレーションすることができた。今度は、AXI VDMAのシミュレーションをVivado 2013.4のシミュレータでやってみようと思っている。そのため、IP Integrator でIPを接続しているが、ToolsメニューからValidate Design でエラーが出てしまった。
それは、

[BD 41-237] Bus Interface property FREQ_HZ does not match between /axi_vdma_0/S_AXIS_S2MM(100000000) and /mt9d111_inf_axi_stream_0/m_axis(18000000)

というエラーだった。
Vivado_2013_4_15_140108.png

mt9d111_inf_axi_staream_0 の s2mm_aclk 出力から、axi_vdma_0 の s_axis_s2mm_aclk に S_AXIS_S2MM つまり、AXI4 Streamバスのクロックを渡しているのだが、そのFREQ_HZが合わないというエラーだ。
mt9d111_inf_axi_staream_0 の s2mm_aclk 出力は、pclk入力のクロック入力がそのまま入っているので、pclkの外部ポートのクロック周波数設定の影響を受けてしまう。(CONFIG -> FREQ_HZ)
Vivado_2013_4_16_140108.png

axi_vdma_0 の s_axis_s2mm_aclk の Block Pin Properties の CONFIG -> FREQ_HZ は 100000000 でハイドされてしまって、設定を変更することができない。ここが変えられれば、一番良いのだが。。。
Vivado_2013_4_17_140108.png

関連するアンサーは、”AR# 56610 2013.2 Vivado IP インテグレーター - 「ERROR [BD 41-237] Bus Interface property FREQ_HZ does not match between /mig_7series/S_AXI() and interconnect_1/s00_couplers/M_AXI()」というエラー メッセージが表示される”しかないようだが、これは外部ポートの話のようだ。

仕方が無いので、mt9d111_inf_axi_staream_0 の pclk入力の外部ポートの CONFIG -> FREQ_HZ を 100000000 に設定変更した。
Vivado_2013_4_18_140108.png

Validation successful したが、エラーは出ているのはなぜだ?
Vivado_2013_4_19_140108.png

エラーの内容を下に示す。

[BD 41-1275] set port parameter, Invalid long/float value '' specified for parameter 'Freq Hz(FREQ_HZ)' for BD Interface 'mt9d111_pclk'.

  1. 2014年01月08日 04:58 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4 の IP Integrator で net_vcc, net_gnd を入力する

XPSプロジェクトでは、IPのポートに net_gnd, net_vcc を接続して、'0'や'1'を入力することができた。Vivado のIP Integrator ではどうやるのか謎だったのだが、ようやくわかったので忘れないために書いておく。これで2日位悩んでしまった。

現在、AXI VDMAのVivado Simulator によるシミュレーションのために、シミュレーション環境を構築している。以前、AXI VDMAのシミュレーションのために作ったシミュレーション環境のXPSプロジェクトを元に、Vivado 2013.4のIP Integrator に手動変換している。
下の図の custom_vtc_0 の vtc_ce ポートに'1'を入れたいのだが、入れ方がわからない。XPSプロジェクトでは、 net_gnd, net_vcc に接続できたので、たぶんやり方があるはずだ。
Vivado_2013_4_5_140107.png

ネットを検索したところ、下の Xilinx User Community Forums の記事の2つがヒットした。

1.IP integrator net_vcc
2.Connecting signals to ground in Vivado block design


デフォルト値を決めるやり方もあるようだが、Constant blockを使えという指示もあるようだ。しかし、使い方が書いてなくてわからない?

IP Catalog で constant または、Constantと入力しても、なにも出てこない。
Vivado_2013_4_6_140107.png

Constant blockについて、いろいろとネットを検索してみたがわからなかった。

たまたま、Diagramウインドウの右クリックメニューから、Add IP...を選択して、
Vivado_2013_4_7_140107.png

検索してみたところ、Constantがあった。
Vivado_2013_4_8_140107.png

Add IPしてみたところだ。
Vivado_2013_4_9_140107.png

Constantをダブルクリックして見ると、ダイアログが出た。
Vivado_2013_4_10_140107.png

Const Width とConst Val が設定できる。今のところはデフォルト値で問題ない。
Vivado 2013.4のIP Integrator には、いろいろとプリミティブの様なブロックがあるのかもしれない?何処に書いてあるんだろうか?ご存じの方は教えて下さい。

なお、 Xilinx User Community Forums の記事の2.に書いてある Slice Block もDiagramウインドウの右クリックメニューから、Add IP...を選択して、検索してみたところあった。
Vivado_2013_4_11_140107.png

Add IPすると、下のようなブロックになった。
Vivado_2013_4_12_140107.png

ブロックをダブルクリックして、ダイアログを表示すると、入力の何ビット目から何ビット目を取り出すことが出来るようだ。
Vivado_2013_4_13_140107.png

Vivado\2013.4\data\rsb\iprepos に便利に使えるブロックがあるらしい。フォルダを見てみると、util_vector_logic などが使えるようだ。
Vivado_2013_4_14_140107.png

(注)inft_... のブロックは無いようです。util_... と xilinx.com_ip... のブロックが使えます。
  1. 2014年01月07日 04:19 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2013.4 Simulator でのROMまたはRAMの初期化ファイルの使用方法

現在、AXI VDMAのレジスタ設定用AXI Lite Master IPのシミュレーションをしているが、ROMの初期化ファイルの取り扱いに困っていた。それを書いておこうと思う。

AXI VDMAのレジスタ設定用AXI Lite Master IPについては、以下のブログ記事を参照のこと。

AXI VDMAのレジスタ設定用AXI Lite Master IPの作製1(仕様の検討)
AXI VDMAのレジスタ設定用AXI Lite Master IPの作製2(シミュレーション)
AXI VDMAのレジスタ設定用AXI Lite Master IPの作製3(HDLソースの公開)
AXI VDMAのレジスタ設定用AXI Lite Master IPの作製4(XPSへAdd IP)


まずは、reg_set_axi_lite_master.v に initial文で、ROMの初期化ファイルのvdma_reg_set.txt を読んでくるように書いてある。そのVerilog HDLファイルの一部を下に示す。

    initial begin
        $readmemh("vdma_reg_set.txt", rom, 0, 255);
    end


このように vdma_reg_set.txt をシミュレーション用のフォルダに置く必要がある。フォルダの位置は、\reg_set_axi_lm\reg_set_axi_lm.sim\sim_1\behav となる。これは、Behavioral Simulation の場合だ。このフォルダに vdma_reg_set.txt をコピーする。
Vivado_2013_4_1_140105.png

Simulation -> Simulation Settings をクリックする。
Vivado_2013_4_2_140105.png

Simulation ダイアログで、Clean up simulation files のチェックを外しておく。こうしないとシミュレーションのたびにシミュレーション用のフォルダを消去して作りなおしてしまうので、vdma_reg_set.txt も消去されてしまう。vdma_reg_set.txt を消去されるのを防ぐ目的がある。
Vivado_2013_4_3_140105.png

このように設定すると、きちんと初期値が入ったROMとしてシミュレーションすることが出来る。
Vivado_2013_4_4_140105.png

Vivado 2013.4の Simulator は ISim に比べてかなり速い気がします。後で計測してみたいです。
  1. 2014年01月05日 05:32 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

mt9d111_inf_axis を Vivado 2013.4 IP Integrator に移行する3(新規プロジェクトでIP化)

”mt9d111_inf_axis を Vivado 2013.4 IP Integrator に移行する2(IPの使用)”の続き。

前々回、前回とISEプロジェクトからインポートしてVivado 2013.4のプロジェクトを作製して、IP化した。そして、そのIPを使用するプロジェクトを作製してインプリメントを試みたが、パスが長すぎて?エラーが発生した。

今回は、Vivado 2013.4のプロジェクトを新規で作製してIP化して、IPを使用するプロジェクトを作製してインプリメントを試みる。

・Vivado 2013.4のプロジェクトを新規で作製し、HDLファイルをコピーした。

・pixel_fifo をIP Catalog の FIFO Generator から新規作製した。

下にVivado 2013.4の mt9d111_inf_axis のプロジェクトを示す。すでにインプリメントを通してある。
IP_Integrator_2013_4_17_140105.png

・IP化を行った。
IP_Integrator_2013_4_18_140105.png

・このプロジェクトは終了し、新規プロジェクトを作製した。

・mt9d111_inf_axi_stream IP を IP Catalog に追加した。

・IP Integrator で mt9d111_inf_axi_stream IP をインスタンスして、ポートを追加した(design_1)。

・design_1 を右クリックして、右クリックメニューから Create HDL Wapper... を選択して、Verilog HDLのラッパー・ファイルを作製した。

・論理合成、インプリメントが通った。
IP_Integrator_2013_4_19_140105.png

IP_Integrator_2013_4_20_140105.png

・シミュレーションもしてみた。問題ないようだ。Vivado Simulator は ISim に比べて数倍速いと思う。これはとても良いと思う。
IP_Integrator_2013_4_21_140105.png

Vivado 2013.4の新規プロジェクトを作製して、IP化するとうまく行った。ISEプロジェクトのインポートを行うと階層が深くなり、たぶんWindowsでは、うまく行かないようだ。
  1. 2014年01月05日 04:45 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

ZedBoardのRevisionの違い

前から使用しているZedBoardはRev.Cです。もう1枚、ZedBoardを最近購入して、それは、Rev.Dでした。

Rev.CのZedBoardです。
ZedBoard_1_140104.jpg

Rev.DのZedBoardです。外見上の大きな違いはZynqに付いているヒートシンクです。
ZedBoard_2_140104.jpg

Rev.Dに”ZedBoard用CMOSカメラ回路の作製11(正常に写った)”のSDカードを挿入して、電源をONしました。最初に感じることは、Rev.Cよりも ZedBoard のDONE LEDが点灯するのが速いです。かなり違います。
そして、Rev.Dでは、HDMIに正常に表示されないこともあります。

Rev.Cに付いているのは、ES(Engineering Sample)のZynq、Rev.Dに付いているのは、たぶんC(Commercial)のZynqです。

このディスプレイでは、Rev.C, Rev.D両方共HDMIに表示できますが、Rev.Dでは、他のディスプレイでは、色がおかしく、もう1つのディスプレイでは表示できませんでした。ディスプレイを選ぶようです。ソフトウェアの設定かハードウェアかがおかしいのかもしれません?

Rev.Cで、今使っている他のディスプレイで確かめて見たいと思います。今思い出しましたが、Rev.CでもKEKのZynq勉強会の時にディスプレイを借りて表示しましたが、全く問題なかったです。Rev.Dだけの問題でしょうかね?

やはり、Rev.C, Rev.Dでディスプレイを変えてテストしてみる必要がありそうです。
  1. 2014年01月04日 07:01 |
  2. ZedBoard
  3. | トラックバック:0
  4. | コメント:0

mt9d111_inf_axis を Vivado 2013.4 IP Integrator に移行する2(IPの使用)

mt9d111_inf_axis を Vivado 2013.4 IP Integrator に移行する1(ISEプロジェクトからインポート)”の続き。

前回は、mt9d111_inf_axisのIPを作製した。今回は、mt9d111_inf_axis IP を使ってみる。
今回参照するFPGAの部屋のブログ記事”Vivado チュートリアル Designing with IP Lab3 (IP Packager)3”カスタムIPを新しいプロジェクトで使用するためのチュートリアル

・参照ブログ記事を参考に、前回の mt9d111_inf_axis IP を IP Catalog に追加した。
IP_Integrator_2013_4_11_140104.png

・IP Integrator のファイルを作って、mt9d111_inf_axis IP をAdd IP し、ポートを付けた。
IP_Integrator_2013_4_12_140104.png

・セーブ後に、HDL Wrapper ファイルを作製する。design_1 で右クリックし、右クリックメニューから Create HDL Wrapper... を選択する。
IP_Integrator_2013_4_13_140104.png

・ダイアログが表示された。OKボタンをクリックする。
IP_Integrator_2013_4_14_140104.png

・Wrapper ファイルが生成された。
IP_Integrator_2013_4_15_140104.png

・論理合成、インプリメントを行った。

・論理合成でエラー発生。どうやら、ディレクトリが作れないと言っている。パス名が260文字を超えているからなのだと思う。
IP_Integrator_2013_4_16_140104.png

ちなみに、プロジェクトがちょっと長いと下のようなエラーが出てくる。Windows のパス名の260文字制限にすぐに引っかかってしまう。
IP_Integrator_2013_4_10_140103.png

Vivado はフォルダの階層を掘り過ぎなのではないか?
なるべくプロジェクト名を短くしたほうが安全のようだ。
こうなると、パス名の制限の無い Linux で Vivado を使ったほうが良さそうだ。(今は、Windows7でVivado を使っています)

参考、”AR# 52787 Vivado - 「ERROR: [Common 17-143] Path length exceeds 260-Byte maximum allowed by Windows」というエラー メッセージが表示される"
  1. 2014年01月04日 05:09 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

mt9d111_inf_axis を Vivado 2013.4 IP Integrator に移行する1(ISEプロジェクトからインポート)

Xilinx社のビデオ信号用DMA IPのAXI VDMAをシミュレーションをしたことがあった。そのためにカスタムIPを作っていたが、その内のAXI4 Stream用のカメラ・インターフェースIPの mt9d111_inf_axis を手始めに Vivado IP Integrator でカスタムIPにしてみることにした。

カメラ・インターフェース用AXI4-Stream IPについては下のリンクを参照のこと。
カメラ・インターフェース用 AXI4-Stream IPの作製1(仕様の検討)
カメラ・インターフェース用 AXI4-Stream IPの作製2(pixel_fifo の生成)
カメラ・インターフェース用 AXI4-Stream IPの作製3(シミュレーション)
カメラ・インターフェース用 AXI4-Stream IPの作製4(HDLソース1)
カメラ・インターフェース用 AXI4-Stream IPの作製5(HDLソース2)
カメラ・インターフェース用 AXI4-Stream IPの作製6(AXI4-Stream IPの設定)

カメラ・インターフェース用AXI4-Stream IPは、XPSプロジェクトで作ってあるが、これをVivado 2013.4のIP Integrator に移行しようと思う。
最初に、ISEプロジェクトをVivado 2013.4に取り込むことが出来る。それは、Vivado のプロジェクトを作製するときに、Project Typeで、Imported Project を選択することだ。
IP_Integrator_2013_4_1_140103.png

AXI4 Stream用のカメラ・インターフェースIPの mt9d111_inf_axis をインポートしたプロジェクトを作った。
IP_Integrator_2013_4_2_140103.png

Coregenで生成したFIFO Generator IPの pixel_fifo は エラーなので、IP Statusウインドウで、右クリックメニューからUpgrade IPした。
IP_Integrator_2013_4_3_140103.png

pixel_fifo が正常な状態になった。
IP_Integrator_2013_4_4_140103.png

この状態で、インプリメントを行った。
IP_Integrator_2013_4_5_140103.png

上の図を見るとわかると思うが、インプリメントが通った。

このプロジェクトを IP Packager で IP にしよう。

・Toolsメニューから Create and Package IP... を選択する。

・Create And Package New IPダイアログが立ち上がった。今度は、IP Packaging と AXI4 Peripheral Creation が出来るらしい。
IP_Integrator_2013_4_6_140103.png

・次の画面でPackage your projectのラジオボタンを選択した。
IP_Integrator_2013_4_7_140103.png

・Pacage IPの画面を下に示す。
IP_Integrator_2013_4_8_140103.png

・IP Interface と IP GUI Customization Layout にワーニングがある。IP Interface のワーニングは、”Vivado 2013.2 の IP Packager でAXI4-Stream にクロックを関連付ける”に解決方法が書いてあるので、これを参考にワーニングを解消した。

・Package IPボタンをクリックして、IP化を行った。
IP_Integrator_2013_4_9_140103.png

(注:この作製したIPは他のプロジェクトで使用した時にうまく行きませんでした)
  1. 2014年01月03日 05:51 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

ゼロ・グラビティを見てきました

昨日、ゼロ・グラビティ(音注意)を見てきました。
ストーリーは陳腐だと思ったのですが、宇宙空間の表現力に圧倒されました。どうやって撮影したんでしょうか?
  1. 2014年01月03日 04:01 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

平沢官衙遺跡から筑波山神社までウォーキング

1月2日に平沢官衙遺跡から筑波山神社までウォーキングしてきました。片道約5kmくらいです。高度差は190mくらいです。行ったのは、私と奥さん、娘たちです。息子は家でお留守でした。

平沢官衙遺跡からつくば道を歩いていきます。景色は最高です。
tsukuba_jinjya_1_120103.jpg

途中、普通の舗装道ですが、結構な上りです。
tsukuba_jinjya_2_120103.jpg

tsukuba_jinjya_3_120103.jpg

筑波山神社について、お賽銭をあげるのに20分位、並びました。
tsukuba_jinjya_4_120103.jpg

ケバブ屋さんでケバブを買って食べました。美味しかったですよ。肉も沢山入っていて、おなかがいっぱいになりました。
tsukuba_jinjya_5_120103.jpg

来た道を帰りました。
tsukuba_jinjya_6_120103.jpg

去年は登りでフウフウしていたのですが、今年は楽でした。やはりトレーニングの成果だと思います。但し、体は暑かったです。
  1. 2014年01月02日 21:39 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

ZedBoard AXI4 Lite Slave 演習11(Verilog版演習マニュアルの続き5)

ZedBoard AXI4 Lite Slave 演習10(Verilog版演習マニュアルの続き4)”の続き。

7. 実機でテスト

84. ZedBoardの設定を以下の様に行います。

MI02~MI06:GNDにショート
JP2, JP6:ショート
J18:VADJ SELECT:1V8


85. ダウンロード・ケーブルとZedBoardのUARTのポートからパソコンのUSBポートに接続します。
86. ZedBoardの電源をONします。
87. Xilinx ToolsメニューからProgram FPGAを選択します。
AXI4_practice_76_140101.png

88. Program FPGAダイアログが表示されます。
89. BitstreamのBrowse…ボタンをクリックします。
AXI4_practice_77_140101.png

90. Select bitstreamダイアログが表示されるので、ISEのプロジェクト・フォルダのsystem_top.bitを選択し、開くボタンをクリックします。
AXI4_practice_78_140101.png

91. これで、ビットストリーム・ファイルを指定できたので、Programボタンをクリックします。
AXI4_practice_79_140101.png

92. ZedBoardのDoneの青色LEDが点灯します。
AXI4_practice_80_140101.jpg

93. RunメニューからRun Configurationを選択します。
AXI4_practice_81_140101.png

94. ダイアログで、Xilinx C/C++ application (GDB)で右クリックし、右クリックメニューからNewを選択します。
AXI4_practice_82_140101.png

95. led8_axi_lite_slave_Debugができました。Applyボタンをクリックします。
AXI4_practice_83_140101.png

96. ApplyボタンとRevertボタンがハイドされました。Runボタンをクリックする前にTera Termを起動します。
97. Tera Termの起動画面で、シリアルのラジオボタンをクリックして、OKボタンをクリックします。
AXI4_practice_84_140101.png

98. 設定メニューからシリアルポートを選択します。
AXI4_practice_85_140101.png

99. ボー・レートを115200 bpsに設定します。OKボタンをクリックします。
AXI4_practice_86_140101.png

100. 設定メニューから端末を選択します。
AXI4_practice_87_140101.png

101. ローカルエコーにチェックを入れて、OKボタンをクリックします。
AXI4_practice_88_140101.png

102. SDKのRun Configurationsダイアログに戻ってRunボタンをクリックします。
AXI4_practice_89_140101.png

103. Tera Termにメッセージが出ます。
AXI4_practice_90_140101.png

104.  4を入力します。
AXI4_practice_91_140101.png

105.  50000000を入力します。これは、100MHzを50000000分周することになるので、LEDの点滅速度を0.5秒に設定します。
AXI4_practice_92_140101.png

106.  3を入力します。
AXI4_practice_93_140101.png

107.  aaと入力します。
AXI4_practice_94_140101.png

108. ZedBoardのLEDが10101010に点灯します。
AXI4_practice_95_140101.jpg

109.  2を入力します。
AXI4_practice_96_140101.png

110. ZedBoardのLEDがカウントアップするのが見えます。
AXI4_practice_97_140101.jpg

111.  1を入力します。
AXI4_practice_98_140101.png

112. すべてのレジスタの内容を表示します。LED Counter Load Registerの内容は先ほど設定したaaです。LED Monitor Registerの内容は現在のLEDで表示してる値を示します。
113.  もう一度、1を入力します。
AXI4_practice_99_140101.png

114. LEDのカウントアップが停止します。
115.  5を入力します。
AXI4_practice_100_140101.png

116. ソフトウェアが終了しました。
117. ZebBoardの電源をOFFします。
  1. 2014年01月01日 07:42 |
  2. AXI4バスの演習資料
  3. | トラックバック:0
  4. | コメント:0

マラソン・トレーニング日記2013年12月分

マラソン・トレーニング日記2013年12月分です。貼っておきます。現在は、昨日、4.75km走ってきたのと、一昨日、スキーに行ったので、肩が痛いです。

走行距離や場所はガーミンコネクトで管理しています。11月の走行距離は61km、時間、7:21:51、16日間走りました。
12月も2日に1回位はしりたいです。

(9日)
3時起床
股関節痛のため休止
10時30分就寝
(10日)
3時40分起床
朝、筋トレ
10時30分就寝
(11日)
3時40分起床
朝、ストレッチ&トレーニング
昼、3km走、5:40/km, L1:5:59, L2:5:35, L3:5:29
結構走るのに慣れてきた感じがする。次の目標は5:30/km
10時10分就寝
(12日)
3時10分起床
朝、筋トレ
忘年会
11時就寝
(13日)
4時起床
朝、ストレッチ&トレーニング
昼、3km走、5:50/km, L1:6:30, L2:5:39, L3:5:32
今日は風があって辛かった。右脇腹が痛くなった。
11時就寝
(14日)
4時10分起床
午前、5.25km、7:31/km、L1:7:51, L2:8:28, L3:8:07, L4:7:48, L5:5:49, L6:5:41
ロハスして最後にスパート
10時45分就寝
(15日)
3時15分起床
午前、4.41km、7:32/km, L1:7:55, L2:7:11, L3:7:30, L4:7:29
ロハス、風が強くて走るのが大変だった。
9時就寝
(16日)
3時15分起床
10時20分就寝
(17日)
3時40分起床
朝、筋トレ
昼、3km走、5:45/km, L1:6:16, L2:5:35, L3:5:27
10時就寝
(18日)
3時起床
朝、ストレッチ&トレーニング
10時20分就寝
(19日)
3時50分起床
朝、筋トレ
10時10分就寝
(20日)
3時30分起床
朝、ストレッチ&トレーニング
10時30分就寝
(21日)
3時30分起床
朝、筋トレ
昼、ビルドアップ走、5km、L1:8:01, L2:7:01, L3:6:32, L4:5:39, L5:5:27
11時就寝
(22日)
4時起床
朝、ストレッチ&トレーニング
10時20分就寝
(23日)
4時10分起床
5kmビルドアップ走、6:33/km, L1:7:31, L2:6:59, L3:6:33, L4:5:57, L5:5:48
10時30分就寝
(24日)
3時40分起床
10時25分就寝
(25日)
3時40分起床
朝、筋トレ
昼、3km走、5:45/km, L1:6:12, L2:5:32, L3:5:30
10時40分就寝
(26日)
3時50分起床
昼、5kmLSD、9:26/km,
10じ50分就寝
(27日)
4時起床
朝、筋トレ
10時50分就寝
(28日)
3時40分起床
朝、ストレッチ&トレーニング
午前、6.37km LSD、7:46 min/km、L1:7:37, L2:8:12, L3:7:55, L4:7:50, L5:7:59, L6:7:44, L7:5:53
11時50分就寝
(29日)
4時30分起床
朝、筋トレ
10時就寝
(30日)
3時30分起床
今日はハンターマウンテン塩原スキー場に行ってきました。
10時30分就寝
(31日)
5時40分起床
午後、4.75km走、5km走ろうと思ったが、とてもきつくなったので、途中で終了。L1:6:27, L2:6:04, L3:5:57, L4:5:54, L5:4:04
10時45分就寝

12月の総走行距離 61.62km, 時間 7:03:44, 消費カロリー 3,671C
  1. 2014年01月01日 05:49 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0
»