mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Verilog
		
	
	
	
	
	
| // 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
 |