Clock Edge notation

jahaya@gmail.com wrote:
Hello folks,

I would like to know how we can implement a tan inverse in VHDL which
shld be also synthesizable.
You will find one in my floating point packages:
http://www.eda.org/vhdl-200x/vhdl-200x-ft/packages/fphdl_base_alg_pkg.vhd
 
"valentin tihomirov" <spam@abelectron.com> writes:

Huh? I've been doing std_logic_vector (msb downto lsb) for years and
never had any problems. I don't think there is any "naturalness"
about doing (1 to something). Or have I misunderstood what you are
saying?

What do you think will be result of

key := ((BS(0) and x"01") sll 6) or ((BS(1)srl 2) and x"3F");

where
subtype BYTE is std_logic_vector (7 downto 0);
type TBYTE_STR is array (0 to 6) of BYTE;
variable BS: TBYTE_STR;
key: BYTE;

Check the "and" and "sll" functions in the std_logic_1164 package, they both
return
VARIABLE result : std_logic_vector ( 1 TO l'LENGTH );
Well, my std_logic_1164 hasn't got an sll for std_logic_vectors in it
- is this part of VHDL-200x?

Can you explain what you get with your example versus expectation?

Simple ANDing works as I expect in Modelsim 5.8.

Cheers,
Martin

--
martin.j.thompson@trw.com
TRW Conekt, Solihull, UK
http://www.trw.com/conekt
 
Rob,
The problem with pragma's is that there is no written spec
on how they should work. So if you can, try to avoid them.
Does Verific support the following?
-- RTL_SYNTHESIS OFF
-- RTL_SYNTHESIS ON

I dispute your claim about there being no written spec.
You will find these synthesis directives specified
and standardized in IEEE 1076.6-1999.

In the EDA community we have a major disconnect
between EDA vendors, users, and standards developers.
We need to proactively solve this problem.

The old methodology of a group of experts collectively
developing and publishing a standard is not working.
The problem is that after developing new features, the
features need to be marketed to the user community
and then the user community needs to nag the EDA vendors
to implement the new features.

There is no one party that the blame can be placed on.
Standards developers sometimes do not address users
needs. Users do not have time to nag the EDA vendors.
EDA vendors do not have enough revenue to benevolently
implement features that have little value to the
user community and, hence, their product.

There are changes happening in the EDA standards
community. Recently Accellera was granted rights
by IEEE to make derivative works of the VHDL
standard (IEEE 1076) and has formed a VHDL working
group. While it is still in its early stages its shows
promise of having a model that will ensure that user
prioritized features get standardized. This in turn
will reassure EDA vendors that their product will have
a higher value to their users if they implement the
newly standardized features.

SynthWorks firmly believes in this process and has
become a member of Accellera to support this effort.

I urge experienced VHDL users to participate in this
effort. I suspect that most of the the meaningful
language revisions to VHDL will be done by the
Accellera WG. The VHDL-200X Fast Track work, which
is currently held up by lack of funding, has been
submitted the Accellera WG for their consideration,
prioritization, and funding. Currently funding is
necessary to fund the task of LRM writing.

While non-members of Accellera do not have an official
vote, you do have influence in the form that well
thought out discussions are generally given
consideration. One way to look at it is there are
very few organizations of this type that will turn
away free labor.

Best Regards,
Jim Lewis
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jim Lewis
Director of Training mailto:Jim@SynthWorks.com
SynthWorks Design Inc. http://www.SynthWorks.com
1-503-590-4787

Expert VHDL Training for Hardware Design and Verification
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
"Jim Lewis" <Jim@SynthWorks.com> wrote in message news:42D9722E.9000409@SynthWorks.com...
Rob,
The problem with pragma's is that there is no written spec on how they should work. So if you can, try to avoid them.

Does Verific support the following?
-- RTL_SYNTHESIS OFF
-- RTL_SYNTHESIS ON
No, we don't. Mainly because these are never used by HDL designers.
Why support something that is not used, and for which there is already
an existing solution ?

We support pragma's which are used in real life EDA tools :
-- <pragma_trigger> translate_off
-- <pragma_trigger> translate off

<pragma_trigger> by default includes the defacto standard vendor names.
This was the template used by all vendors, and there is/was no need to change that.

But even for the RTL_SYNTHESIS OFF pragma, there is no definition
of hiw to deal with nesting (and with mixing-in existing pragma's).

I dispute your claim about there being no written spec.
You will find these synthesis directives specified
and standardized in IEEE 1076.6-1999.
I was involved in the 1076.6 working group, back in the early 90s.

The charter of 1076.6 was honest and and well-intended,
but I think that the effectiveness of the the group
was greatly compromized when
(1) Synopsys walked out, and
(2) the group started to re-invent new stuff rather than
focus on defining behavior of existing industry standards
(such as pragma's), for backward compatibility, and
(3) it costs $100 just to get a copy of the work group results.

In the EDA community we have a major disconnect
between EDA vendors, users, and standards developers.
We need to proactively solve this problem.

The old methodology of a group of experts collectively
developing and publishing a standard is not working.
The problem is that after developing new features, the
features need to be marketed to the user community
and then the user community needs to nag the EDA vendors
to implement the new features.

There is no one party that the blame can be placed on.
Standards developers sometimes do not address users
needs. Users do not have time to nag the EDA vendors.
EDA vendors do not have enough revenue to benevolently
implement features that have little value to the
user community and, hence, their product.

There are changes happening in the EDA standards
community. Recently Accellera was granted rights
by IEEE to make derivative works of the VHDL
standard (IEEE 1076) and has formed a VHDL working
group. While it is still in its early stages its shows
promise of having a model that will ensure that user
prioritized features get standardized. This in turn
will reassure EDA vendors that their product will have
a higher value to their users if they implement the
newly standardized features.

SynthWorks firmly believes in this process and has
become a member of Accellera to support this effort.

I urge experienced VHDL users to participate in this
effort. I suspect that most of the the meaningful
language revisions to VHDL will be done by the
Accellera WG. The VHDL-200X Fast Track work, which
is currently held up by lack of funding, has been
submitted the Accellera WG for their consideration,
prioritization, and funding. Currently funding is
necessary to fund the task of LRM writing.

While non-members of Accellera do not have an official
vote, you do have influence in the form that well
thought out discussions are generally given
consideration. One way to look at it is there are
very few organizations of this type that will turn
away free labor.

Best Regards,
Jim Lewis
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jim Lewis
Director of Training mailto:Jim@SynthWorks.com
SynthWorks Design Inc. http://www.SynthWorks.com
1-503-590-4787

Expert VHDL Training for Hardware Design and Verification
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
"Eric DELAGE" <eric_delage@yahoo.fr> wrote in message news:75b8d52e.0507190349.7e5c010a@posting.google.com...
We support pragma's which are used in real life EDA tools :
-- <pragma_trigger> translate_off
-- <pragma_trigger> translate off

pragma_trigger> by default includes the defacto standard vendor names.
This was the template used by all vendors, and there is/was no need to
change that.

You are right.

You're wrong. I develop VHDL code for multiple VHDL compilers from
Xilinx, Synopsys and Synplicity. According to your convention, I
should write:

-- synopsys translate_off
-- xilinx translate_off
-- synplicity translate_off
... my code ...
-- synplicity translate_on
-- xilinx translate_on
-- synopsys translate_on
Yeah, it's a mess out there.
But you won't need to (and should not) enumerate all vendors in your translate_off pragma's.

Apart from the vendor-specific pragma's the 'general' form of the pragma is
-- synthesis translate_off
-- synthesis translate_on

Since the purpose of the pragma is to let a synthesis tool ignore certain
portions of text, this seems the most obvious pragma.
I believe this is supported by all vendors.

Also, -- pragma translate_off is pretty much a general defacto-standard,

If now, I want to compile my VHDL code for Altera and use its Quartus
compiler, I should look for the pragmas in all my VHDL files and add
your --altera translate_off/_on. Honestly, I think that you miss the
point for standardization ;-)
Frankly I don't see how standardization could help here.
There will always be vendors which want their own pragma's, to offer
immediate work-arounds for problems with their tool in customer designs.
Many of these pragma's are really intended for that specific tool only.
So, as a user, just avoid these as the plague !

It's funny to know that Synplicity supports the -- SYNOPSYS pragmas
and that Synopsys supports the standardized -- RTL SYNTHESIS_ON/_OFF
ones (as well as the -- SYNOPSYS). In this mess, I would rather
suggest to use:

-- RTL SYNTHESIS_OFF
-- <your vendor @ a point in time> TRANSLATE_OFF
... my code ...
-- <your vendor @ a point in time> TRANSLATE_ON
-- RTL SYNTHESIS_ON
You just invented yet another pragma-trigger : -- RTL
I don't think that is a good idea.

Also, since pragma 'nesting' is not necessarily supported by some
tool vendors, you might want to avoid this too.

and to put your EDA vendor under high pressure to add the official
standardized pragmas in its VHDL parser. Designers are responsible for
informing them again and again on their needs incl. their need for
standardization.
I think it is much easier to follow the de-facto standard :
-- synthesis translate_off is your standard for text off/on pragma's.

Apart from that, just ask your vendor if the tool is Verific-complient.
Much easier than trying to push for a pragma standard.

Thanks for your input !

 
ALuPin@web.de wrote:

... NO time because the external module is expecting response on the
next clock cycle.
That's one external clock cycle, not zero.
Use a fpga clock at least twice that fast.
Send a handshake while you synchronize the data strobe.

I have read several posts in this newsgroup
explaining that the state machine would have to be very tricky
to handle unregistered inputs.
Any synchronous design will have problems with asynchronous
inputs. Note that registered inputs may or may not
be synchronous to the fpga clock.


-- Mike Treseler
 
ALuPin@web.de wrote:
Some additional info:

The clock of the FSM is provided by the external module.

In that case, you can just turn around the data strobe
as a handshake and latch the data on the same
clock tick.

-- Mike Treseler
 
ALuPin@web.de wrote:
I have read the following in one post discussing latches:
"None of the above applies to FPGA, you will have no control over
anything and your timing will be horrible so forget it. "
In a synchronous design, even one with 30,000
flops, I need only one synthesis constraint, Fmax.
Synthesis is a formality.

In an asynchronous design I need to constrain
setup and hold times to every flop.
Synthesis is tedious at best.

-- Mike Treseler
 
"methi" <gmethi@gmail.com> wrote in message
news:1121877741.981616.68610@g14g2000cwa.googlegroups.com...
Hi,

I am currently working with the 1727 bit wide shift register....For my
design requirements, I had to change it to a 3454 bit wide shift
register( 2*1727)...

<snip>

Is your design giving you registers for your shift elements?
The SRL16 primitives can cut that utilization by a significant amount.
You can also use BlockRAM to perform a shift register function.

There are many solutions at your disposal but no true idea of what your
overall constraits are.

Is the shift register the only thing in the design?
Are you using a reset for those shift elements?
Is it serial-in, serial-out?
Are there frequency constraints?
Is the shift register fixed in length or variable?
 
Methi,

You can use a circular buffer implemented by BRAM.

What are you doing with this shift register afterwards?

Vladislav

"methi" <gmethi@gmail.com> wrote in message
news:1121877741.981616.68610@g14g2000cwa.googlegroups.com...
Hi,

I am currently working with the 1727 bit wide shift register....For my
design requirements, I had to change it to a 3454 bit wide shift
register( 2*1727)...

When I did this and implemented the design, I have an error in the
Mapping that:
The design is too large for the device and package (I am using xc3s400
and tq144- spartan3)


So instead I am working on two shift registers, each 1727 bit wide....

and giving the output of one shift reg as input to the other...

This would still use the same number of resources ..so I am getting the
same Mapping error....I tried contacting Xilinx support.....waiting for
some help..

Is there another method to work around this..to minimize the design...

Or I was wondering if I should change the fpga I am using...that would
mean a whole lot of other changes on the board....

But yes that would be last resort type of thing....


Any suggestions or ideas

Thanks,
Methi
 
methi wrote:

Is the shift register the only thing in the design?



Nopes I have my design doing a whole lot of things...but its only when
I changed the length of the shift register that I came across the
Mapping error.



Are you using a reset for those shift elements?


I am not using any reset...It takes in a clock...and shifts a bit for
every rising edge of the clock...



Is it serial-in, serial-out?


Yes its serial_in and serial_out



Are there frequency constraints?


No.



Is the shift register fixed in length or variable?


Its a variable shift register....the length is determined by an input
variable called "right".

The code is as follows:
entity shifting_two is
Port ( shiftin : in std_logic;
clock_in : in std_logic;
right : in integer;
shiftout : out std_logic);
end shifting_two;

architecture Behavioral of shifting_two is

signal shift_register : std_logic_vector ( 3454 downto 0 ):= (others =
'0');

begin

process(clock_in)
begin
if rising_edge(clock_in) then
shift_register <= shift_register( 3453 downto 0 ) & shiftin;
shiftout <= shift_register(right-1);
end if;
end process;


end Behavioral;


How can I use a BlockRam...?



For that, you want to use a block RAM, which will give you up to 18K
bits length. You can either use two address counters, one for the read
side of the memory and one for the write side, and offset the address of
the write counter so that the read count trails it by N where N is the
shift register length, or you can use a single counter set up as a
modulo N count (use a loadable downcount for that, thereby keeping it to
one level of logic. If you were using an older Xilinx fpga, you'd need
to delay the read by a clock relative to the write for this second
scheme because they didn't support read before write operation. With the
spartan3, you can set the attribute on the bram for read first, which
allows you to apply the same address to both the read and the write
ports. It is easier if you instantiate the BRAM rather than trying to
let the software figure it out.

--
--Ray Andraka, P.E.
President, the Andraka Consulting Group, Inc.
401/884-7930 Fax 401/884-7950
email ray@andraka.com
http://www.andraka.com

"They that give up essential liberty to obtain a little
temporary safety deserve neither liberty nor safety."
-Benjamin Franklin, 1759
 
methi wrote:

Hi Ray,

Are you talking about a BRAM core available in Xilinx?

Ive only come across the RAM based shift reg which goes upto 1024 bits
(xilinx 6.3i)

Or Should I be working on a BRAM code in vhdl...


Thanks,

Methi



I was talking about a VHDL module with an instantiated RAMB16 primitive
in it. Something like this should do the trick for you:

nxt_addr<= to_unsigned(modulo-2,abits+1) when addr(abits)='1'
else addr-1;
process(clk)
begin
if clk'event and clk='1' then
if ce='1' THEN
addr<=nxt_addr;
end if;
end if;
end process;

a_addr<= std_logic_vector(resize(addr(abits-1 downto 0),14))

U1: ramb16_s1
--synthesis translate_off
generic map(
WRITE_MODE_A => "READ_FIRST",
WRITE_MODE_B => "READ_FIRST")
--synthesis translate_on
port map(
DIA => b_in,
ENA => ce,
WEA => '1',
SSRA => '0',
CLKA => clk,
ADDRA=> a_addr,
DOA =>b_out);

Since your shift register is only 3K+ long, you could even use the other
RAMB16 port for something else by setting the upper address bits to
opposite constant values on each port. The loadable down counter
reloads when it counts past 0 to -1. It is coded this way to give the
synthesis enough of a hint not to stick the load function in as a
multiplexer after the carry chain, which would force it to two levels of
logic.

--
--Ray Andraka, P.E.
President, the Andraka Consulting Group, Inc.
401/884-7930 Fax 401/884-7950
email ray@andraka.com
http://www.andraka.com

"They that give up essential liberty to obtain a little
temporary safety deserve neither liberty nor safety."
-Benjamin Franklin, 1759
 
methi wrote:

I am just using the output of my shift register...which is the MSB
(this keeps changing depending on the value of the variable
"right")...as input to another component....its a pulse...
If you are delaying a single pulse/edge for 3454 ticks,
there are easier ways to do it than with a shift register.

-- Mike Treseler
 
Peter Alfke wrote:

Methi,
Take a BlockRAM, with both ports configured as 16K x 1.
Make one port Write and the other one Read. Clock both ports with your
data clock.
Drive the Write address with a counter that you increment with the data
clock.
Drive the Read address from a subtractor circuit that subtracts the
length N of your shift register from the Write address.
Now you have a programmable-length shift register from the D input of
the write port to the Q output of the Read port.
And you get up to 16K bit length in a single BRAM plus four CLBs (14
bit counter plus 14-bit subtractor).
Peter Alfke



Peter, with SPartan3, he can do it with one port of the BRAM if he uses
a modulo-N count instead of a straight 14 bit binary count. I showed
this in the code I posted earlier. The modulo N count is easy if you do
it as a loadable down-count that reloads itself when it goes negative.

--
--Ray Andraka, P.E.
President, the Andraka Consulting Group, Inc.
401/884-7930 Fax 401/884-7950
email ray@andraka.com
http://www.andraka.com

"They that give up essential liberty to obtain a little
temporary safety deserve neither liberty nor safety."
-Benjamin Franklin, 1759
 
Mike Treseler wrote:

methi wrote:

I am just using the output of my shift register...which is the MSB
(this keeps changing depending on the value of the variable
"right")...as input to another component....its a pulse...


If you are delaying a single pulse/edge for 3454 ticks,
there are easier ways to do it than with a shift register.

-- Mike Treseler
Mike, I assumed this was more like a line buffer where he needed to
delay a sequence of bits by the 3454 clocks. If it is indeed just a
delay from a single pulse and you can guarantee that another pulse does
not occur until the first one has propagated out, then it can be done
with just a counter.

--
--Ray Andraka, P.E.
President, the Andraka Consulting Group, Inc.
401/884-7930 Fax 401/884-7950
email ray@andraka.com
http://www.andraka.com

"They that give up essential liberty to obtain a little
temporary safety deserve neither liberty nor safety."
-Benjamin Franklin, 1759
 
"Jim Lewis" <Jim@SynthWorks.com> wrote in message news:42DC6DFF.5010100@SynthWorks.com...
Rob,
The problem with pragma's is that there is no written spec on how they should work. So if you can, try to avoid them.

Does Verific support the following?
-- RTL_SYNTHESIS OFF
-- RTL_SYNTHESIS ON


No, we don't.

Not surprising as I don't think anyone does.
The point of my question was to illustrate that
the process of standards being made by benevolent
experts does not always work well.
I understand. And it did not for this pragma, and other 1076.6 'synthesis' features.

But it did work for VHDL itself !!
The 1076 87 and 93 standards are so complete and accurate,
that there is virtually no way for a tool builder to 'hide' behind LRM ambiguities,
and in turn this greatly enhanced tool-interoperatebility.

No, we don't. Mainly because these are never used by HDL designers.
Why support something that is not used, and for which there is already
an existing solution ?

This illustrates the classic stand-off:
Vendors: Why implement a new feature if no-one uses it.
Users: Why use a new feature if not all the vendors in
my current design flow implement it.

Without devine intervention, this process will never work.
Right.
If translate_off pragma's is all that we talk about, then I think that with VHDL,
the process is nicely under control, caused by the tight and
unambiguous VHDL standards.

The situation is MUCH worse for Verilog...

We support pragma's which are used in real life EDA tools :
-- <pragma_trigger> translate_off
-- <pragma_trigger> translate off

pragma_trigger> by default includes the defacto standard vendor names.
This was the template used by all vendors, and there is/was no need to change that.

You are right.

To be fair, 1076.6 was developed in the time frame between
1996 and 1998 and the only common pragma trigger that
I was aware of was "-- synopsys". I think "-- pragma"
either came out during the same time or a little later.

The WG chose the pragma trigger "RTL_SYNTHESIS".
One reason was to differentiate RTL from behavioral
synthesis. Since VHDL was taking so much abuse about
having long names, rather than translate_off and
translate_on it was shortened to OFF and ON.

Based on your template, the IEEE pragma would adds the
format:
-- <pragma_trigger> off

This does not seem unreasonable or difficult to implement.
We would only need one flavor if all tools supported the
same one.
It's not difficult to implement, but we are not solving a problem here.
How many ways do we need to exclude text for a tool ?
Just use -- synthesis translate_off

Also note that if the standard is broken there is
no reason not to fix it.
If you want to persue this for a standards change, then I seriously
recommend to change it to -- synthesis translate_off

If you want, could you also propose a standard for the
real pragma's ? The ones that define a synthesis implementation for
VHDL functions ? Things like :

-- pragma map_to_operator SUB_UNS_OP
-- pragma type_function LEFT_UNSIGNED_ARG

There is a far greater veriety there than on the translate_off pragma

Problem with pragma's :

The cat is already out of the bag.
Tool builders need to support existing functionality, and thus at this point
(18 years after the standard came out), it fruitless to start an additional
standardization process.

But even for the RTL_SYNTHESIS OFF pragma, there is no definition of hiw to deal with nesting (and with mixing-in existing
pragma's).

True. Have you submitted a issue report with respect to this?
ISAC is alive and working to make sure all issues get forwarded
to the right place and so they can be worked on.
No, I did not. Since there is no need for this pragma.

I am no longer directly involved in language standardization.
But indirectly, the Verific parsers are setting a standard by themselves.
We are complient with all major vendors pragma's and language
support, for a wide range of tools and applications.

So if every vendors would use Verific, tool interoperability problems
due to issues that we missed in the language LRM, will become less
and less of a problem. And that helps everyone.

I was involved in the 1076.6 working group, back in the early 90s.

Since your product is integrated into 35 vendor tools,
you really should be part of the current standards process.

My main point is that we have a new standards organization
called Accellera. They are working hard to create standards
that represent user priorities. Users will want to use
these features. Your wisdom will certainly help us create
something better than we could without you. Furthermore,
if cost is an issue, non-members can participate, they just
can't have an official vote on all items. Note that this
year VHDL has lots of work that needs to get done so anything
you can do to help funding would be greatly appreciated.
I would like Accellera to slow down.
Does us joining Accellera help for that ?
System Verilog 3.1a is more than complex enough to let front-end builders
work for a couple of years. Nobody can use it currently,
since there is no complete 3.1a simulator yet, and most tools are lacking SV support.

Other than that, I think that tool builders like Verific should not interfere
too much with language features required or desired by designers.

Languages should be driven by users, not by parser builders.
But if there would be an efford to standardize the old (non-standardized,
yet ultimately critical feature of) -v/-y XL options
(library reading for Verilog 95), then I will be the first one
to join the effort.

We might join Accellera, or at least will issue feedback for
existing LRM 3.1a ambiguities or incompleteness.
We found many such issues already.

Best Regards,
Jim
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jim Lewis
Director of Training mailto:Jim@SynthWorks.com
SynthWorks Design Inc. http://www.SynthWorks.com
1-503-590-4787

Expert VHDL Training for Hardware Design and Verification
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
["Followup-To:" header set to comp.lang.verilog.]
* Colin Marquardt <colin@marquardt-home.de> wrote:
Mike Treseler <mike_treseler@comcast.net> writes:

If the aim were to document the
design, I would do it as comments
in the source and testbench code.
Sounds like what doxygen does for C++ code. Has anyone written a verilog
parser for doxygen?
Regards
Jahagirdar Vijayvithal S

I document testcases as comments with a special prefix. These are
then filtered out and processed with LaTeX, giving a nice PDF
file. One could also embed diagrams in description languages like
pstricks, metapost, dot, pic etc. and handle them in the same way.
If somebody has already done this, I'd love to hear about it.

To the original poster: take a look at emacs' vhdl-mode and its
integration into speedbar for a hierarchy parser.

Cheers,
Colin

--
If God had not given us sticky tape, it would have been necessary to
invent it. [Pete Zakel]
Regards
Jahagirdar Vijayvithal S
--
If a man does only what is required of him, he is a slave. If a man does more than is required of him, he is a free man. --Chinese Proverb
Jahagirdar .V.S
IC Design Engineer , Texas Instruments (India) Ltd.
91-80-25099129(O) 91-80-28540394(R)
 
methi schrieb:
shift_register <= shift_register( 3453 downto 0 ) & shiftin;
This alone would probably synthesize to 256 LUTs configured as SLR16.
No probleme there
shiftout <= shift_register(right-1);
But this is a 3453 to 1 multiplexer. Without any tricks you need about
2k-LUTs to implement it and it will be reaallllyyyy slow.

So you should use the BRAM as suggested by others.

Kolja Sulimma
 
methi schrieb:
I am trying to delay a pulse by N ticks where N takes a maximum value
of 3454...N is a variable here....
Yes, but a single pulse, or many pulses? That was Rays question.
Can you guarantee that there at most M pulses within 3454 clock cycles?
(with a small value of M)

Kolja Sulimma
 
vizziee@gmail.com wrote:

However, it doesn't get synthesized.
....
30 process (reset, clock, valid)
You don't need valid in the sensitivity list - but does not solve the
synthesis problem.


49 pick2 := data_array1((((x1+1)*w)-1) downto (x1*w)) ...
....
Error: VHDL error at msort_c.vhd(49): left bound of range must be a
constant
You know, that the upper and lower bound of data_array1 are connected
but for the synthesis tool these are just two numbers making the upper
und lower bound independend from each other. You have to find another
way a way to describe it.
A for-loop describing just the same as you wrote may be the solution,
because then for every bit the synthesis tool gets an exact description,
what to do.

But this may be not the final solution. In line 49 you compare two
vectors, but the length of the vectors is variable. What would that be
in hardware? I guess /several/ comparators - one for every vector width.
(Ignore ressource sharing at the moment.) I don't expect, that a
synthesis tool is capable of computing how many of such comparators are
needed - because at the moment I do not. Do you know it? ;-)
=> Model hardware - don't program VHDL! Model such comparators in an
explicit way. (You may use for-generate or a suitable nice way, but you
should define in a clear and exact way, what hardware you want. If you
do so, the synthesis tool will do it's job.)


Ralf
 

Welcome to EDABoard.com

Sponsor

Back
Top