J
John Vickers
Guest
This is about the possible valid interpretations of certain verilog code
according to the RTL synthesis standard (IEEE Std 1364.1-2002), rather than
the interpretation under the EDS standard (IEEE Std 1364-2001).
I think I'm happy with the use of translate_on/translate_off and 'force'
to model a 74LS74-style D-FF with asynchronous set and reset consistently
in both simulation and synthesis.
Now 5.2.2.1 of the RTL synthesis standard says:
always @( posedge <condA> or negedge <condB> or nededge <condC> or ...
posedge <Clock> )
// Any sequence of edge events can be in event list.
if (<condA> // Positive polarity since *posedge* <condA>.
// ... <asynchronous logic>
[...]
So *any* asynchronous logic (not involving 'x' or 'z') is valid here ?
In particular, are assignments of non-constant values valid ?
These are questions about the synthesis standard itself, rather than about
the behaviour or capabilities of any particular synthesis tool.
Assuming that the following module description:
- is synthesisable /according to the synthesis standard/
- has a synthesis for some synthesis tool
Is this module description description guaranteed (or even likely) to
be consistent between synthesis and simulation ?
module jam( clk, j, d, dj, q );
input clk, j, d, dj;
output q; reg q;
always @(posedge clk or posedge j )
if( j )
q <= dj; // In Synthesis, While j asserted, q follows dj
else
q <= d; // Normal posedge-triggered load
// synopsys translate_off
always @(j or dj)
if( j ) force q = dj;
else release q;
// synopsys translate_on
endmodule
The final question is:
Are there any real synthesis tools which will synthesize this the way I expect ?
Regards,
John Vickers.
according to the RTL synthesis standard (IEEE Std 1364.1-2002), rather than
the interpretation under the EDS standard (IEEE Std 1364-2001).
I think I'm happy with the use of translate_on/translate_off and 'force'
to model a 74LS74-style D-FF with asynchronous set and reset consistently
in both simulation and synthesis.
Now 5.2.2.1 of the RTL synthesis standard says:
always @( posedge <condA> or negedge <condB> or nededge <condC> or ...
posedge <Clock> )
// Any sequence of edge events can be in event list.
if (<condA> // Positive polarity since *posedge* <condA>.
// ... <asynchronous logic>
[...]
So *any* asynchronous logic (not involving 'x' or 'z') is valid here ?
In particular, are assignments of non-constant values valid ?
These are questions about the synthesis standard itself, rather than about
the behaviour or capabilities of any particular synthesis tool.
Assuming that the following module description:
- is synthesisable /according to the synthesis standard/
- has a synthesis for some synthesis tool
Is this module description description guaranteed (or even likely) to
be consistent between synthesis and simulation ?
module jam( clk, j, d, dj, q );
input clk, j, d, dj;
output q; reg q;
always @(posedge clk or posedge j )
if( j )
q <= dj; // In Synthesis, While j asserted, q follows dj
else
q <= d; // Normal posedge-triggered load
// synopsys translate_off
always @(j or dj)
if( j ) force q = dj;
else release q;
// synopsys translate_on
endmodule
The final question is:
Are there any real synthesis tools which will synthesize this the way I expect ?
Regards,
John Vickers.