FC2カウンター FPGAの部屋 2019年06月21日
FC2ブログ

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

FPGAの部屋

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

Vivado HLS勉強会用のラプラシアンフィルタ実習用回路の製作2

Vivado HLS勉強会用のラプラシアンフィルタ実習用回路の製作1”の続き。

今年も筑波大学でやる予定のVivado HLS 勉強会の出し物として、 AXI4 Stream 版のラプラシアンフィルタの実習用回路を作成することにした。ということで、前回は、Windows 10 の Vivado 2017.4 で lapfilter_axis_zybo プロジェクトを作成し、lap_filter_axis 、axis2DMA2st と DMA2axis2st IP をリポジトリに登録し、lapfilter_axis ブロック・デザインを新規作成して、IP をAdd IP して、回路を作り始めた。今回は、回路を完成させて、論理合成、インプリメンテーション、ビットストリームの生成を行う。

まずは、ビットマップ・ディスプレイ・コントローラを追加して、完成したブロック・デザインを示す。
lapfilter_axis_zybo_5_190621.png

アドレスマップを示す。
lapfilter_axis_zybo_6_190621.png

これで、論理合成、インプリメンテーション、ビットストリームの生成を行ったところ、Critical Warning が 1 つ出ている。Open Implemented Design を開いて、タイミングを見た。

clk_fpga_0 to pclk_buf のセットアップ・タイムがエラーだった。
lapfilter_axis_zybo_8_190621.png

Source が lapfilter_axis_i/bitmap_disp_cntrler_axi_master_0/inst/bitmap_disp_eng_inst/hv_count_enable_reg/C で、Destination が lapfilter_axis_i/bitmap_disp_cntrler_axi_master_0/inst/bitmap_disp_eng_inst/hv_cnt_ena_d1_reg/D だった。
これは、bitmap_disp_eng.v のソースコードのこの部分に相当する。
lapfilter_axis_zybo_9_190621.png

これは、AXI のクロックからディスプレイのクロックに明示的に載せ替えている部分なので、問題無い。

次に pclk_buf から clk_fpga_0 のパスもエラーになっていた。
Source が lapfilter_axis_i/bitmap_disp_cntrler_axi_master_0/inst/bitmap_disp_eng_inst/vsyncx_node_reg/C で Destination が lapfilter_axis_i/bitmap_disp_cntrler_axi_master_0/inst/bitmap_disp_eng_inst/vsync_axi_b1_reg/D だ。
これは、bitmap_disp_eng.v のソースコードのこの部分に相当する。
lapfilter_axis_zybo_10_190621.png

これも、ディスプレイのクロック・ドメインの信号をAXI のクロック・ドメインの信号に明示的に載せ替えているので、問題無い。

ということで、クロック・ドメイン同士に False Path の設定をした。
制約ファイルを示す。
lapfilter_axis_zybo_11_190621.png

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 PACKAGE_PIN J18 [get_ports {vga_blue[3]}]
set_property PACKAGE_PIN K19 [get_ports {vga_blue[2]}]
set_property PACKAGE_PIN M20 [get_ports {vga_blue[1]}]
set_property PACKAGE_PIN P20 [get_ports {vga_blue[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_blue[4]}]
set_property PACKAGE_PIN G19 [get_ports {vga_blue[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_green[4]}]
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[4]}]
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 PACKAGE_PIN F20 [get_ports {vga_green[5]}]
set_property PACKAGE_PIN H20 [get_ports {vga_green[4]}]
set_property PACKAGE_PIN J19 [get_ports {vga_green[3]}]
set_property PACKAGE_PIN L19 [get_ports {vga_green[2]}]
set_property PACKAGE_PIN N20 [get_ports {vga_green[1]}]
set_property PACKAGE_PIN H18 [get_ports {vga_green[0]}]
set_property PACKAGE_PIN F19 [get_ports {vga_red[4]}]
set_property PACKAGE_PIN G20 [get_ports {vga_red[3]}]
set_property PACKAGE_PIN J20 [get_ports {vga_red[2]}]
set_property PACKAGE_PIN L20 [get_ports {vga_red[1]}]
set_property PACKAGE_PIN M19 [get_ports {vga_red[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports vga_hsync]
set_property IOSTANDARD LVCMOS33 [get_ports vga_vsync]
set_property PACKAGE_PIN P19 [get_ports vga_hsync]
set_property PACKAGE_PIN R19 [get_ports vga_vsync]

set_false_path -from [get_clocks clk_fpga_0] -to [get_clocks [get_clocks -of_objects [get_pins lapfilter_axis_i/bitmap_disp_cntrler_axi_master_0/inst/dvi_disp_i/BUFR_pixel_clk_io/O]]]

set_false_path -from [get_clocks [get_clocks -of_objects [get_pins lapfilter_axis_i/bitmap_disp_cntrler_axi_master_0/inst/dvi_disp_i/BUFR_pixel_clk_io/O]]] -to [get_clocks clk_fpga_0]


これで、もう一度、論理合成、インプリメンテーション、ビットストリームの生成を行ったところ、Critical Warning が出なくなって、タイミングもOK になった。
lapfilter_axis_zybo_12_190621.png
lapfilter_axis_zybo_13_190621.png
  1. 2019年06月21日 05:12 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0