mirror of
https://github.com/verilator/verilator.git
synced 2025-01-10 16:47:48 +00:00
60d5f0e86b
This patch introduces the concept of 'loose' methods, which semantically are methods, but are declared as global functions, and are passed an explicit 'self' pointer. This enables these methods to be declared outside the class, only when they are needed, therefore removing the header dependency. The bulk of the emitted model implementation now uses loose methods.
247 lines
7.6 KiB
Plaintext
247 lines
7.6 KiB
Plaintext
module Vt_debug_emitv;
|
|
input logic clk;
|
|
input logic in;
|
|
signed int [31:0] t.array[0:2];
|
|
logic [15:0] t.pubflat;
|
|
logic [15:0] t.pubflat_r;
|
|
signed int [31:0] t.fd;
|
|
signed int [31:0] t.i;
|
|
signed int [31:0] t.cyc;
|
|
signed int [31:0] t.fo;
|
|
signed int [31:0] t.sum;
|
|
signed real t.r;
|
|
string t.str;
|
|
signed int [31:0] t._Vpast_0_0;
|
|
signed int [31:0] t._Vpast_1_0;
|
|
signed int [31:0] t.unnamedblk3.i;
|
|
@(*)@([settle])@([initial])@(posedge clk)@(negedge
|
|
clk)always @(
|
|
*)@(
|
|
[settle])@(
|
|
[initial])@(
|
|
posedge
|
|
clk)@(
|
|
negedge
|
|
clk) begin
|
|
$display("stmt");
|
|
end
|
|
always @([settle])@([initial])@(posedge clk)@(negedge
|
|
clk) begin
|
|
$display("stmt");
|
|
end
|
|
initial begin
|
|
// Function: f
|
|
$write("stmt\nstmt 0 99\n");
|
|
// Function: t
|
|
$display("stmt");
|
|
// Function: f
|
|
$write("stmt\nstmt 1 -1\n");
|
|
// Function: t
|
|
$display("stmt");
|
|
// Function: f
|
|
$display("stmt");
|
|
$display("stmt 2 -2");
|
|
// Function: t
|
|
$display("stmt");
|
|
$display("stmt");
|
|
end
|
|
|
|
???? // CFUNC '_final_TOP'
|
|
$display("stmt");
|
|
always @(posedge clk)@(negedge clk) begin
|
|
$display("posedge clk");
|
|
end
|
|
always @(posedge clk)@(negedge clk) begin
|
|
__Vdly__t.pubflat_r <= t.pubflat;
|
|
end
|
|
always @(posedge clk)@(negedge clk) begin
|
|
__Vdly__t.cyc <= (32'sh1 + t.cyc);
|
|
__Vdly__t.r <= (0.01 + t.r);
|
|
t.fo = t.cyc;
|
|
// Function: inc
|
|
__Vtask_t.sub.inc__2__i = t.fo;
|
|
__Vtask_t.sub.inc__2__o = (32'h1 + __Vtask_t.sub.inc__2__i[31:1]);
|
|
t.sum = __Vtask_t.sub.inc__2__o;
|
|
// Function: f
|
|
__Vfunc_t.sub.f__3__v = t.sum;
|
|
begin : label0
|
|
begin : label0
|
|
if ((32'sh0 == __Vfunc_t.sub.f__3__v)) begin
|
|
__Vfunc_t.sub.f__3__Vfuncout = 32'sh21;
|
|
disable label0;
|
|
end
|
|
__Vfunc_t.sub.f__3__Vfuncout = (32'h1
|
|
+ __Vfunc_t.sub.f__3__v[2]);
|
|
disable label0;
|
|
end
|
|
end
|
|
t.sum = __Vfunc_t.sub.f__3__Vfuncout;
|
|
$display("[%0t] sum = %~", $timet.sum, t.sum);
|
|
$display("a?= %d", ($c(32'sh1) ? $c(32'sh14)
|
|
: $c(32'sh1e)));
|
|
$c(;);
|
|
$display("%d", $c(0));
|
|
$fopen(72'h2f6465762f6e756c6c);
|
|
$fclose(t.fd);
|
|
$fopen(72'h2f6465762f6e756c6c, 8'h72);
|
|
$fgetc(t.fd);
|
|
$fflush(t.fd);
|
|
$fscanf(t.fd, "%d", t.sum);
|
|
;
|
|
$fdisplay(32'h69203d20, "%d", t.sum);
|
|
$fwrite(t.fd, "hello");
|
|
$readmemh(t.fd, t.array);
|
|
$readmemh(t.fd, t.array, 32'sh0);
|
|
$readmemh(t.fd, t.array, 32'sh0, 32'sh0);
|
|
t.sum = 32'sh0;
|
|
t.unnamedblk3.i = 32'sh0;
|
|
begin : label0
|
|
while ((t.unnamedblk3.i < t.cyc)) begin
|
|
t.sum = (t.sum + t.unnamedblk3.i);
|
|
if ((32'sha < t.sum)) begin
|
|
disable label0;
|
|
end
|
|
else begin
|
|
t.sum = (32'sh1 + t.sum);
|
|
end
|
|
t.unnamedblk3.i = (32'h1 + t.unnamedblk3.i);
|
|
end
|
|
end
|
|
if ((32'sh63 == t.cyc)) begin
|
|
$finish;
|
|
end
|
|
if ((32'sh64 == t.cyc)) begin
|
|
$stop;
|
|
end
|
|
if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("default");
|
|
end
|
|
if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("default");
|
|
end
|
|
if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("default");
|
|
end
|
|
if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("default");
|
|
end
|
|
if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("0");
|
|
end
|
|
priority if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("0");
|
|
end
|
|
unique if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("0");
|
|
end
|
|
unique0 if (in) begin
|
|
$display("1");
|
|
end
|
|
else begin
|
|
$display("0");
|
|
end
|
|
$display("%d%d", t._Vpast_0_0t._Vpast_1_0,
|
|
t._Vpast_1_0);
|
|
t.str = $sformatf("cyc=%~", t.cyc);
|
|
;
|
|
$display("str = %@", t.str);
|
|
$display("%% [%t] [%^] to=%o td=%d", $time$realtime
|
|
$time$time, $realtime$time$time, $time
|
|
$time, $time);
|
|
$sscanf(40'h666f6f3d35, "foo=%d", t.i);
|
|
;
|
|
$printtimescale;
|
|
if ((32'sh5 != t.i)) begin
|
|
$stop;
|
|
end
|
|
t.sum =
|
|
???? // RAND
|
|
32'sha;
|
|
$display("%g", $log10(t.r));
|
|
$display("%g", $ln(t.r));
|
|
$display("%g", $exp(t.r));
|
|
$display("%g", $sqrt(t.r));
|
|
$display("%g", $floor(t.r));
|
|
$display("%g", $ceil(t.r));
|
|
$display("%g", $sin(t.r));
|
|
$display("%g", $cos(t.r));
|
|
$display("%g", $tan(t.r));
|
|
$display("%g", $asin(t.r));
|
|
$display("%g", $acos(t.r));
|
|
$display("%g", $atan(t.r));
|
|
$display("%g", $sinh(t.r));
|
|
$display("%g", $cosh(t.r));
|
|
$display("%g", $tanh(t.r));
|
|
$display("%g", $asinh(t.r));
|
|
$display("%g", $acosh(t.r));
|
|
$display("%g", $atanh(t.r));
|
|
end
|
|
/*verilator public_flat_rw @(posedge clk)@(negedge
|
|
clk) t.pubflat*/
|
|
always @(posedge clk)@(negedge clk) begin
|
|
__Vdly__t._Vpast_0_0 <= t.cyc;
|
|
end
|
|
always @(posedge clk)@(negedge clk) begin
|
|
__Vdly__t._Vpast_1_0 <= t.cyc;
|
|
end
|
|
__Vdly__t._Vpast_1_0 = t._Vpast_1_0;
|
|
t._Vpast_1_0 = __Vdly__t._Vpast_1_0;
|
|
__Vdly__t._Vpast_0_0 = t._Vpast_0_0;
|
|
t._Vpast_0_0 = __Vdly__t._Vpast_0_0;
|
|
__Vdly__t.r = t.r;
|
|
t.r = __Vdly__t.r;
|
|
__Vdly__t.cyc = t.cyc;
|
|
t.cyc = __Vdly__t.cyc;
|
|
__Vdly__t.pubflat_r = t.pubflat_r;
|
|
t.pubflat_r = __Vdly__t.pubflat_r;
|
|
always @(negedge clk) begin
|
|
$display("negedge clk, pfr = %x", t.pubflat_r);
|
|
end
|
|
signed int [31:0] __Vtask_t.sub.inc__2__i;
|
|
signed int [31:0] __Vtask_t.sub.inc__2__o;
|
|
signed int [31:0] __Vfunc_t.sub.f__3__Vfuncout;
|
|
signed int [31:0] __Vfunc_t.sub.f__3__v;
|
|
logic [15:0] __Vdly__t.pubflat_r;
|
|
signed int [31:0] __Vdly__t.cyc;
|
|
signed real __Vdly__t.r;
|
|
signed int [31:0] __Vdly__t._Vpast_0_0;
|
|
signed int [31:0] __Vdly__t._Vpast_1_0;
|
|
endmodule
|
|
package Vt_debug_emitv___024unit;
|
|
endpackage
|
|
package Vt_debug_emitv_Pkg;
|
|
endpackage
|
|
class Vt_debug_emitv___024unit__03a__03aCls;
|
|
signed int [31:0] member;
|
|
|
|
???? // CFUNC '__VnoInFunc_method'
|
|
|
|
???? // CFUNC 'new'
|
|
$_CSTMT(_ctor_var_reset(vlSymsp);
|
|
);
|
|
$unit::Cls.member = 32'sh1;
|
|
endclass
|
|
/*class*/package Vt_debug_emitv___024unit__03a__03aCls__Vclpkg;
|
|
end/*class*/package
|