Untitled
Untitled
initial
begin
clock = 1'b0;
Xin = VALUE;
Yin = 1'd0; // decimal of size 1 bit having the value 0
$display ("clock started - %d, %d", Xin, Yin);
#5;
forever
begin
#(CLK100_SPEED/2) clock = 1'b1; // wait for 5 units of time and then
clock is set as on
#(CLK100_SPEED/2) clock = 1'b0; // wait for 5 units of time and then
clock is set as off
end
end
//arctan_table
//------------------------------------------------------------------------------
// registers
//------------------------------------------------------------------------------
//stage outputs
reg signed [c_parameter :0] X [0:STG-1];
reg signed [c_parameter :0] Y [0:STG-1];
reg signed [31:0] Z [0:STG-1]; // 32bit
//------------------------------------------------------------------------------
// stage 0
//------------------------------------------------------------------------------
wire [1:0] quadrant;
assign quadrant = angle[31:30];
2'b01:
begin
X[0] <= -Yin;
Y[0] <= Xin;
Z[0] <= {2'b00,angle[29:0]}; // subtract pi/2 from angle for this
quadrant
end
2'b10:
begin
X[0] <= Yin;
Y[0] <= -Xin;
Z[0] <= {2'b11,angle[29:0]}; // add pi/2 to angle for this quadrant
end
endcase
end
//------------------------------------------------------------------------------
// generate stages 1 to STG-1
//------------------------------------------------------------------------------
genvar i;
generate
for (i=0; i < (STG-1); i=i+1)
begin: XYZ
wire Z_sign;
wire signed [c_parameter :0] X_shr, Y_shr;
//------------------------------------------------------------------------------
// output
//------------------------------------------------------------------------------
assign Xout = X[STG-1];
assign Yout = Y[STG-1];
endmodule