FW:


Subject: FW:
From: J. Bhasker (jbhasker@Cadence.COM)
Date: Fri Oct 05 2001 - 07:04:01 PDT


Forwarded from Jenjen Tiao:

All,

     I received from J. Bhasker few pages concerning the items that
I have signed up for the
"new Verilog 2001 features and suggests to its synthesizability", the
following is my analysis
and the NOTES are some errors/typos I think exist in the document.
According to Bhasker,
the document pages belong to the latest Verilog LRM (IEEE 1364/D6 --
2/4/2001).

item 19: Power op (**) -- Yes - first operand is 2, or opds are
constants.
  my opinion: As long as the operands are constants, I think should be
good
enough, the first op need not be
  limited to 2.
  example: x ** y
  If we limit the operands to be constants, then one way to implement
may be
simply multiplying x, y number
  of times. However, care should be taken when using this operator (like
some
other operators as well).
  Since the length of the result (interim result) is the length of x,
and that
limits the results significantly.
  Hence, it may be wise to perform this op on unsized constant integers
or to
always "+ 0" to the
  first operand, if the first operand is a sized reg.

Note: For page 64, Section 4, example 4.4.3, I can't seem to verify the
value,
though all of the resulting
bit sizes seemed correct.
Maybe my fax pages aren't that clear, but, if
a = 4'hF
b = 6'ha <-- is this 'a'?

if so, how can a * b results in a value of 96? the expression size is 6,
and this
is indeed correct.

item 16: System functions $signed, $unsigned -- Yes
  my opinion: These definitely can be supported. These seem very helpful
when
involved in the calssic
  example given for the 12/3 example (when constant integers, sized
integers and
reg/integer types
  are all involved in the calculation of the arithmetic problem). When
every
operand may be type casted,
  then the whole expressions can be clear and understandable with no
confusion in
interpretation.
  Though I do see (something that I was
  not aware of when I was supporting verilog) reg type declared as
signed, the
character 's' used in based
  constants. These all make the messy expressions more readable and
easier to
understand.
  However, the example given in section 4.5 for regA makes the system
function
redundant.
  Since regA is unsigned, hence, whether the system function $unsigned
is used or
not, the answer
  will be the same either way. Maybe a better example can be provided.

Note: For page 65,
Section 4.5: regA = $unsigned(-4); // regA = 4'b1100
The above comment seemed wrong? regA is declared to be of size 8 bits,
hence, (-4)
is a 32 bit
constant integer, hence, $unsigned should return a 32 bit, 111...100 bit
value,
chopped to 8, hence
I thought regA would get the value 8'b11111100 instead.

If I haven't address any other issues in the items above, please do let
me know.
The 2 notes above are findings that I seem unable to align my answers
with. If my
findings are incorrect
please explain them to me. My number is 610 712-2596. (I have not paid
close
attention to pages 46 - 48.)
Thanks.

Jenjen Tiao
Agere Systems, Inc.
610 712-2596



This archive was generated by hypermail 2b28 : Fri Oct 05 2001 - 07:12:35 PDT