前回は、.paoファイルにHDLファイルを追加するのを忘れてしまった。
rotary_encoder_v2_1_0.paoから追加する。下に内容を示す。
##############################################################################
## Filename: H:/HDL/FndtnISEWork/Spartan3A_starter_kit/CamDisp_EDK_OV7670_LCD/system/pcores/rotary_encoder_v1_00_a/data/rotary_encoder_v2_1_0.pao
## Description: Peripheral Analysis Order
## Date: Tue Sep 27 05:24:05 2011 (by Create and Import Peripheral Wizard)
##############################################################################
lib proc_common_v3_00_a all
lib plbv46_slave_single_v1_01_a all
lib rotary_encoder_v1_00_a user_logic vhdl
lib rotary_encoder_v1_00_a rotary_encoder vhdl
lib rotary_encoder_v1_00_a rot_enc_cont.vhd vhdl
lib rotary_encoder_v1_00_a ROTSW_SM.vhd vhdl
lib rotary_encoder_v1_00_a swdiv_rot.vhd vhdl
次に、lcd_controller_v2_1_0.paoの内容を下に示す。
##############################################################################
## Filename: H:/HDL/FndtnISEWork/Spartan3A_starter_kit/CamDisp_EDK_OV7670_LCD/system/pcores/lcd_controller_v1_00_a/data/lcd_controller_v2_1_0.pao
## Description: Peripheral Analysis Order
## Date: Tue Sep 27 05:26:28 2011 (by Create and Import Peripheral Wizard)
##############################################################################
lib proc_common_v3_00_a all
lib plbv46_slave_single_v1_01_a all
lib lcd_controller_v1_00_a user_logic vhdl
lib lcd_controller_v1_00_a lcd_controller vhdl
lib lcd_controller_v1_00_a lcd_ctlr.vhd vhdl
これで、XPSでProjectメニューから> Rescan User Repositoriesを選択して、生成したカスタムIPの変更をもう一度、XPSに認識させた。
(注)もう一度、元のEDKプロジェクトをコピーして、カスタムIPを作りなおしても、(PAOファイルが完全でも)やはり同様にワーニングが出ている。PAOファイルは関係なかったみたいだ。
もしかすると、複数PLBバスがあると何処にアサインするか分からないのかもしれない?
system.ucf にロータリー・エンコーダとLCDの入出力ピンの制約を追加した。追加した制約を下に示す。
# ロータリーエンコーダ
NET "rot_center" LOC = "R13" | IOSTANDARD = LVTTL | PULLDOWN ;
NET "rot_a" LOC = "T13" | IOSTANDARD = LVTTL | PULLUP ;
NET "rot_b" LOC = "R14" | IOSTANDARD = LVTTL | PULLUP ;
# LCD
NET "LCD_E" LOC = "AB4" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_RS" LOC = "Y14" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_RW" LOC = "W13" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<7>" LOC = "Y15" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<6>" LOC = "AB16" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<5>" LOC = "Y16" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<4>" LOC = "AA12" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<3>" LOC = "AB12" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<2>" LOC = "AB17" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<1>" LOC = "AB18" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
NET "LCD_DB<0>" LOC = "Y13" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = QUIETIO ;
これでインプリメントを試みた。しかし、MAPでエラー発生。
1つ目のエラーの内容を示す。
ERROR:MapLib:979 - LUT2 symbol "system_i/rotary_encoder_0/rotary_encoder_0/USER_LOGIC_I/rot_enc_cont_i/ROTSW_SM_inst/next_center_pulse1" (output signal=system_i/rotary_encoder_0/rotary_encoder_0/USER_LOGIC_I/rot_enc_cont_i/ROTSW_SM_inst/next_center_pulse) has input signal "system_i/rotary_encoder_0/rotary_encoder_0/USER_LOGIC_I/rot_enc_cont_i/rot_center_node" which will be trimmed. See Section 5 of the Map Report File for details about why the input signal will become undriven.
信号が削除されたので、入力が無くなったというようなエラーだった。
原因がわかったぞ。。。入出力ピンを追加したのにXPSのトップファイルを再生成していないためだ…
早速、Project NavigatorでXPSを選択して、ProcessesウインドウのGenerate Top HDL Sourceをダブルクリックした。下の図は実行後。
やった~~~。MAP通った… よかった。
インプリメントが終了した。今回は、大分苦労してしまった。
MAPリポートの一部を下に示す。
elease 13.2 Map O.61xd (nt)
Xilinx Mapping Report File for Design 'system_top'
Design Information
------------------
Command Line : map -intstyle ise -p xc3s700a-fg484-4 -cm speed -ir off -pr off
-c 100 -o system_top_map.ncd system_top.ngd system_top.pcf
Target Device : xc3s700a
Target Package : fg484
Target Speed : -4
Mapper Version : spartan3a -- $Revision: 1.55 $
Mapped Date : FRI 30 SEP 5:23:31 2011
Design Summary
--------------
Number of errors: 0
Number of warnings: 251
Logic Utilization:
Number of Slice Flip Flops: 5,830 out of 11,776 49%
Number of 4 input LUTs: 6,458 out of 11,776 54%
Logic Distribution:
Number of occupied Slices: 5,551 out of 5,888 94%
Number of Slices containing only related logic: 5,551 out of 5,551 100%
Number of Slices containing unrelated logic: 0 out of 5,551 0%
*See NOTES below for an explanation of the effects of unrelated logic.
Total Number of 4 input LUTs: 6,836 out of 11,776 58%
Number used as logic: 5,900
Number used as a route-thru: 378
Number used for Dual Port RAMs: 320
(Two LUTs used per Dual Port RAM)
Number used as Shift registers: 238
The Slice Logic Distribution report is not meaningful if the design is
over-mapped for a non-slice resource or if Placement fails.
Number of bonded IOBs: 114 out of 372 30%
IOB Flip Flops: 23
IOB Master Pads: 3
IOB Slave Pads: 3
Number of ODDR2s used: 24
Number of DDR_ALIGNMENT = NONE 24
Number of DDR_ALIGNMENT = C0 0
Number of DDR_ALIGNMENT = C1 0
Number of BUFGMUXs: 10 out of 24 41%
Number of DCMs: 4 out of 8 50%
Number of BSCANs: 1 out of 1 100%
Number of BSCAN_SPARTAN3As: 1 out of 1 100%
Number of MULT18X18SIOs: 3 out of 20 15%
Number of RAMB16BWEs: 19 out of 20 95%
Number of RPM macros: 1
Average Fanout of Non-Clock Nets: 3.28
Peak Memory Usage: 242 MB
Total REAL time to MAP completion: 29 secs
Total CPU time to MAP completion: 25 secs
前回、LCDコントローラとロータリー・エンコーダのコントローラを入れる前は、Number of Slice Flip Flopsが47%だったが、今回は49%だった。順調に増えているようなので、大丈夫だろう?と思う。