ในอินเทอร์เฟซเอาต์พุตซิงโครนัสต้นทาง FPGAจะส่งสัญญาณนาฬิกาสําหรับอุปกรณ์ปลายทาง ในอินเทอร์เฟซที่ซิงโครนัสต้นทางที่จัดชิดกึ่งกลาง การเปลี่ยนนาฬิกาจะเกิดขึ้นตรงกลางของหน้าต่างข้อมูลที่ถูกต้อง รูปภาพที่ 1 แสดงอินเทอร์เฟซเอาต์พุตซิงโครนัสต้นทางตัวอย่าง
ใช้ขั้นตอนต่อไปนี้เพื่อจํากัดอินเทอร์เฟสเอาต์พุตซอร์สซิงโครนัสที่จัดแนวตรงกลาง:
- สร้างนาฬิกาพื้นฐานและที่สร้างขึ้น
- เพิ่มข้อจํากัดความล่าช้าของเอาต์พุต
- เพิ่มข้อยกเว้นพาธเท็จเพื่อแยกพาธที่ไม่ถูกต้องออกจากการวิเคราะห์และการรายงานเวลา
สําหรับรายละเอียดเพิ่มเติมเกี่ยวกับขั้นตอนเหล่านี้ หรือการคํานวณและข้อจํากัดที่อธิบายไว้ด้านล่าง โปรดดูAN 433: ข้อจํากัดและการวิเคราะห์ Source-Synchronous Interfaces (PDF)
นาฬิกา
ต้องระบุสัญญาณนาฬิกาฐานบนพอร์ตอินพุตของFPGA
ต้องระบุนาฬิกาที่สร้างขึ้นบนเอาต์พุตลูปแบบล็อกเฟส (PLL) ทั้งหมด เอาต์พุตซิงโครนัสที่จัดให้มีอัตราข้อมูลเป็นสองเท่าของศูนย์ข้อมูลจะเปลี่ยนสัญญาณนาฬิกาออก 90 องศาเมื่อเปรียบเทียบกับสัญญาณนาฬิกาข้อมูล
ต้องระบุนาฬิกาที่สร้างขึ้นบนพอร์ตนาฬิกาเอาต์พุตของFPGA นาฬิกาที่สร้างขึ้นคือข้อมูลอ้างอิงสัญญาณนาฬิกาสําหรับค่าความล่าช้าของเอาต์พุตสําหรับบัสข้อมูล
ข้อจํากัดความล่าช้าของเอาต์พุต
คุณสามารถใช้ข้อมูลจําเพาะการเบลอสูงสุดเพื่อคํานวณค่าความล่าช้าของเอาต์พุต ข้อมูลจําเพาะการเบลอสูงสุดแสดงถึงความผันแปรของเวลาที่อนุญาตสําหรับแต่ละบิตของบัสข้อมูลเพื่อไม่ให้FPGA
ค่าความหน่วงสูงสุดของเอาต์พุตคือ (หน่วยที่ใช้/ 2) -ค่าการเบี่ยงเบนสูงสุด
ค่าความหน่วงต่ําสุดของเอาต์พุตคือ ค่าการเบี่ยงเบนสูงสุด - (1.5 * หน่วยที่จ่าย)
ข้อยกเว้นพาธเท็จ
ในตัวอย่างที่จัดไว้ตรงกลางนี้ ข้อมูลจะถูกถ่ายโอนไปยังต้นทางที่เพิ่มขึ้นและลดลงและการเปลี่ยนผ่านของนาฬิกาปลายทาง ใช้ข้อยกเว้นพาธเท็จเพื่อลดการเปลี่ยนผ่านนาฬิกาที่เพิ่มขึ้นและลดลง เนื่องจากข้อมูลจะไม่ถูกถ่ายโอนในการเปลี่ยนผ่านนาฬิกาบนขอบตรงข้าม
ไฟล์ SDC ตัวอย่าง
# Create a base clock on the input port of the FPGA, with a 10 ns period
create_clock -name input_clock -period 10 [get_ports clk_in]
# Create generated clocks on the PLL outputs
# Output clk[0] drives the data register
# Output clk[1] drives the output clock port with a 90 degree shift
create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \
[get_pins pll|clk[0]]
create_generated_clock -name clock_clock -phase 90 -source [get_pins pll|inclk[0] \
[get_pins pll|clk[1]]
# Create the generated clock on the output clock port of the FPGA
create_generated_clock -name output_clock -source [get_pins pll|clk[1]] \
[get_ports clk_out]
# Add maximum and minimum output delay constraints
# assuming a skew requirement of +/- 250ps
# Use the equations for the output delay values listed above
set_output_delay -max -clock output_clock [expr { (5 / 2) - 0.250 }] \
[get_ports data_out*]
set_output_delay -max -clock output_clock -clock_fall \
[expr { (5 / 2) - 0.250 }] [get_ports data_out*] -add
set_output_delay -min -clock output_clock [expr { (0.250 - (1.5 * 5) }] \
[get_ports data_out*]
set_output_delay -min -clock output_clock -clock_fall \
[expr { (0.250 - ( 1.5 * 5 ) }] [get_ports data_out*] -add
# Add false path exceptions for cross-clock transfers
set_false_path -setup -end -rise_from [get_clocks data_clock] \
-fall_to [get_clocks output_clock]
set_false_path -setup -end -fall_from [get_clocks data_clock] \
-rise_to [get_clocks output_clock]
set_false_path -hold -end -rise_from [get_clocks data_clock] \
-fall_to [get_clocks output_clock]
set_false_path -hold -end -fall_from [get_clocks data_clock] \
-rise_to [get_clocks output_clock]