Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarAprMayJunJulAugSepOctNovDec2017
2018JanFebMarAprMayJunJulAugSepOctNovDec2018
2019JanFebMarAprMayJunJulAugSepOctNovDec2019
2020JanFebMarAprMay2020

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search

Messages from 92175

Article: 92175
Subject: Re: Design Implementation in Xilinx XST
From: Aurelian Lazarut <aurash@xilinx.com>
Date: Wed, 23 Nov 2005 16:04:20 +0000
Links: << >>  << T >>  << A >>
Tim Good wrote:

> Jeremy Wood wrote:
>
>> Greetings everyone,
>>
>> I've recently started working on FPGA designs and was wondering if
>> there is a way to get timing reports and synthesis results from the
>> Xilinx software that don't include I/O pin mapping. I'm trying to
>> constrain several blocks for testing purposes, but these modules will
>> all be internal to the design and won't be connected directly to the
>> pins. However, it seems the tools automaically assume these
>> connections, which is adding extra delay than what will really be
>> there. Is there a way to tell the tool to ignore physical pin
>> connections and use, say, simulated register I/O connections instead?
>>
>> Sorry if this seems like a silly question, I'm still getting the hang
>> of synthesis yet.
>>
>> Thanks in advance,
>> Jeremy
>
>
> Hi Jeremy,
>
> Under Synthesis properties (right hand click synthesis in the tool 
> chain view), select the Xilinx Specific Options tab then untick "Add 
> I/O buffers" and you should be where you want to be!
>
> As a note you may also wish to select "Advanced options" to allow more 
> control over the tools (from the menu bar Edit > Preferences > 
> Processes > PropertyDisplayLevel change to Advanced).
>
> However, more realistic timing can often be obtained by placing you 
> design unit (presumably will ultimately be located deep within your 
> design, eg a super fast multiplier) between registers, adding timing 
> constraints and use the static timing report....
>
> All the best,
>
> Tim

Just want to add, when you disable IO to be added by XST you need to let 
MAP know not to trim out all the design (for MAP a design with no 
external connections doesn't make sense) by giving -u as  a comand line 
option, or from ISE by displaying the MAP process proprieties and 
disable the "Trim unconnected signals".

Aurash

-- 
 __
/ /\/\ Aurelian Lazarut
\ \  / System Verification Engineer
/ /  \ Xilinx Ireland
\_\/\/
 
phone:	353 01 4032639
fax:	353 01 4640324
    
     

Article: 92176
Subject: Support for runtime reconfiguration
From: cacosta <c.acosta@sms.ed.ac.uk>
Date: Wed, 23 Nov 2005 08:06:09 -0800
Links: << >>  << T >>  << A >>
Hi!,

I am a new pg student working on parallelism and FPGA programming. My interest is working at the highest level possible, at algorithmic and system level. I have been looking at libraries as JHDL and SustemC, and languages as Handel-C and Verilog. I am involved in a research project for developing IP core using a hardware/software approach (co-design and co-simulation). Because I must start as soon a s possible and want to use the latest about techniques, methods, methodologies and technology I need someone helps giving some information about the following:

1. What Is Runtime reconfiguration, partial reconfiguration or dynamic reconfiguration?. 2. How Does dynamic reconfiguration works at hardware and software level? 3. To take advantage of dynamic reconfiguration Do I need the software tool or fpga board supports dynamic reconfigration?. 4. Is it possible to exploit dynamic reconfiguration at high level Programming level ? I mean, Can programmer users do this? 5. Does SystemC support dynamic reconfiguration? and Handel-C? Can I develop applications using rutime reconfiguration with SystemC? 6. May someone recommend me any FPGA Board from Xilinx, Altera or Celoxica supports runtime reconfiguration? 7. What about any FPGA Development Kit supports runtime reconfiguration based on C/C++?

I thank if you can help explaining me all about this or giving me documents or links to find this. I trust your advice. I am sorry for the troubles in advance.

Thanks a lot. Carlos

Article: 92177
Subject: Re: Xst optimizes almost everything away
From: "Mike Treseler" <mike_treseler@comcast.net>
Date: Wed, 23 Nov 2005 08:09:45 -0800
Links: << >>  << T >>  << A >>
Adrian Knoth wrote:

> Wouldn't rising_edge (update_input) do the job? Or falling_edge (),
> if I need to know whether a signal was once set and is now off

Not for synthesis.
Here is a similar example with just one clock.
http://home.comcast.net/~mike_treseler/rise_count.vhd
Note the synthesis template at the end of the file.

  -- Mike Treseler

Article: 92178
Subject: Re: Simulating PLB DDR in EDK 7.1 SP2 using ModelSim 6.0a
From: Duane Clark <dclark@junkmail.com>
Date: Wed, 23 Nov 2005 16:13:26 GMT
Links: << >>  << T >>  << A >>
Nju Njoroge wrote:
> Hello,
> 
> Is there an existing flow for simulating PLB DDR in ModelSim using EDK
> 7.1 SP2 in a full system (PPCs, pcores,etc)? The instructions are being
> stored in BRAMs, as to avoid DDR initialization hassles. I have been
> simulating the data-only DDR using BRAMs, however, to get a more
> accurate depiction of the system, I would like to use DDR in
> simulation.

Sure you can simulate that. Do you have the DDR memory simulation 
models? If not, Micron provides good models on their web site for the 
individual chips. Other than that, a specific question of what it is you 
are having trouble with would help; your question is too vague to me (or 
maybe I am overlooking something).

Article: 92179
Subject: Re: Case expression?
From: "Fred" <fred@nowhere.com>
Date: Wed, 23 Nov 2005 16:24:42 -0000
Links: << >>  << T >>  << A >>

<allanherriman@hotmail.com> wrote in message 
news:1132755671.168114.85490@g49g2000cwa.googlegroups.com...
> allanherri...@hotmail.com wrote:
>> Fred wrote:
>> > <allanherriman@hotmail.com> wrote in message
>> > news:1132749283.568506.23210@g49g2000cwa.googlegroups.com...
>> > > allanherri...@hotmail.com wrote:
>> > >> You either wait for the next rev of VHDL (and then wait a couple of
>> > >> years for the tools to catch up), or you use a temporary variable. 
>> > >> I
>> > >> don't know of any other way.
>> > >
>> > > Another way would be to use Verilog.
>> > >
>> >
>> > Unfortunately in the UK you're more employable if you know VHDL.  I 
>> > have
>> > written in Verilog and quite like the C type structure.  Since I'd like 
>> > to
>> > pay my bills I feel tied to VHDL.
>>
>> You're even more employable if you have a strong knowedge of both.
>
> ... and even more employable if you can spell.
>

Even more more so it can see your own mistakes before anyone else! 



Article: 92180
Subject: Re: XST vs Synplify
From: amyler@eircom.net
Date: 23 Nov 2005 08:24:50 -0800
Links: << >>  << T >>  << A >>
Hi Francesco,

I've recently used XST without problems on a Spartan-II with 99% logic
utilisation.
That's using VHDL. Max. clock speed was 100Mhz. So XST gets my vote.

Alan



francesco_poderico@yahoo.com wrote:
> Hi all,
> I wish to have an idea about how many people here uses Synlify or
> Leonardo and how many people uses XST.
> The purpose of that is undesrtand how many people here beleave that XST
> is a mature product and it can be trusted or not.
> At moment I'm tryng to use XST for a small FPGA (spartan 2E 150) and
> I'm having a lot of trouble.
> (I have several years of experience and I made design very complex)
>
> For example the xapp807 has source file in VHDL and in Verilog. when I
> use the verilog version it works fine, but when I use the VHDL version
> it is unrelaible. 
> 
> Hope to have feedback from you.
> Francesco


Article: 92181
Subject: Re: Xilinx clock IOB Place Error 645
From: "Brad Smallridge" <bradsmallridge@dslextreme.com>
Date: Wed, 23 Nov 2005 08:28:29 -0800
Links: << >>  << T >>  << A >>
And then there is this:

 cam1_dcmfx2 : dcmfx2
 port map(
  clkin_n_in   => gpio_exp_hdr2(6), -- cam1_xclk,
  clkin_p_in   => gpio_exp_hdr2(7), -- cam1_xclk,
  rst_in       => reset,
  clkfx_out    => cam1_clk7x,
  clkin_ibufgds_out  => open,
  clk0_out     => cam1_xclk,
  locked_out   => cam1_lock7x );

generated clock with external differential inputs selected 



Article: 92182
Subject: Re: FPGA and metastability once again
From: "Peter Alfke" <peter@xilinx.com>
Date: 23 Nov 2005 08:39:12 -0800
Links: << >>  << T >>  << A >>
Vladimir,
at the frequencies mentioned, the decision-making flip-flop will go
metastable, which means it will occasionally have an unpredictable
extra delay.
It will have an extra 2.0 ns delay statistically once every 2 weeks. It
will have an extra 2.5 ns extra delay roughly once every 20 000 years.
For every extra 100 ps additional delay, the mean-time-between-failure
(MTBF) increases by more than a factor 10. See my Xilinx app note
XAPP094 for more details. Don't worry about strange levels. It's the
unpredictable extra delay that is the problem.
Peter Alfke, Xilinx Applications


Article: 92183
Subject: Re: Design Implementation in Xilinx XST
From: Jeremy Wood <serith2@charter.net>
Date: Wed, 23 Nov 2005 10:51:05 -0600
Links: << >>  << T >>  << A >>
Thanks for the help guys, its exactly what I was looking for. 

And Tim is right, I won't be getting realistic timing results unless I
load my inputs and outputs with registers. But at least I won't have
to worry about 132 I/O pin mappings that won't even be there affecting
my delay.

Thanks again

Jeremy

Article: 92184
Subject: Re: Case expression?
From: Rick Jackson <nospam@nospam.com>
Date: Wed, 23 Nov 2005 17:05:03 +0000
Links: << >>  << T >>  << A >>
On Wed, 23 Nov 2005 12:05:56 -0000, "Fred" <fred@nowhere.com> wrote:

>For simplicity I would like to do the following
>
>CASE (bit1 & bit2 & bit3) IS

case SLV3'(bit1 & bit2 & bit3) is

where SLV3 is

subtype SLV3 is std_logic_vector(2 downto 0);

or just put in the full subtype expression instead of SLV3 if you want
to.

HTH

Rick

Article: 92185
Subject: Re: Modelsim Verification : Retain FSM state names
From: Brian Philofsky <brian.philofsky@no_xilinx_spam.com>
Date: Wed, 23 Nov 2005 10:09:30 -0700
Links: << >>  << T >>  << A >>


This can be done if you manually encode the state-machine and then in 
the testbench apply descriptive ASCII text to the state-machine states 
in a separate variable.

For instance, if you describe the following state-machine in your source 
code:

    parameter START      = 3'b0001;
    parameter WAIT       = 3'b0010;
    parameter START_OVER = 3'b0100;

    (* FSM_ENCODING="USER" *) reg [2:0] state = BEGIN;

    always@(posedge CLK) begin
       if (RST) begin
          state <= START;
          state_out <= 1'b0;
       end
       else
          case (state) (* FULL_CASE, PARALLEL_CASE *)
             START : begin
                if (state_input)
                   state <= WAIT;
                else
                   state <= START;
                state_out <= 1'b0;
             end
             WAIT : begin
                if (!state_input)
                   state <= START_OVER;
                else
                   state <= WAIT;
                state_out <= 1'b0;
             end
             START_OVER : begin
                state <= START;
                state_out <= 1'b1;
             end
          endcase

And add the following to your testbench:

   reg [8*10:0] state_decode;

   always @(testbench.uut.state)
      if (testbench.uut.state == 3'h001)
          state_decode = "BEGIN";
      else if (testbench.uut.state == 3'h010)
          state_decode = "WAIT";
      else if (testbench.uut.state == 3'h100)
          state_decode = "START_OVER";
      else
          state_decode = "UNKNOWN";


You can then either add the state_decode to your waveform and tell the 
simulator to display it as ASCII or you can place a $monitor onto the 
state_decode and have it display this information to the console.  This 
should work for both functional and place & route simulation if you 
control the state-mapping which is done above by implicitly stating the 
mapping and using the synthesis option FSM_ENCODING="USER" (for XST in 
this case) which says to the synthesis tool, do not mess with my 
state-machine mapping.  I have used this technique on a few designs and 
do find it useful but you need to make sure that the mapping you choose 
for your state-machine is optimal or else you may not get the best 
implementation when doing this.  This also works best when using a 
hierarchical simulation method but is not necessary if you want to 
slightly adjust your testbench between behavioral and timing simulation.

--  Brian



Bob Perlman wrote:
> On 21 Nov 2005 18:33:09 -0800, ajeetha@gmail.com wrote:
> 
> 
>>Bob,
>>   I also follow that in old Verilog. Thanks to SV, we have enums.
>>However the OP asked about Post place-and-route sim, hence this trick
>>won't help much. One needs to build equivalent signal names and enum
>>mapping. I believe MTI's virtual bus fits the bill better.
>>
>>Regards
>>Ajeetha
>>www.noveldv.com
> 
> 
> My mistake--I missed the part about post-place-and-route.
> 
> Bob Perlman
> Cambrian Design Works

Article: 92186
Subject: Re: Case expression?
From: Jonathan Bromley <jonathan.bromley@doulos.com>
Date: Wed, 23 Nov 2005 17:11:23 +0000
Links: << >>  << T >>  << A >>
On Wed, 23 Nov 2005 14:05:39 -0000, "Fred" <fred@nowhere.com> wrote:

>
><allanherriman@hotmail.com> wrote in message 
>news:1132748877.058204.324060@g47g2000cwa.googlegroups.com...
>> Fred wrote:
>>> For simplicity I would like to do the following
>>>
>>> CASE (bit1 & bit2 & bit3) IS

>>> bit1 to 3 are "std_logic".  How do I concatenate these "bits" in a CASE
>>> statement without having an intermediate array?

>I've used a temporary variable but it's not so readable.  Shame really to 
>have to do it. 

Probably the nicest way is to declare a subtype - you can do this
locally in the process, so it doesn't pollute the architecture.
Then type-qualify the expression:

process (...) 
  [other declarations]
  subtype SLV3 is std_logic_vector(2 downto 0);
begin
  ...
  CASE SLV3'(bit1 & bit2 & bit3) IS
    ...

Note the apostrophe between subtype name and 
opening parenthesis.

Depending on the application, you may be able to think of
a more apt name for the subtype.

HTH
-- 
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL, Verilog, SystemC, Perl, Tcl/Tk, Verification, Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, BH24 1AW, UK
Tel: +44 (0)1425 471223          mail:jonathan.bromley@doulos.com
Fax: +44 (0)1425 471573                Web: http://www.doulos.com

The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.

Article: 92187
Subject: virtex II global buffer
From: vera.monaco@infinito-dot-it.no-spam.invalid (zora)
Date: Wed, 23 Nov 2005 11:16:09 -0600
Links: << >>  << T >>  << A >>
Hi
I need to use more than 8 global buffer in a virtex II design.
I know that VirtexII supports up to 16 Global Buffer divided in more
clock regions, but ISE PAR doesn't automatically divide project in
two (or more) clock region and it uses only 8 global buffer. How can
I use the other global buffer?


Article: 92188
Subject: Bidirectional Bus
From: vera.monaco@infinito-dot-it.no-spam.invalid (zora)
Date: Wed, 23 Nov 2005 11:16:09 -0600
Links: << >>  << T >>  << A >>
Hi
I want to correlate my question to Chintan's problem and Alex answer.
I usually use the method suggested by Alex to handle a bidirectional
bus, but post PAR simulation (using modelsim) shows the signals on
the bus delayed of about 12 ns and undefined for the next 5-6 ns
before to begin stable.   When bus comes back in Z state there's also
a period of instability of 5-6 ns. 

The bus default state is 'Z'.  It changes state during writing and
readind operation. 
Microprocessor interface operations use a clock of 80Mhz, but writng
operation from FPGA to Micro is asynchornous. 

I have also noted that this time of instability decreases (to 2-3 ns)
when I do PAR whit High Effort Level. 

Is this a normal situation? or It should be better to investigate  for
the origin of the instability.


Article: 92189
Subject: Re: Microblaze and custom peripherals
From: "ssirowy@gmail.com" <ssirowy@gmail.com>
Date: 23 Nov 2005 09:34:29 -0800
Links: << >>  << T >>  << A >>
My ultimate goal is to try and investigate  how much of an impact
adding 1, 2, 4, X amount of peripherals onto the local memory bus has
on processor clock impact. I want to be able to allow each coprocessor
to have single cycle access, which should in theory impact the clock
speed of the Microblaze. Is there a way for me to model and show this
impact on the processor clock with the EDK?


Article: 92190
Subject: Re: Xst optimizes almost everything away
From: "Andy Peters" <Bassman59a@yahoo.com>
Date: 23 Nov 2005 09:35:24 -0800
Links: << >>  << T >>  << A >>
Adrian Knoth wrote:
> Andy Peters <Bassman59a@yahoo.com> wrote:
>
> >>    chooser : process (clk_i, reset) --, update_input)
> >>            variable links,rechts : std_logic_vector (31 downto 0);
> >>         begin
> >>            if (reset='1') then
> >>               input <= (others => '0');
> >>            elsif (clk_i'event and clk_i='1') then
> >>               if (update_input'event and update_input='1') then
> >                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >
> > I assume you wish to look for the edge of update_input?  You can't do
>
> Yes.
>
> > it this way.  You'll need to use a delay flip-flop (clocked by clk) and
> > then test the state of both update_input and update_input_delayed.  If
> > update_input is true and update_input_delayed is false, then you've got
> > the edge of update_input.
>
> Wouldn't rising_edge (update_input) do the job? Or falling_edge (),
> if I need to know whether a signal was once set and is now off
> (write_A indicates that my processor core has written its result
>  and I now can use the value of the output-FFs to write it to
>  vga.)

THINK HARDWARE.

How would you implement the rising_edge() function?  How does the
hardware "know" when an edge occurs?

Here's a point you must understand: the process statement

    myflop : process (clk, rst) is
    begin
        if (rst = '1') then
            q <= '0';
        elsif rising_edge(clk) then
            q <= d;
        end if;
    end process myflop;

follows a template that the synthesis tool uses to generate hardware.
The synthesis tool tries to match the code against standard templates
to infer various hardware structures (flip-flops, RAMs, etc).  (It also
works to minimize logic, etc.)

The notation above conveniently describes a clearable D flip-flop.  On
the rising edge of clk, it looks at the D input and assigns it to the Q
output.

You can't use the rising_edge() function in the way you describe ...
there is no hardware equivalent..

> How do I synchronize these processes in VHDL? I have the output-FFs
> containing the current value and need to bitwise store the content
> in the VGA-RAM every time my write_A indicates that there are new
> data. I currently use a process for this but I don't know if it
> really stops after executing the for-loops, how many clock cycles
> are used for each loop iteration, if every statement in the
> loop-body is executed in one clock cycle and so on:
>
>   to_video : process (clk_i, reset)
>      variable tmp_vga : std_logic_vector (31 downto 0);
>   begin
>     if (reset='1') then
>        addr_vga <= (others => '0');
>        web_i <= '0';
>     elsif (falling_edge (write_A)) then

This is another problem.  Your sensitivity list includes a clock and a
reset (which is correct), but your code tells us that you want write_A
to be the clock used by the flip-flops.  Your synthesis tool should
barf on this.

>        tmp_vga := output;
>        for j in 3 downto 0 loop
>           for i in 6 downto 1 loop
>              web_i <= '1';
>              dib_i (0 downto 0) <= tmp_vga (j * 8 + i downto j * 8 + i);
>              web_i <= '0';
>              addr_vga <= addr_vga + 1;
>           end loop;
>        end loop;
>      end if;
>   end process to_video;
>
> (web_i enables the vga input, addr_vga should be the bitaddress in
>  the VGA RAM)
>
> Let's say write_A goes up for two cycles every 24 clocks (assumption,
> I don't know the real amount of clocks between these two pulses),
> indicating that there is now new information available at the
> output (output is DFF-buffered (but currently optimized away ;)).
>
> Does the process above would poke the selected bits to dib_i or
> do I have to keep track of write_A by something like a state machine?

Assuming write_A is synchronous to your clock, you have a couple of
options.  If your data remain valid during the time write_A is
asserted, you can use write_A directly as a clock enable:

    myenabledflop : process (clk, rst) is
    begin
        if (rst = '1') then
            q <= '0';
        elsif rising_edge(clk) then
            if (write_A = '1') then
                q <= d;
            end if;
        end if;
    end process myenabledflop;

If you really do need to do your work on the rising edge of write_A,
then you code an edge detector and use that as your clock enable:

    myedgedetectflop : process (clk, rst) is
    begin
        if (rst = '1') then
            write_A_d <= '0';
            q <= '0';
        elsif rising_edge(clk) then
            write_A_d <= write_A; -- delay for edge detect
            if (write_A = '1' and write_A_d = '0') then
                q <= d;
            end if;
        end if;
    end process myedgedetectflop;

Is this clear?

-a


Article: 92191
Subject: Re: virtex II global buffer
From: "Brannon" <brannonking@yahoo.com>
Date: 23 Nov 2005 09:40:22 -0800
Links: << >>  << T >>  << A >>
You need to manually instantiate BUFG or BUFGMUX operators. The tools
are not going to infer more than 8 because there is only 8 global clock
connections. To use more than 8 you have to limit the connections on
some of them to one quadrant of the chip. Use the -timing parameter on
the mapper to place them or manually locate them yourself -- something
you will likely have to do anyway. When you manually instantiate them
make sure that some of them are only connected to objects in their
quadrant of the chip.


Article: 92192
Subject: Xilinx DCM_ADV 280MHz no lock
From: "Brad Smallridge" <bradsmallridge@dslextreme.com>
Date: Wed, 23 Nov 2005 10:58:39 -0800
Links: << >>  << T >>  << A >>
Hi,

I am trying to generate a serial bit clock for a Camera Link interface and I 
am having trouble going from 40MHz to 280MHz.  I am committing two DCMs for 
this task, one using the FX output to go from 40 to 140 MHz (7/2), and 
another DCM using 2X output to go from 140 to 280.  The FX output locks OK 
and the divided output looks OK on the scope.  The 2X lock output seems to 
lock intermitently, trying to get to high, and the 2X divided output is 
"fuzzy".

I probably need some sort of timing restraint or perhaps I don't understand 
what Xilinx is doing with this auto_callibration on the dcm_adv wizard. Can 
somebody help me out. Here is the code:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

library UNISIM;
use UNISIM.VComponents.all;

entity top is
 port(
   sys_rst_in        : in  std_logic;
   gpio_exp_hdr2     : in  std_logic_vector( 7 downto 6); -- HDR2 diff
   gpio              : out std_logic_vector(3 downto 0) );  -- LEDs
end top;

architecture Behavioral of top is

 signal reset        : std_logic;
 signal cam1_xclk    : std_logic;

 signal test_counter_1 : std_logic_vector( 9 downto 0);
 signal test_counter_2 : std_logic_vector( 9 downto 0);
 signal test_counter_3 : std_logic_vector( 9 downto 0);

 signal cam1_clk7xdiv2  : std_logic;
 signal cam1_lock7xdiv2 : std_logic;
 signal cam1_clk7x      : std_logic;
 signal cam1_lock7x     : std_logic;

 component dcmfx2
 port(
  clkin_n_in :  in std_logic;
  clkin_p_in :  in std_logic;
  rst_in     :  in std_logic;
  clkfx_out  : out std_logic;
  clkin_ibufgds_out  : out std_logic;
  clk0_out   : out std_logic;
  locked_out : out std_logic );
 end component;

 component dcm_140_280
 port(
   CLKIN_IN   : in std_logic;
   RST_IN     : in std_logic;
   CLK0_OUT   : out std_logic;
   CLK2X_OUT  : out std_logic;
   LOCKED_OUT : out std_logic );
 end component;

begin

 cam1_dcmfx2 : dcmfx2
 port map(
  clkin_n_in   => gpio_exp_hdr2(6),  -- 40 MHz
  clkin_p_in   => gpio_exp_hdr2(7),  -- Differential pair
  rst_in       => reset,
  clkfx_out    => cam1_clk7xdiv2,  -- 140MHz
  clkin_ibufgds_out  => open,
  clk0_out     => cam1_xclk,  -- 40 MHz
  locked_out   => cam1_lock7xdiv2 );

 cam1_dcm_140_280: dcm_140_280
 port map(
   CLKIN_IN   => cam1_clk7xdiv2, -- 140 MHz
   RST_IN     => reset,
   CLK0_OUT   => open,
   CLK2X_OUT  => cam1_clk7x, -- 280 MHz
   LOCKED_OUT => cam1_lock7x );

 reset <= not sys_rst_in;

 led_test_counter_1_process:process(cam1_xclk)
 begin
 if( cam1_xclk'event and cam1_xclk='1') then
   if( reset='1' ) then
     test_counter_1 <= (others=>'0');
   else
     test_counter_1 <= test_counter_1+1;
   end if;
 end if;
 end process;

 led_test_counter_2_process:process(cam1_clk7xdiv2)
 begin
 if( cam1_clk7xdiv2'event and cam1_clk7xdiv2='1') then
   if( reset='1' ) then
     test_counter_2 <= (others=>'0');
   else
     test_counter_2 <= test_counter_2+1;
   end if;
 end if;
 end process;

 led_test_counter_3_process:process(cam1_clk7x)
 begin
 if( cam1_clk7x'event and cam1_clk7x='1') then
   if( reset='1' ) then
     test_counter_3 <= (others=>'0');
   else
     test_counter_3 <= test_counter_3+1;
   end if;
 end if;
 end process;

 gpio(0) <= test_counter_1(9);
 gpio(1) <= test_counter_2(9);
 gpio(2) <= test_counter_3(9);
-- gpio(3) <= cam1_lock7xdiv2; -- OK
 gpio(3) <= cam1_lock7x; -- FAILS

end Behavioral;

Brad Smallridge
aivision.com
 



Article: 92193
Subject: Re: We need to program several thousands Xilinx flashes XCF025...
From: hmurray@suespammers.org (Hal Murray)
Date: Wed, 23 Nov 2005 13:23:05 -0600
Links: << >>  << T >>  << A >>
>2. We don't know what is better: to program flash chip and then to
>solder it or to solder it and then program. May be ask Xilinx to
>program flashes at factory and then solder?

Even if you do program the flash chip before you solder it to the
board, you probably want to be able to re-program it in case
you discover a bug or come up with a new feature.  That's one
of the great advantages of (some/most) FPGAs.


-- 
The suespammers.org mail server is located in California.  So are all my
other mailboxes.  Please do not send unsolicited bulk e-mail or unsolicited
commercial e-mail to my suespammers.org address or any of my other addresses.
These are my opinions, not necessarily my employer's.  I hate spam.


Article: 92194
Subject: Re: Xilinx DCM_ADV 280MHz no lock
From: "Antti Lukats" <antti@openchip.org>
Date: Wed, 23 Nov 2005 20:35:06 +0100
Links: << >>  << T >>  << A >>
"Brad Smallridge" <bradsmallridge@dslextreme.com> schrieb im Newsbeitrag 
news:11o9f00jpgidsc7@corp.supernews.com...
> Hi,
>
> I am trying to generate a serial bit clock for a Camera Link interface and 
> I am having trouble going from 40MHz to 280MHz.  I am committing two DCMs 
> for this task, one using the FX output to go from 40 to 140 MHz (7/2), and 
> another DCM using 2X output to go from 140 to 280.  The FX output locks OK 
> and the divided output looks OK on the scope.  The 2X lock output seems to 
> lock intermitently, trying to get to high, and the 2X divided output is 
> "fuzzy".
>
> I probably need some sort of timing restraint or perhaps I don't 
> understand what Xilinx is doing with this auto_callibration on the dcm_adv 
> wizard. Can somebody help me out. Here is the code:
>
> library IEEE;
> use IEEE.STD_LOGIC_1164.ALL;
> use IEEE.STD_LOGIC_ARITH.ALL;
> use IEEE.STD_LOGIC_UNSIGNED.ALL;
>
> library UNISIM;
> use UNISIM.VComponents.all;
>
> entity top is
> port(
>   sys_rst_in        : in  std_logic;
>   gpio_exp_hdr2     : in  std_logic_vector( 7 downto 6); -- HDR2 diff
>   gpio              : out std_logic_vector(3 downto 0) );  -- LEDs
> end top;
>
> architecture Behavioral of top is
>
> signal reset        : std_logic;
> signal cam1_xclk    : std_logic;
>
> signal test_counter_1 : std_logic_vector( 9 downto 0);
> signal test_counter_2 : std_logic_vector( 9 downto 0);
> signal test_counter_3 : std_logic_vector( 9 downto 0);
>
> signal cam1_clk7xdiv2  : std_logic;
> signal cam1_lock7xdiv2 : std_logic;
> signal cam1_clk7x      : std_logic;
> signal cam1_lock7x     : std_logic;
>
> component dcmfx2
> port(
>  clkin_n_in :  in std_logic;
>  clkin_p_in :  in std_logic;
>  rst_in     :  in std_logic;
>  clkfx_out  : out std_logic;
>  clkin_ibufgds_out  : out std_logic;
>  clk0_out   : out std_logic;
>  locked_out : out std_logic );
> end component;
>
> component dcm_140_280
> port(
>   CLKIN_IN   : in std_logic;
>   RST_IN     : in std_logic;
>   CLK0_OUT   : out std_logic;
>   CLK2X_OUT  : out std_logic;
>   LOCKED_OUT : out std_logic );
> end component;
>
> begin
>
> cam1_dcmfx2 : dcmfx2
> port map(
>  clkin_n_in   => gpio_exp_hdr2(6),  -- 40 MHz
>  clkin_p_in   => gpio_exp_hdr2(7),  -- Differential pair
>  rst_in       => reset,
>  clkfx_out    => cam1_clk7xdiv2,  -- 140MHz
>  clkin_ibufgds_out  => open,
>  clk0_out     => cam1_xclk,  -- 40 MHz
>  locked_out   => cam1_lock7xdiv2 );
>
> cam1_dcm_140_280: dcm_140_280
> port map(
>   CLKIN_IN   => cam1_clk7xdiv2, -- 140 MHz
>   RST_IN     => reset,
>   CLK0_OUT   => open,
>   CLK2X_OUT  => cam1_clk7x, -- 280 MHz
>   LOCKED_OUT => cam1_lock7x );
>
> reset <= not sys_rst_in;
>
> led_test_counter_1_process:process(cam1_xclk)
> begin
> if( cam1_xclk'event and cam1_xclk='1') then
>   if( reset='1' ) then
>     test_counter_1 <= (others=>'0');
>   else
>     test_counter_1 <= test_counter_1+1;
>   end if;
> end if;
> end process;
>
> led_test_counter_2_process:process(cam1_clk7xdiv2)
> begin
> if( cam1_clk7xdiv2'event and cam1_clk7xdiv2='1') then
>   if( reset='1' ) then
>     test_counter_2 <= (others=>'0');
>   else
>     test_counter_2 <= test_counter_2+1;
>   end if;
> end if;
> end process;
>
> led_test_counter_3_process:process(cam1_clk7x)
> begin
> if( cam1_clk7x'event and cam1_clk7x='1') then
>   if( reset='1' ) then
>     test_counter_3 <= (others=>'0');
>   else
>     test_counter_3 <= test_counter_3+1;
>   end if;
> end if;
> end process;
>
> gpio(0) <= test_counter_1(9);
> gpio(1) <= test_counter_2(9);
> gpio(2) <= test_counter_3(9);
> -- gpio(3) <= cam1_lock7xdiv2; -- OK
> gpio(3) <= cam1_lock7x; -- FAILS
>
> end Behavioral;
>
> Brad Smallridge
> aivision.com
>
>
Hi Btad,

What device are you using? In spartan3 -4 I have seen DCM fail somewhere 
about at 270MHz, but I think most other devices should actually go up to 280

but for 280 cameralink there is no need for 280 Mhz at all you can implement 
it all by 140MHz clock using both clock edges

Antti






Article: 92195
Subject: Re: Disabling Xilinx clock enable usage...
From: Mike Treseler <mike_treseler@comcast.net>
Date: Wed, 23 Nov 2005 11:59:10 -0800
Links: << >>  << T >>  << A >>
johnp wrote:

> I love synthesis, but... It sure would be nice to have any easier way
> to direct it!   In any event, it sure beats schematics.

It not only beats them, It draws them for me:
  http://home.comcast.net/~mike_treseler/uart.pdf

      -- Mike Treseler

Article: 92196
Subject: Re: Xilinx DCM_ADV 280MHz no lock
From: "Avrum" <noasvpraumm@nospamsympatico.ca>
Date: Wed, 23 Nov 2005 15:17:20 -0500
Links: << >>  << T >>  << A >>
I am not familiar with the CLKFX outputs of the DCM, but...

When a DCM is locking, it is not guaranteed to generate a stable clock; the
output clock is only guaranteed to be stable once the LOCKED output goes
high. Since you are cascading two DCMs, the second DCM is trying to attain
lock on the output of the first DCM. But, right after reset, the second DCM
is seeing an unstable clock. Once a DCM fails to lock properly (due to an
unstable input clock), it will not try again until its reset is asserted.

Therefore, I think you need to hold the second DCM in reset until the first
DCM locks (this is mentioned in several app-notes). In fact, it is a good
idea to delay the deassertion of RESET on the second DCM until a few clocks
after the first DCM locks (an SRL is useful for doing this.

Doing this will probably fix your problem.

Avrum

"Brad Smallridge" <bradsmallridge@dslextreme.com> wrote in message
news:11o9f00jpgidsc7@corp.supernews.com...
> Hi,
>
> I am trying to generate a serial bit clock for a Camera Link interface and
I
> am having trouble going from 40MHz to 280MHz.  I am committing two DCMs
for
> this task, one using the FX output to go from 40 to 140 MHz (7/2), and
> another DCM using 2X output to go from 140 to 280.  The FX output locks OK
> and the divided output looks OK on the scope.  The 2X lock output seems to
> lock intermitently, trying to get to high, and the 2X divided output is
> "fuzzy".
>
> I probably need some sort of timing restraint or perhaps I don't
understand
> what Xilinx is doing with this auto_callibration on the dcm_adv wizard.
Can
> somebody help me out. Here is the code:
>
> library IEEE;
> use IEEE.STD_LOGIC_1164.ALL;
> use IEEE.STD_LOGIC_ARITH.ALL;
> use IEEE.STD_LOGIC_UNSIGNED.ALL;
>
> library UNISIM;
> use UNISIM.VComponents.all;
>
> entity top is
>  port(
>    sys_rst_in        : in  std_logic;
>    gpio_exp_hdr2     : in  std_logic_vector( 7 downto 6); -- HDR2 diff
>    gpio              : out std_logic_vector(3 downto 0) );  -- LEDs
> end top;
>
> architecture Behavioral of top is
>
>  signal reset        : std_logic;
>  signal cam1_xclk    : std_logic;
>
>  signal test_counter_1 : std_logic_vector( 9 downto 0);
>  signal test_counter_2 : std_logic_vector( 9 downto 0);
>  signal test_counter_3 : std_logic_vector( 9 downto 0);
>
>  signal cam1_clk7xdiv2  : std_logic;
>  signal cam1_lock7xdiv2 : std_logic;
>  signal cam1_clk7x      : std_logic;
>  signal cam1_lock7x     : std_logic;
>
>  component dcmfx2
>  port(
>   clkin_n_in :  in std_logic;
>   clkin_p_in :  in std_logic;
>   rst_in     :  in std_logic;
>   clkfx_out  : out std_logic;
>   clkin_ibufgds_out  : out std_logic;
>   clk0_out   : out std_logic;
>   locked_out : out std_logic );
>  end component;
>
>  component dcm_140_280
>  port(
>    CLKIN_IN   : in std_logic;
>    RST_IN     : in std_logic;
>    CLK0_OUT   : out std_logic;
>    CLK2X_OUT  : out std_logic;
>    LOCKED_OUT : out std_logic );
>  end component;
>
> begin
>
>  cam1_dcmfx2 : dcmfx2
>  port map(
>   clkin_n_in   => gpio_exp_hdr2(6),  -- 40 MHz
>   clkin_p_in   => gpio_exp_hdr2(7),  -- Differential pair
>   rst_in       => reset,
>   clkfx_out    => cam1_clk7xdiv2,  -- 140MHz
>   clkin_ibufgds_out  => open,
>   clk0_out     => cam1_xclk,  -- 40 MHz
>   locked_out   => cam1_lock7xdiv2 );
>
>  cam1_dcm_140_280: dcm_140_280
>  port map(
>    CLKIN_IN   => cam1_clk7xdiv2, -- 140 MHz
>    RST_IN     => reset,
>    CLK0_OUT   => open,
>    CLK2X_OUT  => cam1_clk7x, -- 280 MHz
>    LOCKED_OUT => cam1_lock7x );
>
>  reset <= not sys_rst_in;
>
>  led_test_counter_1_process:process(cam1_xclk)
>  begin
>  if( cam1_xclk'event and cam1_xclk='1') then
>    if( reset='1' ) then
>      test_counter_1 <= (others=>'0');
>    else
>      test_counter_1 <= test_counter_1+1;
>    end if;
>  end if;
>  end process;
>
>  led_test_counter_2_process:process(cam1_clk7xdiv2)
>  begin
>  if( cam1_clk7xdiv2'event and cam1_clk7xdiv2='1') then
>    if( reset='1' ) then
>      test_counter_2 <= (others=>'0');
>    else
>      test_counter_2 <= test_counter_2+1;
>    end if;
>  end if;
>  end process;
>
>  led_test_counter_3_process:process(cam1_clk7x)
>  begin
>  if( cam1_clk7x'event and cam1_clk7x='1') then
>    if( reset='1' ) then
>      test_counter_3 <= (others=>'0');
>    else
>      test_counter_3 <= test_counter_3+1;
>    end if;
>  end if;
>  end process;
>
>  gpio(0) <= test_counter_1(9);
>  gpio(1) <= test_counter_2(9);
>  gpio(2) <= test_counter_3(9);
> -- gpio(3) <= cam1_lock7xdiv2; -- OK
>  gpio(3) <= cam1_lock7x; -- FAILS
>
> end Behavioral;
>
> Brad Smallridge
> aivision.com
>
>
>



Article: 92197
Subject: Re: Case expression?
From: Jim Granville <no.spam@designtools.co.nz>
Date: Thu, 24 Nov 2005 09:37:15 +1300
Links: << >>  << T >>  << A >>
allanherriman@hotmail.com wrote:

> allanherri...@hotmail.com wrote:
> 
>>Fred wrote:
>>>Unfortunately in the UK you're more employable if you know VHDL.  I have
>>>written in Verilog and quite like the C type structure.  Since I'd like to
>>>pay my bills I feel tied to VHDL.
>>
>>You're even more employable if you have a strong knowedge of both.
> 
> 
> ... and even more employable if you can spell.

Nope, then they think you are over qualifed for the job :)

-jg



Article: 92198
Subject: Re: FPGA and metastability once again
From: "Avrum" <noasvpraumm@nospamsympatico.ca>
Date: Wed, 23 Nov 2005 15:50:47 -0500
Links: << >>  << T >>  << A >>
Since you haven't posted any details about how you are doing the clock
crossing, we can't say if the system is robust or not. Dealing with clock
crossing is a tricky issue, not just in terms of dealing with metastability,
but also in terms of how to ensure that data is not missed, replicated, or
otherwise mangled. 40 hours of testing is relatively short when you are
dealing with metastability; all you have demonstrated is that your MTBF is
not substantially less than 40hrs; it is certainly possible that you could
have a system that works most of the time, but still fails once per day,
once per week, once per year...

Clock crossing through a FIFO is a mechanism that is well understood, and
can be designed to be reliable in spite of metastability issues. Other
mechanisms certainly exist, and, depending on the frequencies involved, can
be implemented with less logic than a FIFO. However from 125MHz to 166MHz,
many of the "easy" robust mechanisms won't work; a FIFO is your best bet.

It is understandable that you don't want to "waste" block RAMs for the clock
crossing. However, one nice features of the Xilinx architecture is the
availability of distributed RAMs. It is relatively "cheap" to use these dual
ported RAMs to build 16 word deep FIFOs (in any width), which are enough for
most clock crossing applications.

Avrum


<v_mirgorodsky@yahoo.com> wrote in message
news:1132738682.392066.268630@g14g2000cwa.googlegroups.com...
> Hello ALL,
>
> I have a design with two global clocks. I have data I need to transfer
> from one clock domain to another. I am aware of existence of FIFO
> blocks :), but it seems to be too expensive to spend a block-ram and
> other resources for every boundary crossing. To avoid using FIFO blocks
> we created a handshake schematic, based on some triggers and small FSM.
> This solution is proven to work in hardware error-free for almost 40
> hours. First domain clock frequency is 25MHz or 125MHz (depending on
> mode); second domain clock frequency is 166MHz.
>
> Naturally, some triggers in out design are metastable. Is it possible
> to get some intermediate voltage level at the output of trigger in FPGA
> if input signal on its Data input violates setup or hold times? In my
> design I assume I don't get any intermediate level voltages at the
> trigger outputs. What about signal I input into FPGA from outside? Is
> it possible to get some intermediate voltage levels on the trigger
> outputs by violating setup-hold times and/or IO standard voltage
> levels?
>
> With best regards,
> Vladimir S. Mirgorodsky
>



Article: 92199
Subject: Re: Stupid reset question
From: "Dave Pollum" <vze24h5m@verizon.net>
Date: 23 Nov 2005 13:04:19 -0800
Links: << >>  << T >>  << A >>
Phil Hays wrote:
> Nick <nick@no-domain> wrote:
<snipped>
> use ieee.numeric_std.all;
> entity
> ...
> architecture
> ...
>   Signal reset :   std_logic := '1';
>   Signal count :   unsigned(3 downto 0) := "0000";
> begin
>   --
>   -- This counter is used to hold all statemachines in reset for the
>   -- first 8 or so clocks after the end of configuration.
>   --
>   RESET_STATE: process(clk)
>   begin
>     if rising_edge(clk) then
>        reset <= count(3);
>        if count(3) = '1' then
>          count <= count + 1;
>        end if;
>     end if;
>   end process;
> (rest of code)
>
>
> Note that not all synthesis tools can correctly handle this.  Some of
> the old tools would have problems with this.  While I've used similar
> tricks in the past, I have not verified this exact code.
>
> Note that the number of bits in count needs to be large enough to get
> well past the end of asynchronous reset, and not so large as to cause
> startup delays.
>
>
> --
> Phil Hays to reply solve: phil_hays at not(coldmail) dot com
>  If not cold then hot

Shouldn't:
        if count(3) = '1' then
          count <= count + 1;
be:
        if count(3) = '0' then
          count <= count + 1;

-Dave Pollum




Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarAprMayJunJulAugSepOctNovDec2017
2018JanFebMarAprMayJunJulAugSepOctNovDec2018
2019JanFebMarAprMayJunJulAugSepOctNovDec2019
2020JanFebMarAprMay2020

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search