summaryrefslogtreecommitdiff
path: root/tests/simple/realexpr.v
blob: 2b63ca6f9fed762612462c572c5e308917009516 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
module demo_001(y1, y2, y3, y4);
	output [7:0] y1, y2, y3, y4;

	localparam [7:0] p1 = 123.45;
	localparam real p2 = 123.45;
	localparam real p3 = 123;
	localparam p4 = 123.45;

	assign y1 = p1 + 0.2;
	assign y2 = p2 + 0.2;
	assign y3 = p3 + 0.2;
	assign y4 = p4 + 0.2;
endmodule

module demo_002(s, a, y);
	input [4:0] s;
	input [3:0] a;
	output [7:0] y;

	reg [7:0] data [21*16-1:0];
	integer i;

	initial begin
		for (i = 0; i < 16; i = i+1) begin
			data[ 0*16 + i] = 128 + 64 * $ln    (i*0.2 - 0.8);
			data[ 1*16 + i] = 128 + 64 * $log10 (i*0.2 - 0.8);
			data[ 2*16 + i] = 128 + 64 * $exp   (i*0.2 - 0.8);
			data[ 3*16 + i] = 128 + 64 * $sqrt  (i*0.2 - 0.8);
			data[ 4*16 + i] = 128 + 64 * $floor (i*0.2 - 0.8);
			data[ 5*16 + i] = 128 + 64 * $ceil  (i*0.2 - 0.8);
			data[ 6*16 + i] = 128 + 64 * $sin   (i*0.2 - 0.8);
			data[ 7*16 + i] = 128 + 64 * $cos   (i*0.2 - 0.8);
			data[ 8*16 + i] = 128 + 64 * $tan   (i*0.2 - 0.8);
			data[ 9*16 + i] = 128 + 64 * $asin  (i*0.2 - 0.8);
			data[10*16 + i] = 128 + 64 * $acos  (i*0.2 - 0.8);
			data[11*16 + i] = 128 + 64 * $atan  (i*0.2 - 0.8);
			data[12*16 + i] = 128 + 64 * $sinh  (i*0.2 - 0.8);
			data[13*16 + i] = 128 + 64 * $cosh  (i*0.2 - 0.8);
			data[14*16 + i] = 128 + 64 * $tanh  (i*0.2 - 0.8);
			data[15*16 + i] = 128 + 64 * $asinh (i*0.2 - 0.8);
			data[16*16 + i] = 128 + 64 * $acosh (i*0.2 - 0.8);
			data[17*16 + i] = 128 + 64 * $atanh (i*0.2 - 0.8);
		end
	end

	assign y = s < 18 ? data[s*16 + a] : 0;
endmodule

module demo_003(s, a, b, y);
	input [1:0] s;
	input [3:0] a;
	input [3:0] b;
	output [7:0] y;

	reg [7:0] data [3*16*16-1:0];
	integer i, j;

	initial begin
		for (i = 0; i < 16; i = i+1)
		for (j = 0; j < 16; j = j+1) begin
			data[0*256 + i*16 + j] = 128 + 64 * $pow   (i*0.2 - 0.8, j*0.2 - 0.8);
			data[1*256 + i*16 + j] = 128 + 64 * $atan2 (i*0.2 - 0.8, j*0.2 - 0.8);
			data[2*256 + i*16 + j] = 128 + 64 * $hypot (i*0.2 - 0.8, j*0.2 - 0.8);
		end
	end

	assign y = s < 3 ? data[s*256 + a*16 + b] : 0;
endmodule