Altera_Forum
Honored Contributor
8 years agoTimequest relating an external clock input to a virtual clock
Hello, I am having an understanding issue, and I am hoping for help. I have checked out Joe Martin's TimingClosureFieldguide, and Altera's TimeQuest Timing Analyzer Cookbook, and Ryan Scoville's TimeQuest User Guide.
Here is my situation: I have an Arria 5 communicating with a bunch of different peripherals (DDR3, ADC, Ethernet, JESD204 etc) all using clocks sourced from PLL's. So there are several clock domains. Now I want to add an FTDI FT600 USB peripheral, it supplies the clock, and the data. All read and write activity is clocked by the FT600 sourced clock. The clock is only present for a short time before the transaction to a short time after the transaction, so I cannot use a PLL to generate a clock from it. The clock is 100 MHz, and the board delay is about 1.2ns. I know the setup and hold times for data driving from the FPGA to the FT600, and the output delay and hold times of the FT600 driving data to the FPGA. The most general solution is to use a Virtual clock and then use an expression to calculate the input and output delay max and min values. This is explained in Example 12 of the Altera cookbook. However the bit I don't get is contained in these words out of the cookbook: # create the input clock create_clock -name clkA -period 10 [get_ports clkA]# create the associated virtual input clock create_clock -name clkA_virt -period 10 They say it is associated, but clkA is never referred to ever again. Same in the Ryan Scoville's examples. Nowhere is the real clock ever linked to the virtual clock. Now I am guessing here that Quartus might assume all 10ns clocks are related to each other. It is true that clkA is driving some logic which is then related to the inputs and outputs. However the phase relationship between the virtual clock and the real clock could be anything. I also have other 10ns clocks which have arbitrary phase to clkA (I use Fifos to transfer between the clock domains). So I have used clock_groups to separate the domains. However I have no clue how TimeQuest associates the virtual clock with the real clock, and sets a phase relationship between them. Can anyone explain this? Thanks, Bart Schroder