一般來說,FPGA與MCU不同的地方,是FPGA由很多邏輯匣構成,如加法器,減法器,乘法器等等,當然如果要連在一起,輸出及輸入的腳位一定要定義好,故Vivado就用XDC檔來定義每個腳位要做什麼,這裡有兩個板子,分別做不同的功能,所以有要兩個不同的XDC檔,當然claude code也已經產生好,就開啟Vivado,把腳位定義加上去:
Board A 的 Constraints 檔案 CmodA7_Master.xdc。這是告訴 Vivado 哪條線接哪個腳。
(以下針對 Cmod A7-35T 的標準腳位)
## 12 MHz Clock Signal
set_property -dict { PACKAGE_PIN L17 IOSTANDARD LVCMOS33 } [get_ports { sysclk }];
create_clock -add -name sys_clk_pin -period 83.33 -waveform {0 41.66} [get_ports { sysclk }];
## LEDs
set_property -dict { PACKAGE_PIN A17 IOSTANDARD LVCMOS33 } [get_ports { led[0] }]; # LED 1
set_property -dict { PACKAGE_PIN C16 IOSTANDARD LVCMOS33 } [get_ports { led[1] }]; # LED 2
## PIO Pins (DIP Header)
## 我們使用 Pin 1 (PIO1) 和 Pin 2 (PIO2)
set_property -dict { PACKAGE_PIN M3 IOSTANDARD LVCMOS33 } [get_ports { pio1 }]; # Pin 1
set_property -dict { PACKAGE_PIN L3 IOSTANDARD LVCMOS33 } [get_ports { pio2 }]; # Pin 2
Board B的 XDC Constraints - CmodA7_RX.xdc
為了保險起見,請檢查您的 XDC 檔案是否包含以下所有行。如果有缺漏,FPGA 就會有一部分不工作。
## Clock Signal
set_property -dict { PACKAGE_PIN L17 IOSTANDARD LVCMOS33 } [get_ports { sysclk }];
create_clock -add -name sys_clk_pin -period 83.33 -waveform {0 41.66} [get_ports { sysclk }];
## LEDs (Visual Feedback)
set_property -dict { PACKAGE_PIN A17 IOSTANDARD LVCMOS33 } [get_ports { led[0] }];
set_property -dict { PACKAGE_PIN C16 IOSTANDARD LVCMOS33 } [get_ports { led[1] }];
## Input Signals
# Pin 1 (Complex Signal from Board A)
set_property -dict { PACKAGE_PIN M3 IOSTANDARD LVCMOS33 } [get_ports { pio1_in }];
# Pin 2 (10MHz Ref from Board A)
set_property -dict { PACKAGE_PIN L3 IOSTANDARD LVCMOS33 } [get_ports { pio2_in }];
## UART Output (To PC via USB)
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { uart_txd_out }];
## Flash Configuration (重要!確保燒錄後能開機)
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 33 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
最後產生 Bitstream 並燒錄。