125 lines
3.1 KiB
Coq
125 lines
3.1 KiB
Coq
|
// File: design.v
|
||
|
// Generated by MyHDL 0.8
|
||
|
// Date: Tue Dec 3 04:33:14 2013
|
||
|
|
||
|
|
||
|
module d (
|
||
|
cos_z0,
|
||
|
sin_z0,
|
||
|
done,
|
||
|
z0,
|
||
|
start,
|
||
|
clock,
|
||
|
reset
|
||
|
);
|
||
|
// Sine and cosine computer.
|
||
|
//
|
||
|
// This module computes the sine and cosine of an input angle. The
|
||
|
// floating point numbers are represented as integers by scaling them
|
||
|
// up with a factor corresponding to the number of bits after the point.
|
||
|
//
|
||
|
// Ports:
|
||
|
// -----
|
||
|
// cos_z0: cosine of the input angle
|
||
|
// sin_z0: sine of the input angle
|
||
|
// done: output flag indicated completion of the computation
|
||
|
// z0: input angle
|
||
|
// start: input that starts the computation on a posedge
|
||
|
// clock: clock input
|
||
|
// reset: reset input
|
||
|
|
||
|
output signed [19:0] cos_z0;
|
||
|
reg signed [19:0] cos_z0;
|
||
|
output signed [19:0] sin_z0;
|
||
|
reg signed [19:0] sin_z0;
|
||
|
output done;
|
||
|
reg done;
|
||
|
input signed [19:0] z0;
|
||
|
input start;
|
||
|
input clock;
|
||
|
input reset;
|
||
|
|
||
|
(* gentb_constant = 1'b0 *)
|
||
|
wire reset;
|
||
|
|
||
|
always @(posedge clock, posedge reset) begin: DESIGN_PROCESSOR
|
||
|
reg [5-1:0] i;
|
||
|
reg [1-1:0] state;
|
||
|
reg signed [20-1:0] dz;
|
||
|
reg signed [20-1:0] dx;
|
||
|
reg signed [20-1:0] dy;
|
||
|
reg signed [20-1:0] y;
|
||
|
reg signed [20-1:0] x;
|
||
|
reg signed [20-1:0] z;
|
||
|
if (reset) begin
|
||
|
state = 1'b0;
|
||
|
cos_z0 <= 1;
|
||
|
sin_z0 <= 0;
|
||
|
done <= 1'b0;
|
||
|
x = 0;
|
||
|
y = 0;
|
||
|
z = 0;
|
||
|
i = 0;
|
||
|
end
|
||
|
else begin
|
||
|
case (state)
|
||
|
1'b0: begin
|
||
|
if (start) begin
|
||
|
x = 159188;
|
||
|
y = 0;
|
||
|
z = z0;
|
||
|
i = 0;
|
||
|
done <= 1'b0;
|
||
|
state = 1'b1;
|
||
|
end
|
||
|
end
|
||
|
1'b1: begin
|
||
|
dx = $signed(y >>> $signed({1'b0, i}));
|
||
|
dy = $signed(x >>> $signed({1'b0, i}));
|
||
|
case (i)
|
||
|
0: dz = 205887;
|
||
|
1: dz = 121542;
|
||
|
2: dz = 64220;
|
||
|
3: dz = 32599;
|
||
|
4: dz = 16363;
|
||
|
5: dz = 8189;
|
||
|
6: dz = 4096;
|
||
|
7: dz = 2048;
|
||
|
8: dz = 1024;
|
||
|
9: dz = 512;
|
||
|
10: dz = 256;
|
||
|
11: dz = 128;
|
||
|
12: dz = 64;
|
||
|
13: dz = 32;
|
||
|
14: dz = 16;
|
||
|
15: dz = 8;
|
||
|
16: dz = 4;
|
||
|
17: dz = 2;
|
||
|
default: dz = 1;
|
||
|
endcase
|
||
|
if ((z >= 0)) begin
|
||
|
x = x - dx;
|
||
|
y = y + dy;
|
||
|
z = z - dz;
|
||
|
end
|
||
|
else begin
|
||
|
x = x + dx;
|
||
|
y = y - dy;
|
||
|
z = z + dz;
|
||
|
end
|
||
|
if ((i == (19 - 1))) begin
|
||
|
cos_z0 <= x;
|
||
|
sin_z0 <= y;
|
||
|
state = 1'b0;
|
||
|
done <= 1'b1;
|
||
|
end
|
||
|
else begin
|
||
|
i = i + 1;
|
||
|
end
|
||
|
end
|
||
|
endcase
|
||
|
end
|
||
|
end
|
||
|
|
||
|
endmodule
|