2013-10-29 01:41:05 +01:00
// DESCRIPTION: Verilator: Verilog Test module
//
2020-03-21 16:24:24 +01:00
// This file ONLY is placed under the Creative Commons Public Domain, for
2023-01-29 22:50:10 +01:00
// any use, without warranty, 2009-2023 by Wilson Snyder.
2020-03-21 16:24:24 +01:00
// SPDX-License-Identifier: CC0-1.0
2013-10-29 01:41:05 +01:00
2023-01-29 22:50:10 +01:00
`define stop $stop
2024-10-03 01:00:39 +02:00
`define checks(gotv,expv) do if ((gotv) != (expv)) begin $write("%%Error: %s:%0d: got='%s' exp='%s'\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
2025-04-04 03:26:53 +02:00
`define checkp(gotv,expv_s) do begin string gotv_s; gotv_s = $sformatf("%p", gotv); if ((gotv_s) != (expv_s)) begin $write("%%Error: %s:%0d: got='%s' exp='%s'\n", `__FILE__,`__LINE__, (gotv_s), (expv_s)); `stop; end end while(0);
2023-01-29 22:50:10 +01:00
2023-04-11 01:40:17 +02:00
class Cls ;
typedef struct {
string m_strg ;
} underclass_t ;
underclass_t m_cstr ;
function underclass_t get_cstr ( ) ;
m_cstr . m_strg = " foo " ;
return m_cstr ;
endfunction
endclass
2013-10-29 01:41:05 +01:00
module x ;
typedef struct {
2022-12-21 01:22:42 +01:00
int a , b ;
logic [ 3 : 0 ] c ;
} embedded_t ;
2013-10-29 01:41:05 +01:00
2022-12-21 01:22:42 +01:00
typedef struct {
embedded_t b ;
embedded_t tab [ 3 : 0 ] ;
} notembedded_t ;
2013-10-29 01:41:05 +01:00
2023-01-29 22:50:10 +01:00
typedef struct {
logic [ 15 : 0 ] m_i ;
string m_s ;
} istr_t ;
2022-12-21 01:22:42 +01:00
notembedded_t p ;
embedded_t t [ 1 : 0 ] ;
2023-01-29 22:50:10 +01:00
istr_t istr ;
string s ;
2023-04-11 01:40:17 +02:00
Cls c ;
2013-10-29 01:41:05 +01:00
initial begin
2022-12-21 01:22:42 +01:00
t [ 1 ] . a = 2 ;
p . b . a = 1 ;
if ( t [ 1 ] . a ! = 2 ) $stop ;
if ( p . b . a ! = 1 ) $stop ;
2023-01-29 22:50:10 +01:00
istr . m_i = 12 ;
istr . m_s = " str1 " ;
2024-07-20 12:51:50 +02:00
`checkp ( istr , " '{m_i:'hc, m_s: \" str1 \" } " ) ;
2023-01-29 22:50:10 +01:00
istr = ' { m_i: '1 , m_s: " str2 " } ;
2024-07-20 12:51:50 +02:00
`checkp ( istr , " '{m_i:'hffff, m_s: \" str2 \" } " ) ;
2023-01-29 22:50:10 +01:00
2023-04-11 01:40:17 +02:00
c = new ;
s = c . get_cstr ( ) . m_strg ;
`checks ( s , " foo " ) ;
2013-10-29 01:41:05 +01:00
$write ( " *-* All Finished *-* \n " ) ;
$finish ;
end
endmodule