added more constraints
makes it basically working, but still some pixel errors
This commit is contained in:
218
firebee1.sdc
218
firebee1.sdc
@@ -1,30 +1,47 @@
|
||||
## Generated SDC file "ddr.sdc"
|
||||
|
||||
## Copyright (C) 1991-2013 Altera Corporation
|
||||
## Your use of Altera Corporation's design tools, logic functions
|
||||
## and other software and tools, and its AMPP partner logic
|
||||
## functions, and any output files from any of the foregoing
|
||||
## (including device programming or simulation files), and any
|
||||
## associated documentation or information are expressly subject
|
||||
## to the terms and conditions of the Altera Program License
|
||||
## Subscription Agreement, Altera MegaCore Function License
|
||||
## Agreement, or other applicable license agreement, including,
|
||||
## without limitation, that your use is for the sole purpose of
|
||||
## programming logic devices manufactured by Altera and sold by
|
||||
## Altera or its authorized distributors. Please refer to the
|
||||
## applicable agreement for further details.
|
||||
|
||||
|
||||
## VENDOR "Altera"
|
||||
## PROGRAM "Quartus II"
|
||||
## VERSION "Version 13.1.0 Build 162 10/23/2013 SJ Web Edition"
|
||||
|
||||
## DATE "Fri Aug 22 11:04:42 2014"
|
||||
|
||||
##
|
||||
## DEVICE "EP3C16F484C8"
|
||||
##
|
||||
|
||||
#--------------------------------------------------------------#
|
||||
# #
|
||||
# Synopsis design constraints for the Firebee project #
|
||||
# #
|
||||
# This file is part of the Firebee ACP project. #
|
||||
# http://www.experiment-s.de #
|
||||
# #
|
||||
# Description: #
|
||||
# timing constraints for the Firebee VHDL config #
|
||||
# #
|
||||
# #
|
||||
# #
|
||||
# To Do: #
|
||||
# - #
|
||||
# #
|
||||
# Author(s): #
|
||||
# Markus Fröschle, mfro@mubf.de #
|
||||
# #
|
||||
#--------------------------------------------------------------#
|
||||
# #
|
||||
# Copyright (C) 2015 Markus Fröschle & the ACP project #
|
||||
# #
|
||||
# This source file may be used and distributed without #
|
||||
# restriction provided that this copyright statement is not #
|
||||
# removed from the file and that any derivative work contains #
|
||||
# the original copyright notice and the associated disclaimer. #
|
||||
# #
|
||||
# This source file is free software; you can redistribute it #
|
||||
# and/or modify it under the terms of the GNU Lesser General #
|
||||
# Public License as published by the Free Software Foundation; #
|
||||
# either version 2.1 of the License, or (at your option) any #
|
||||
# later version. #
|
||||
# #
|
||||
# This source is distributed in the hope that it will be #
|
||||
# useful, but WITHOUT ANY WARRANTY; without even the implied #
|
||||
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR #
|
||||
# PURPOSE. See the GNU Lesser General Public License for more #
|
||||
# details. #
|
||||
# #
|
||||
# You should have received a copy of the GNU Lesser General #
|
||||
# Public License along with this source; if not, download it #
|
||||
# from http://www.gnu.org/licenses/lgpl.html #
|
||||
# #
|
||||
################################################################
|
||||
|
||||
#**************************************************************
|
||||
# Time Information
|
||||
@@ -38,14 +55,48 @@ set_time_format -unit ns -decimal_places 3
|
||||
# Create Clock
|
||||
#**************************************************************
|
||||
|
||||
create_clock -name {main_clk} -period 30.303 -waveform { 0.000 15.151 } [get_ports {main_clk}]
|
||||
create_clock -name {clk33m} -period 30.303 -waveform {0.000 15.151} [get_ports {clk33m}]
|
||||
create_clock -name {MAIN_CLK} -period 30.303 -waveform { 0.000 15.151 } [get_ports {MAIN_CLK}]
|
||||
|
||||
# Clocks used:
|
||||
# MAIN_CLK 33MHz
|
||||
#
|
||||
# PLL1: i_mfp_acia_clk_pll
|
||||
# input: MAIN_CLK
|
||||
# c0: 500 kHz
|
||||
# c1: 2.4576 MHz
|
||||
# c2: 24.576 MHz
|
||||
#
|
||||
# PLL2: i_ddr_clock_pll
|
||||
# input: MAIN_CLK
|
||||
# c0: 132 MHz 190°
|
||||
# c1: 132 MHz 0°
|
||||
# c2: 132 MHz 180°
|
||||
# c3: 132 MHz 105°
|
||||
# c4: 66 MHz 270°
|
||||
#
|
||||
# PLL3: i_atari_clk_pll
|
||||
# input: MAIN_CLK
|
||||
# c0: 2 MHz
|
||||
# c1: 16 MHz
|
||||
# c2: 25 MHz
|
||||
# c3: 48 MHz
|
||||
#
|
||||
# PLL4_ i_video_clk_pll
|
||||
# input: USB_CLK (48 MHz, PLL3 c3)
|
||||
# c0: 96 MHz, programmable in 1MHz steps
|
||||
#
|
||||
#**************************************************************
|
||||
# Create Generated Clock
|
||||
#**************************************************************
|
||||
|
||||
derive_pll_clocks -create_base_clocks
|
||||
derive_pll_clocks
|
||||
|
||||
# PIXEL_CLK is either
|
||||
# CLK13M, CLK17M, CLK25M, CLK33M or CLK_VIDEO
|
||||
# where CLK13M is half of CLK25M,
|
||||
# CLK17M is half of CLK33M and CLK_VIDEO is the freely programmable
|
||||
# clock of i_video_clk_pll
|
||||
#
|
||||
|
||||
|
||||
#**************************************************************
|
||||
@@ -57,6 +108,9 @@ derive_pll_clocks -create_base_clocks
|
||||
#**************************************************************
|
||||
# Set Clock Uncertainty
|
||||
#**************************************************************
|
||||
|
||||
set_clock_uncertainty -rise_from [get_clocks {MAIN_CLK}] -rise_to [get_clocks {MAIN_CLK}] 2.00
|
||||
set_clock_uncertainty -rise_from [get_clocks {MAIN_CLK}] -fall_to [get_clocks {MAIN_CLK}] 2.00
|
||||
derive_clock_uncertainty
|
||||
|
||||
|
||||
@@ -64,15 +118,15 @@ derive_clock_uncertainty
|
||||
# Set Input Delay
|
||||
#**************************************************************
|
||||
|
||||
# constrain DDR RAM
|
||||
set_input_delay -clock [get_clocks {inst12|altpll_component|auto_generated|pll1|*}] 5ps [get_ports {VD*}]
|
||||
set_input_delay -add_delay -clock [get_clocks {MAIN_CLK}] -max 1.000 [all_inputs]
|
||||
|
||||
|
||||
#**************************************************************
|
||||
# Set Output Delay
|
||||
#**************************************************************
|
||||
|
||||
# constrain DDR RAM
|
||||
set_output_delay -clock [get_clocks {inst12|altpll_component|auto_generated|pll1|*}] 5ps [get_ports {VD*}]
|
||||
set_output_delay -add_delay -clock [get_clocks {MAIN_CLK}] -max 1.000 [all_outputs]
|
||||
|
||||
|
||||
#**************************************************************
|
||||
# Set Clock Groups
|
||||
@@ -84,61 +138,87 @@ set_output_delay -clock [get_clocks {inst12|altpll_component|auto_generated|pll1
|
||||
# Set False Path
|
||||
#**************************************************************
|
||||
|
||||
set_false_path -from [get_clocks {clk33m}] -to [get_clocks {main_clk}]
|
||||
set_false_path -from [get_clocks {main_clk}] -to [get_clocks {clk33m}]
|
||||
#
|
||||
# i_video_clk is freely programmable
|
||||
#
|
||||
set_false_path -from [get_clocks {MAIN_CLK}] -to [get_clocks {i_video_clk_pll|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
|
||||
# decouple video clk from all other clocks
|
||||
set_false_path -from [get_clocks {*}] -to [get_clocks {inst22|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
set_false_path -from [get_clocks {inst22|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {*}]
|
||||
# MAIN_CLK to 16 MHz clk -> false_path
|
||||
set_false_path -from [get_clocks {MAIN_CLK}] -to [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[1]}]
|
||||
set_false_path -from [get_clocks {MAIN_CLK}] -to [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[2]}]
|
||||
|
||||
# the same with clk25m
|
||||
set_false_path -from [get_clocks {*}] -to [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[2]}]
|
||||
set_false_path -from [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[2]}] -to [get_clocks {*}]
|
||||
# MAIN_CLK to DDR clk and v.v.
|
||||
set_false_path -from [get_clocks {MAIN_CLK}] -to [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
set_false_path -from [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {MAIN_CLK}]
|
||||
|
||||
set_false_path -from [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[4]}] -to [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[1]}]
|
||||
set_false_path -from [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[4]}] -to [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
set_false_path -from [get_clocks {i_mfp_acia_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {MAIN_CLK}]
|
||||
set_false_path -from [get_clocks {i_mfp_acia_clk_pll|altpll_component|auto_generated|pll1|clk[1]}] -to [get_clocks {MAIN_CLK}]
|
||||
|
||||
# 2 MHz to 33 MHz
|
||||
set_false_path -from [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {MAIN_CLK}]
|
||||
|
||||
# 16 MHz to 33 MHz
|
||||
set_false_path -from [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[1]}] -to [get_clocks {MAIN_CLK}]
|
||||
set_false_path -from [get_clocks {MAIN_CLK}] -to [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[1]}]
|
||||
|
||||
# 25 MHz to 33 MHz
|
||||
set_false_path -from [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[2]}] -to [get_clocks {MAIN_CLK}]
|
||||
set_false_path -from [get_clocks {MAIN_CLK}] -to [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[2]}]
|
||||
|
||||
set_false_path -from [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[2]}] -to [get_clocks {i_video_clk_pll|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
set_false_path -from [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[2]}] -to [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
|
||||
set_false_path -from [get_clocks {i_video_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {i_atari_clk_pll|altpll_component|auto_generated|pll1|clk[2]}]
|
||||
|
||||
set_false_path -from [get_clocks {i_video_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {MAIN_CLK}]
|
||||
set_false_path -from [get_clocks {MAIN_CLK}] -to [get_clocks {i_video_clk_pll|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
|
||||
set_false_path -from [get_clocks {i_video_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
|
||||
set_false_path -from [get_keepers {*rdptr_g*}] -to [get_keepers {*ws_dgrp|dffpipe_id9:dffpipe17|dffe18a*}]
|
||||
set_false_path -from [get_keepers {*delayed_wrptr_g*}] -to [get_keepers {*rs_dgwp|dffpipe_hd9:dffpipe12|dffe13a*}]
|
||||
set_false_path -from [get_keepers {*rdptr_g*}] -to [get_keepers {*ws_dgrp|dffpipe_kd9:dffpipe15|dffe16a*}]
|
||||
set_false_path -from [get_keepers {*delayed_wrptr_g*}] -to [get_keepers {*rs_dgwp|dffpipe_jd9:dffpipe12|dffe13a*}]
|
||||
set_false_path -from [get_keepers {*rdptr_g*}] -to [get_keepers {*ws_dgrp|dffpipe_re9:dffpipe19|dffe20a*}]
|
||||
|
||||
|
||||
set_false_path -from [get_clocks {main_clk}] -to [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[1]}]
|
||||
set_false_path -from [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[1]}] -to [get_clocks {main_clk}]
|
||||
|
||||
set_false_path -from [get_clocks {inst12|altpll_component|auto_generated|pll1|*}] -to [get_clocks {main_clk}]
|
||||
set_false_path -from [get_clocks {main_clk}] -to [get_clocks {inst12|altpll_component|auto_generated|pll1|*}]
|
||||
|
||||
set_false_path -from [get_clocks {inst12|altpll_component|auto_generated|pll1|clk[4]}] -to [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[1]}]
|
||||
|
||||
set_false_path -from [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[1]}] -to [get_clocks {inst12|altpll_component|auto_generated|pll1|clk[4]}]
|
||||
|
||||
set_false_path -from [get_clocks {inst12|altpll_component|auto_generated|pll1|clk[4]}] -to [get_clocks {inst12|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
set_false_path -from [get_clocks {inst12|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {inst12|altpll_component|auto_generated|pll1|clk[4]}]
|
||||
|
||||
set_false_path -from [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {main_clk}]
|
||||
set_false_path -from [get_clocks {main_clk}] -to [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
|
||||
set_false_path -from [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {clk33m}]
|
||||
set_false_path -from [get_clocks {clk33m}] -to [get_clocks {inst13|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
|
||||
set_false_path -from [get_clocks {clk33m}] -to [get_clocks {inst12|altpll_component|auto_generated|pll1|clk[0]}]
|
||||
|
||||
set_false_path -from [get_clocks {inst|altpll_component|auto_generated|pll1|clk[1]}] -to [get_clocks {main_clk}]
|
||||
|
||||
set_false_path -from [get_clocks {inst|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {main_clk}]
|
||||
#**************************************************************
|
||||
# Set Multicycle Path
|
||||
#**************************************************************
|
||||
|
||||
|
||||
|
||||
#**************************************************************
|
||||
# Set Maximum Delay
|
||||
#**************************************************************
|
||||
|
||||
# from here to the end of the file statements are just an experiment
|
||||
|
||||
#set_max_delay 25 -from [get_ports {*}]
|
||||
|
||||
#**************************************************************
|
||||
# Set Minimum Delay
|
||||
#**************************************************************
|
||||
|
||||
|
||||
#set_min_delay 0.5 -from [get_ports {*}]
|
||||
|
||||
#**************************************************************
|
||||
# Set Input Transition
|
||||
#**************************************************************
|
||||
#set_input_delay -max -clock [get_clocks {MAIN_CLK}] [get_pins {*}] 25
|
||||
#set_input_delay -min -clock [get_clocks {MAIN_CLK}] [get_pins {*}] .5
|
||||
#set_output_delay -max -clock [get_clocks {MAIN_CLK}] [get_pins {*}] 25
|
||||
#set_output_delay -min -clock [get_clocks {MAIN_CLK}] [get_pins {*}] .5
|
||||
|
||||
# restrict timing of video controller
|
||||
|
||||
#set_output_delay -min -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.1 [get_ports {VA[*]}]
|
||||
#set_output_delay -max -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.2 [get_ports {VA[*]}]
|
||||
|
||||
#set_output_delay -min -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.1 [get_ports {BA[*]}]
|
||||
#set_output_delay -max -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.2 [get_ports {BA[*]}]
|
||||
|
||||
#set_output_delay -min -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.1 [get_ports {VD[*]}]
|
||||
#set_output_delay -max -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.2 [get_ports {VD[*]}]
|
||||
#set_input_delay -min -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.1 [get_ports {VD[*]}]
|
||||
#set_input_delay -max -clock [get_clocks {i_ddr_clk_pll|altpll_component|auto_generated|pll1|clk[0]}] 0.2 [get_ports {VD[*]}]
|
||||
|
||||
Reference in New Issue
Block a user