Usage of generated clocks

I am very new to FPGAs , sorry, if there is a place that explains this from the beginning (book or user guide).  I'll appreciate any pointers. I am trying to create a simple flip-flop, and I am using a 100MHZ clock:
My constraint file looks like this for that part:
set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { CLK100MHZ }];
create_clock -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports { CLK100MHZ }];
I want to use a clock that is divided by 2 (50MHZ) , so I looked around and there is a way to generate a clock derived from the primary one above, so I added the third line you see below to the above two lines:
set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { CLK100MHZ }];
create_clock -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports { CLK100MHZ }];
create_generated_clock -name clkdiv2 -source [get_ports CLK100MHZ] -divide_by 2 [get_pins REGA/Q];
How can I now use this clkdiv2 clock in my Verilog Design?. I am assuming I have to create an instance of REGA?
Something like this?:
module D_ff_behavior
        input D,
        input CLK100MHZ,
        output reg Q
    input wire clk_div_2; ???
    REGA REGA_FF(.D(??), .Q(clk_div_2),.C(CLK100MHZ))
    //assign LED1=CLK100MHZ;
    always @ (posedge clk_div_2)
        Q <= D;
endmodule

I was able to run a derived clock using the MMCM. I took the primary 100MHZ and obatined a 50MHZ (also re-did it for 5MHZ) and it worked. I used the Clock Wizard, which generates an MMCM with my desired characteristics, obviously I have to learn much more on the different choices, but made it to work, I downlod it (no warnings and no errors) and measured it with the oscilloscope and the clock signal measured what I set it to.
If there is something suspicious or a bad practice in this code, please let me know,
Below is the Constraint XDC File followed by the Verilog code, for the 5MHZ case (divided by 20):
# Swithch used for D
## Clock signal
set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { CLK100MHZ }];
create_clock -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports { CLK100MHZ }];
create_generated_clock -source [get_ports CLK100MHZ] -divide_by 20 [get_pins MMCM0_instance/clk_out1];
#Switche to set D of the simple D-FF
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports { D }];
#LED0 to see the output of the simple D FF
set_property -dict {PACKAGE_PIN H17 IOSTANDARD LVCMOS33} [get_ports { Q }];
# LED1 used to see the output of the divided clock
set_property -dict {PACKAGE_PIN K15 IOSTANDARD LVCMOS33} [get_ports { LED1 }];
Verilog Code:
`timescale 1ps / 1ps
// Module Name: D Flip Flop    
module D_ff_behavior
        input D,
        input CLK100MHZ,
        output reg Q,
        output LED1
    wire clk_div_2;
    assign LED1=clk_div_2;
    MMCM0 MMCM0_instance(.clk_in1(CLK100MHZ),.clk_out1(clk_div_2));
    always @ (posedge clk_div_2)
        Q <= D;
endmodule
I guss I still don;nt understand how are the commands in the XDC used. I mean didn't I configured the MMCM with clock Wizard?, why do I have to put the create_generated_clock _ command in the XDC file, I know there is a reason, I am just missing something, so far seems redundant info...
 

Similar Messages

  • How can I generate clock in labview 8.0 and use it for programming and for hardware?

    I have to generate clock for synchronizing hardware with my program, so I need to to use this clock inside the program and as an output from A/D. The clock frequency has to be aproximately 3kHz.  

    *Insufficient information*
    First of all, i suspect that you are somehow believing that software can be timed by external signals. That is normally not the case, at least if you are using a standard Desktop PC.
    So please do not mix software with "data acquisition". Data acquisition can be configured to be "buffered" which means externally clocked. You can use the onboard clock for this or (in case of most hardware) any other TTL compatible "clocksource". This will ensure a clocked acquisition of the samples. The samples are then transferred to your PC and stored there as an array. So your program has to fetch the data "in time", but not "hardwaretimed".
    So please share some more information about:
    -What is your task
    -What is the hardware you are using
    -Software versions (driver, LV)
    -What is your current approach
    thanks,
    Norbert
    [Edit] There is a difference between "softwaretimed" and "hardwaretimes" acquisition. What i described in my reply would be the hardwaretimed acquisition, which i would say make the majority of all acquisitions. Softwaretimed acquisition describes a single point acquisition where a single sample is requested by the software. So each time the software requests a new sample, it will be acquired. This method heavily depends on the performance of the systems and does most often not exceed  few kHz (maybe 2 or 3). Furthermore, if you do not have a realtime or fpga, the acquisition if not deterministic which means that the samples are not acquired in a "static timeframe"; the delta t is not constant.....
    Single point acquisition is only worth for very slow signals (most often up to 1kHz) or control circuits.
    Message Edited by Norbert B on 12-01-2009 04:11 AM
    CEO: What exactly is stopping us from doing this?
    Expert: Geometry
    Marketing Manager: Just ignore it.

  • Tablespace usage report generated with html tags instead of text

    Hi ,
    We have a unix shell script scheduled to find tablespace usage and sends the report to our mail id.
    For the past few weeks(no changes idone in the script) the report is coming with html tags instead of text as below.
    </head>
    <body>
    <p>
    <table border='1' width='90%' align='center' summary='Script output'>
    <tr>
    <th scope="col">
    TABLESPACE_NAME
    </th>
    <th scope="col">
    CUR_USE_MB
    </th>
    <th scope="col">
    CUR_SZ_MB
    </th>
    <th scope="col">
    CUR_PRCT_FULL
    </th>
    <th scope="col">
    FREE_SPACE_MB
    </th>
    <th scope="col">
    MAX_SZ_MB
    </th>
    <th scope="col">
    OVERALL_PRCT_FULL
    </th>
    </tr>
    <tr>
    <td>
    SYSTEM
    </td>
    <td align="right">
    268
    </td>
    <td align="right">
    500
    </td>
    <td align="right">
    54
    </td>
    Is this any settings issue or anything to be modified in the script.Could you please reply..
    Regards,
    Bharath.
    Edited by: 870384 on Jul 6, 2011 1:17 AM

    Hi Sven W,
    Please find the sql below that is generating the tablespace usage report. In the staring of the script markup is set to ON and at the end it is set to OFF.Do you suggest any changes to this..?
    SET ECHO OFF
    SET PAGES 999
    SET MARKUP HTML ON SPOOL ON
    col tablespace_name format a15 trunc
    col cur_use_mb for 999999999
    col cur_sz_mb for 999999999
    col free_space_mb for 999999999
    col max_sz_mb for 999999999
    compute sum of cur_use_mb on report
    compute sum of cur_sz_mb on report
    compute sum of free_space_mb on report
    compute sum of max_sz_mb on report
    break on report
    spool tablespace.html
    select tablespace_name,
    round(sum(total_mb)-sum(free_mb),2) cur_use_mb,
    round(sum(total_mb),2) cur_sz_mb,
    round((sum(total_mb)-sum(free_mb))/sum(total_mb)*100) cur_prct_full,
    round(sum(max_mb) - (sum(total_mb)-sum(free_mb)),2) free_space_mb,
    round(sum(max_mb),2) max_sz_mb,
    round((sum(total_mb)-sum(free_mb))/sum(max_mb)*100) overall_prct_full
    from (select tablespace_name,sum(bytes)/1024/1024 free_mb,0 total_mb,0 max_mb from DBA_FREE_SPACE group by tablespace_name
    union select tablespace_name,0 current_mb,sum(bytes)/1024/1024 total_mb,sum(decode(maxbytes, 0, bytes, maxbytes))/1024/1024 max_mb
    from DBA_DATA_FILES group by tablespace_name) a group by tablespace_name;
    select owner,segment_name,segment_type,bytes/(1024*1024) size_m
    from dba_segments
    where tablespace_name = 'SYSTEM' and segment_name='FGA_LOG$' order by size_m desc;
    spool off;
    SET MARKUP HTML OFF SPOOL OFF

  • AI Read sync'd to DAQCard-AI-16E-4 generated clock signal.

    I need to read multiple (3) analog input channels on a DAQCard-AI-16E-4.
    The device I am connecting to needs receive a clock signal to indicate that
    it should generate output. I want to send a signal and then read the three
    channels and then send the next signal. I will implement this in a loop so
    that I can read until a specified count of inputs has been received or until
    the user hits a stop button.
    Should I focus on using the SCANCLK, FREQ_OUT or simply use a digital out to
    output my clock?
    Which functions will I need to call in VB to do what I want? If someone
    could just list a command set that would do what I want it would really help
    point me in the right direction.

    Hi Don,
    Couple of quick questions first
    What sort of frequency do you want your loop to run at?
    How quickly after the trigger pulse do you want to read the outputs, are the outputs transients or steady state readings?
    Do you want to do this using the NI-DAQ API or the NI ComponentWorks ActiveX controls?
    Paul

  • Generating clock with vivado

    Hi,
    I am using Vivado with a ZedBoard  programming in VHDL (PL). The ZedBoard clock source for PL is 100Mhz. I need two clocks: clkgen1= 100kHz and clkgen2= 350Mhz to clock the FMC.
    How can I generate these clocks in Vivado? I know I can use PLL or Mmcm. Which one would be better?
    Is there any tutorial?
    Thank you.

    ---- Where can i read documentation about this?
    You can find documents about zed board in the following board’s link http://www.xilinx.com/support/university/boards-portfolio/xup-boards/XUPZedBoard.html .
    -------How can i do this in Vivado?
    Check whether the below thread applicable to your issue
    http://forums.xilinx.com/xlnx/board/crawl_message?board.id=GenDis&message.id=18987
    ________________________________________________

  • CPU usage while generating text output from reports

    hi
    while we attempt to generate the text (delimited) output from reports and when the query fetches more than 1500 rows, the cpu usage stays around 100% for long time paralysing the operation...
    we faced the problem when we attempted to generate text output for around 10000 records.
    any suggestions?
    ravi kumar chandran

    You can burst with eText and I have done it
    successfully.
    I don't believe pagebreaks are an option in eText and
    I don't think it makes sense either since your
    generating a flat-file and not a customer or internal
    facing document. Does that make sense?
    Also, if you would like you can use the
    BIPublisherIDE, this code can be converted pretty
    easily to handle jcp. There is a an oa framework
    version I have developed but I haven't posted on my
    blog yet. I plan on adding a bolt on for java
    concurrent programs soon. it's really pretty simple
    just haven't had the time.
    http://bipublisher.blogspot.com/2008/03/bi-publisher-b
    ipublisheride.html
    Ike Wiggins
    http://bipublisher.blogspot.com
    Thanks Ike for your reply.
    I agree with your points on TXT files, but in our case,the reports are generated in TXT format for the customer so we are looking for the above mentioned features.
    I have gone through BIP IDE and its a wonderful small utility which eases the task of BIP development.
    As I mentioned in my original post that we are currently processing the generated TXT report using a custom util. in JAVA to get the desired output in TXT again.
    I assume thats not what a JCP would do,so I am looking to explore that too.
    As I understand the process for report generation is
    1. Generate XSL from eTEXT template.
    2. Get the XML data from DB using XDO
    3. Apply XSL on XML to get the required template.
    If we are looking to achieve some customizations then we need to have the XSL generated with those customizations.
    In this case, where do we plug in the JCP to alter XSL or am I missing something.
    regards
    Gaurav

  • Generate clocked digital waveform

    I'm using a USB-6221.  I need to generate a waveform synchronized to an external clock.  I need to generate it once when a button is pushed.  The data is in the form of an integer, 8 bits.  So if the integer is 12 I want to generate 00110000 on one output channel synced to a clock input on another channel.  I've gone through the examples but I couldn't find how to specify the value of the waveform.  Any help would be appreciated!

    I started with the Example in the example finder "Write Dig Chan-Ext Clk.vi".  That creates a square wave on 8 channels.  I changed it to just one channel and replaced the square wave (basically counter output) to my 8-bit value.  See the attached GIFs.  The first is my modified "Write Dig Chan" program and the second is the "Create Dig Waveform" SubVI where I read in the 8-bit number I want to output on the channel.
    Message Edited by mperdue on 10-23-2007 02:47 PM
    Attachments:
    1.GIF ‏16 KB
    2.GIF ‏12 KB

  • Rise and Fall Time of Internally Generated Clock of NI 6110 (again not in Manual!)

    I want to know what are Fall/Rise times of the internal clock on NI 6110 DAQ board.
    They are not given in Manual (surprise!).

    Hello,
    You are correct. These specifications are not in the manual.
    However, the signal is TTL compatible and will conform to the following standards. For more specifications and details regarding the inner workings of the 6110 clock and timing signals, please refer to the STC User�s Manual. This manual covers many advanced topics that the general user�s manual leaves out.
    Best regards,
    Justin T.
    National Instruments

  • Using LPT to generate pulses

    hi..
    im new to labview,
    im trying to generate clock , strobe and data signals
    ( data to be user defined ) using the wave form generator function in LabView 7.1..the data has a different time period as compared to the other pulses..
    my end purpose is to use the parallel port to output these signals on an oscilloscope....
    could u please suggest how i should go about it?
    thank you,
    Sairaj.
    ps:i have attached the file tht generates the pulses, i have no idea how to use the parallel port after this, especially considering tht there are so many timing issues involved.Message Edited by Sairaj on 06-09-2005 01:00 AM
    Attachments:
    signal generator.vi ‏78 KB

    what a stupid shi...... - NI cancelled the attachment during preview post - here again.......
    hi retour,
    find attached a modified vi ( was for AD9835 - numerically controlled Oscillator ).
    You should be able to understand the principle and change these vi's for your needs.
    My intention was - to be fast and copy things together.................
    regards
    Werner
    Attachments:
    AD9835 SPI variation test1.zip ‏151 KB

  • Usage Report Results Confusion

    Hi Everyone,
    Here is some background before I ask my question:
    I set up a hierarchy and populated it VM entities no problem.  I set up my own basic pricing model that was based on "Actual Usage" and had no base rates, no fixed costs, no other costs, and no rules associated with it.  I ran a couple usage reports using this pricing model.
    The first usage report I generated on my hierarchy was for the time frame 11/06/2012  to  11/06/2013   (1 year) and the report produced results which I looked okay.  I only asked for it to show CPU, Memory, and Storage.
    So I my second usage report on the same hierarchy and for this one the time frame was set for 05/06/2013  to  11/06/2013  (6 months) and the the results produced almost exactly DOUBLE the usage for EVERY resource.
    I thought this was strange considering the time frames overlap and if anything the YEAR time span would have to have at least the same usage stats if not higher than the 6 month time span it includes.
    So, my question is, did I mess up the pricing model or billing policy somewhere to have this happen?  Or does the usage report generate on an average of some sort?
    I just can't figure out how this is possible.
    Thanks for any help in advance!
    -Richie

    Hi Richie,
    Can you please attach the pdf reports for the same issue and tell about the problematic VMs. I will try to give you an explanation for the same.
    Thanks,
    Aanjaneya

  • MIG clock frequency configuration

    Dear All,
    I have a question. I am generating MIG in VIVADO 2014.1 and I want to have clock period equal to 1250 ps which is generating clock with 800 MHZ for my SODIMM but I want to have memory controller work with 400 MHZ which means that PHY to controller clock ratio should be 2 but it does not have this option and it can be JUST 4 (it is disable and automatically it is selected as 4). 
    I know it might be different than standard but the question is that is there any way to have MIG which works with 800 MHZ SODIMM and has  memory controller working with 400 MHZ. 
    I was thinking to generate MIG with clock period = 400 MHZ but choose PHY to controller clock ratio = 2 then when it is generated then I can change the parameters of PLL to generate 800 MHZ instead of 400 MHZ. 
    if it is not recommended what else I can do ? 
    thanks for your prompt reply in advance, 
    Meysam

    Meysam -
    The Zynq Kintex-7 PL fabric is pretty fast, but asking a complicated memory controller and whatever logic interfaces with it to run at 400MHz is asking too much. The tool won't let you select 2:1 for that reason. You're going to have to either compromise on speed or on data width. Depending on PL fabric (Artix or Kintex) and speed grade, 400MHz is near or even beyond the maximum frequency for hard resources like block RAMs and DSP blocks (see data sheet). That's a good indication that you can't do much at that clock rate.
    Having a data path 512 bits wide is a little unwieldy, but the nice part is that this width matches the 64-byte burst size at the SODIMM. This simplifies your interface with the controller somewhat. If you really need 800MHz at the memory I don't think you have any choice.
    Good luck.

  • FPGA Base Clocks PCI-5640R

    Hi,
         I am using NI PCI-5640R. Following FPGA Base Clocks are available to me:
    (1)   Configuration_Clk
    (2)   RTSI_Ref_Clk
    (3)   DAC_0_IQ_Clk
    (4)   DAC_1_IQ_Clk
    (5)   ADC_0_Port_A_Clk
    (6)   ADC_1_Port_A_Clk
    Can anyone help me with brief descriptions of each clock? When these clocks are to be used?
    Kindly send me some URL links where I can find details about the usage of these clocks?
    Thanks and Regards,
    Rashid 
    Solved!
    Go to Solution.

    Hello Rashid,
    (1)   Configuration_Clk -  This is 20MHz onboard clock, which runs independently of the other clocks.  The role of the 20MHz configuration_clk is to provide a fixed frequecny configuration clock that is use by STC2 ASCI for PCI-DMA operations. Also this clock is not synchronized to the 200MHz VCXO or to the external clock
    (2)   RTSI_Ref_Clk - This is a device reference clock derived from 200MHz internal VCXO, by setting the dividing factor ranging from 1,2,4,8 and 16.
    The I/Q clocks are the signals that indicate the rate of the baseband data. These clocks indicate the rate of the data before the digital upconversion in DAC and the rate of the data after the digital downconversion for ADC. They are described as below.
    (3)   DAC_0_IQ_Clk and (4)   DAC_1_IQ_Clk -
        DAC_<i>_IQ_Clk = 2 ×  REFCLKDAC_<i> ×  Clock multiplierDAC_<i>  / InterpolationDAC_<i>
    where
    REFCLKDAC_<i> is the specified device reference clock / N2 or 3 CDC. Specify the divisor using the ni5640R CDC Program VI.
    Clock multiplierDAC_<i>(M) is equal to 1 or 4 ≤ M ≤ 20. Configure the clock multiplier using the ni5640R DAC Program VI.
    InterpolationDAC_<i> is the hardware interpolation rate determined by the DAC fixed 4× interpolator times a programmable 2× to 63× CIC interpolating filter. The programmable CIC interpolator can be configured using the ni5640R DAC Profile VI.
    (5)   ADC_0_Port_A_Clk and (6)   ADC_1_Port_A_Clk -
        ADC_<i>_Port_A_Clk =  ENCADC_<i> × Clock multiplierADC_<i> / (Predivide FactorADC_<i> × DecimationADC_<i>)
    where
    ENCADC_<i> is the device reference clock / N0 or 1 CDC. Specify the divisor using the ni5640R Configure Timebase VI.
    Clock multiplierADC_<i>(M) is equal to 1 or 4 ≤ M ≤ 20. Configure the clock multiplier using the ni5640R Input Port VI.
    Predivide FactorADC_<i> (N) is equal to 1, 2, 4, or 8. Configure the predivide factor using the ni5640R Input Port VI.
    DecimationADC_<i> is the decimation factor for a particular channel in the ADC. Decimation is performed in various filters throughout the processing channel. Each channel includes one CIC filter (decimates by 1 to 32), two FIR-HB filters (each decimates by 2), one DRC filter (decimates by 1 to 16) and one CRCF filter (decimates by 1 to 16). Configure all these filters using the ni5640R ADC Configure DDC VI. 
    The figure below shows how all the above clocks are derived
     Thanks
    NI-khil

  • Source Synchronous Input: Capture clock/Launch Clock analysis

    Hi, I have a Source Synchronous LVDS DDR input into a Kintex7, the launching clock is edge-aligned to the data and capture clock should capture on opposite edge (a launch on the rising edge should be captured by the falling edge). I have designed it to work at 100Mhz by compensating the clock insertion delay with a PLL (to save the MMCM for other purposes) using BUFH (the timing is not so tight to use BUFIO/BUFR). The PLL also centers the opposing edge on the data window by shifting -90°. Now the launching clock waveform is {5.0 0.0}, and the waveform generated by the PLL is {2.5 7.5}, this is reported correctly by Vivado. But when vivado analyses the setup path (I have set the proper set_input_delays) the following happens:
    -Launching clock rising edge is correctly at 5.0ns at the input data PIN.
    -Capture clock falling edge is INCORRECTLY 7.5ns AT THE CLOCK PIN.
    What I don't get is: why Vivado, that recognizes that the capture clock is a generated clock by the PLL, uses the {2.5 7.5} waveform AT THE CLOCK PIN, and not at the ouptut of the PLL BUFH. I mean the falling edge of the capture clock should be 7.5ns at the output of the BUFH, not at the input to the FPGA (I see that the PLL correctly shifts this 7.5ns to be 5ns at the BUFH, but this is not what actually happens).
    Doing the calculations manually the interface meets setup/hold with ease. I just want Vivado to make the proper analysis.

    I am not 100% certain I followed all your logic, but I think the issue is that you aren't following how clocks are treated in SDC/XDC.
    In Vivado/SDC/XDC, there are two separate concepts - clock phase, and clock propagation. For calculating how the launch/capture edge relationship is done, it is done based purely on phase - propagation does not factor in to it. Regardless of how they are generated, you have two clocks
      - the primary clock (generated by the create_clock command), which has a waveform of {0.0 5.0} (I am not sure why you say the opposite - {5.0 0} is not a meaningful representation in XDC)
      - the automatcially generated clock at the output of the PLL, which has edges at {2.5 7.5}. Its a little irrelevent how you defined it (with a +90 or -90 degree shift since the interface is DDR) - for the sake of argument, I will say its +90 degrees.
    First, recognize that when you define a DDR input and use an IDDR to capture it, you are defining four static timing paths - you have two startpoints, one from your set_input_delay and one from your set_input_delay -clock_fall -add_delay. You also have two endpoints, one from the rising edge clock at the IDDR and one at the falling edge of the IDDR. This generates 4 paths
      a) rising input -> falling IDDR
      b) falling input -> rising IDDR
      c) rising input -> rising IDDR
      d) falling input -> falling IDDR
    All four paths exist, and all are timed.
    Now you need to understand the rules that Vivado uses to determine launch and capture edges. For this system, it is easy - the capture edge is always the edge of the capture clock that is the earliest that follows the launch edge. So in this case (assuming launching is {0 5.0} and capture is {2.5 7.5} will be
      a) rise at 0 -> fall at 7.5
      b) fall at 5 -> to rise at 12.5 
      c) rise at 0 -> rise at 2.5 (this is the most critical one, so a) is irrelevent)
      d) fall at 5 -> fall at 7.5 (this is the most critical one, so b) is irrelevent)
    Now that it has determined the launch and capture edges for all the paths, it starts the propagation at the primary clocks. For your set_input_delay these are the clock pin. For the capture IDDR, the edge starts at the primary clock, propagates through the PLL (which adjusts it for clock propagation but not for the phase shift), and ultimately to the IDDR clock.
    Now, in a real system this is what is going to happen - I am not sure why you think this is incorrect. If, however, there is some reason to believe that c and d are false paths, then you have to declare them as such (which will then leave a and b as the ones that remain). To do this, you would work with a virtual clock - you would define TWO clocks - the primary clock to the clock pin, and an idential virtual clock for your set_input_delays
    # Create the real and virtual clock
    create_clock -period 10 -name real_clk [get_ports clk_pin]
    create_clock -period 10 -name virt_clk
    # Define the input delay with respect to both edges of the virtual clock
    set_input_delay <delay> -clock virt_clk [get_ports data_pin]
    set_input_delay <delay> -clock virt_clk [get_ports data_pin] -clock_fall -add_delay
    # Disable the rising to falling and falling to rising paths
    set_false_path -rise_from [get_clocks real_clk] -fall_to [get_clocks virt_clk]
    set_false_path -fall_from [get_clocks real_clk] -rise_to [get_clocks virt_clk]
    Even though "real_clk" and "virt_clk" are different clocks all clocks in Vivado are related by default, so the fact that they have the same period and starting phase (which defaults to {0 5.0}) then they are effectively the same clock.
    The reason for using the virtual clock is to make sure that if there is a rising to falling edge path inside the FPGA, you don't accidentally declare it false too - and these will happen between the IDDR and fabric logic (if it is in OPPOSITE_EDGE mode).
    I hope this is clear... It can be a bit confusing, but it does make sense.
    Avrum

  • Internal clock for the counter

    Hello everyone,
    I am new to NIDAQmx and I am doing angular position measurement. I found provided sample for the counter, 
    it says that I need to use external sample clock. Could someone provide me sample, that uses external clock that was generated by one task
    and another task which uses that generated clock and reads encoder input! I am doing it in C++.
    Thank you!!!

    Hello Khassan,
    Here is a link to a Developer Zone article that describes how to implement two tasks that share a clock, The example covers how to implement this with Analog input and output. You can work with it to fit it to your application: http://zone.ni.com/devzone/cda/epd/p/id/2352
    Reagards,
    -Travis E
    National Instruments
    Applications Engineer

  • Vivado 2014.2 MMCM and BUFGMUX multiple syncronous clock

    Hi,
    I am working on KC705 and I use Vivado 2014.2. The block diagram of the clocking structure and the system as below.
    I generated 3 clocks (250 MHz, 125 MHz, 62.5 MHz) from the input clock (250 MHz).  Because of the BUFG-BUFG error I select clocking wizard output with no buffer option. Then I select the clocks by using BUFGMUX. Finally, I have 4 clocks that I used in the whole design. All clocks should be synchronous to each other.
    How can I constraint these clocks? I tried to specify period seperately for each clock but the timing did not met.
    Thanks,
    Muhammet

    So, first, you don't need to add any constraints. You don't say how the clocks are generated, but I assume you are using an MMCM. If so, then the tool can derive all the clocks from the input clocks - simply do a create_clock on the input clock and all the other clocks will be automatically generated (you don't need any create_generated_clock commands).
    The multiplexed clock will be complicated - the output of the two cascaded BUFGMUXes will carry all three clocks; the 250, the 125 and the 62.5. The tools will actually perform timing analysis on all FFs on this domain 8 times - between each pair of clocks. But, since all the clocks are multiples of eachother, this will effectively constrain paths to the 250MHz clock.
    The paths between the multiplexed clock and all other clock domains will be effectively timed at 250MHz. Assuming that there are legal crossings between the MUXed clock and all three domains (regardless of which mode is selected for the MUXed clock), this too is correct. If there are some restrictions (like there will never be an active path from the MUXed domain to the 62.5MHz domain when the MUXed domain is selecting one of the faster clocks), then exceptions will be required to loosen the requirements on these paths.
    All that being said, this is a BAD thing to do in an FPGA. Having different outputs of an MMCM take paths through different numbers of BUFGs introduces very nasty clock skew between the different domains. This will result in huge hold time violations that need to be fixed between the un-MUXed domains and the MUXed domain. This will likely fail timing analysis, and even if it does pass, will require lots of extra routing resources to fix the hold violations.
    I am not entirely certain what you are trying to accomplish by using the different domains. Since the 250MHz clock can be selected, all logic will have to be able to run at that speed, so there is no timing advantage to using the slower domains. If the slower domains are needed for functional reasons, then, rather than using clock MUXing, I would suggest using a single BUFGCE for the "multiplexed" domain, driven by the 250MHz output of the MMCM, and enabling the CE all the time (for 250MHz operation), every other clock (for 125MHz operation), or every 4th clock (for 62.5MHz operation). Using the BUFGCE, no generated clocks will be created - the tool will view the BUFGCE as a simple clock buffer, and everything will end up being timed on the 250MHz domain. In this case, there is only one domain on the output of the BUFGCE (250MHz), rather than 3 clocks - this will actually speed up place and route (since there are less timing paths).
    All 4 domains will end up going through exactly one BUFG or BUFGCE (which are identical resources), and hence will have no extra clock skew - this will avoid the hold time issue I described above.
    The only caveat is if you are planning to use the falling edge of the "multiplexed" domain. In all modes, the clock will be high for only one half period of the 250MHz domain; for 250MHz operation this will result in a normal 50/50 duty cycle. For 125MHz, though, the duty cycle will only be 25% and for the 62.5 it will be 12.5%. Again, this is only an issue if you use the falling edge for clocking logic (which is a bad design practice) or if you use an IDDR or ODDR for interfaces.
    Avrum

Maybe you are looking for

  • EJB 3.0 Web Services - Custom Request/Response Wrappers

    Hi All, I'm having an issue using Document Literal Wrapped web services with EJB 3.0. I have declared a service endpoint interface(SEI) in one jar file, along with custom wrapper classes for the requests and responses. The wrappers have the XML conte

  • Calling Sql Loader In Apex

    Hi All, Is there any way to call the sql loader in Apex to load the table with csv data. Thanks in advance Dhan

  • I have put in a new sim and have no carrier available,no network,number unknown. but i know the sim works?

    Can you help please.. I have just put in a new sim from o2 the sim works in my other phone but not in my iphone 4, o2 tell me that it is the phone. I have no carrier available come up along with, no network, and number unknown. I cannot move my sim p

  • In query ( * )asterisk sign is populating instead of values.

    Hi, In a Bex Query,i have currency & units in key figures(it is calculated Key Figure),output is populating as(*)instead of values for some records.Many records it is populating the correct value.I have tried Currency conversion also but all the curr

  • Link in Document

    Hi All, I have a requirement to send a notification with a link to transaction code IW22 in it. I have made this using the activity step, but once the workitem is executed it will disappear from the receiver's inbox. Another alternative is to send th