Added sincos test case
[yosys.git] / tests / simple / sincos.v
1 // File: design.v
2 // Generated by MyHDL 0.8
3 // Date: Tue Dec 3 04:33:14 2013
4
5
6 module d (
7 cos_z0,
8 sin_z0,
9 done,
10 z0,
11 start,
12 clock,
13 reset
14 );
15 // Sine and cosine computer.
16 //
17 // This module computes the sine and cosine of an input angle. The
18 // floating point numbers are represented as integers by scaling them
19 // up with a factor corresponding to the number of bits after the point.
20 //
21 // Ports:
22 // -----
23 // cos_z0: cosine of the input angle
24 // sin_z0: sine of the input angle
25 // done: output flag indicated completion of the computation
26 // z0: input angle
27 // start: input that starts the computation on a posedge
28 // clock: clock input
29 // reset: reset input
30
31 output signed [19:0] cos_z0;
32 reg signed [19:0] cos_z0;
33 output signed [19:0] sin_z0;
34 reg signed [19:0] sin_z0;
35 output done;
36 reg done;
37 input signed [19:0] z0;
38 input start;
39 input clock;
40 input reset;
41
42 (* gentb_constant="0" *)
43 wire reset;
44
45 always @(posedge clock, posedge reset) begin: DESIGN_PROCESSOR
46 reg [5-1:0] i;
47 reg [1-1:0] state;
48 reg signed [20-1:0] dz;
49 reg signed [20-1:0] dx;
50 reg signed [20-1:0] dy;
51 reg signed [20-1:0] y;
52 reg signed [20-1:0] x;
53 reg signed [20-1:0] z;
54 if (reset) begin
55 state = 1'b0;
56 cos_z0 <= 1;
57 sin_z0 <= 0;
58 done <= 1'b0;
59 x = 0;
60 y = 0;
61 z = 0;
62 i = 0;
63 end
64 else begin
65 case (state)
66 1'b0: begin
67 if (start) begin
68 x = 159188;
69 y = 0;
70 z = z0;
71 i = 0;
72 done <= 1'b0;
73 state = 1'b1;
74 end
75 end
76 1'b1: begin
77 dx = $signed(y >>> $signed({1'b0, i}));
78 dy = $signed(x >>> $signed({1'b0, i}));
79 case (i)
80 0: dz = 205887;
81 1: dz = 121542;
82 2: dz = 64220;
83 3: dz = 32599;
84 4: dz = 16363;
85 5: dz = 8189;
86 6: dz = 4096;
87 7: dz = 2048;
88 8: dz = 1024;
89 9: dz = 512;
90 10: dz = 256;
91 11: dz = 128;
92 12: dz = 64;
93 13: dz = 32;
94 14: dz = 16;
95 15: dz = 8;
96 16: dz = 4;
97 17: dz = 2;
98 default: dz = 1;
99 endcase
100 if ((z >= 0)) begin
101 x = x - dx;
102 y = y + dy;
103 z = z - dz;
104 end
105 else begin
106 x = x + dx;
107 y = y - dy;
108 z = z + dz;
109 end
110 if ((i == (19 - 1))) begin
111 cos_z0 <= x;
112 sin_z0 <= y;
113 state = 1'b0;
114 done <= 1'b1;
115 end
116 else begin
117 i = i + 1;
118 end
119 end
120 endcase
121 end
122 end
123
124 endmodule