@@ -45,17 +45,17 @@ module ad_dds_cordic_pipe#(
45
45
46
46
// interface
47
47
48
- input clk,
49
- (* keep = "TRUE" * ) input dir,
50
- (* keep = "TRUE" * ) input signed [ DW- 1 :0 ] dataa_x,
51
- (* keep = "TRUE" * ) input signed [ DW- 1 :0 ] dataa_y,
52
- (* keep = "TRUE" * ) input signed [ DW- 1 :0 ] dataa_z,
53
- (* keep = "TRUE" * ) input signed [ DW- 1 :0 ] datab_x,
54
- (* keep = "TRUE" * ) input signed [ DW- 1 :0 ] datab_y,
55
- (* keep = "TRUE" * ) input signed [ DW- 1 :0 ] datab_z,
56
- (* keep = "TRUE" * ) output reg signed [ DW- 1 :0 ] result_x,
57
- (* keep = "TRUE" * ) output reg signed [ DW- 1 :0 ] result_y,
58
- (* keep = "TRUE" * ) output reg signed [ DW- 1 :0 ] result_z,
48
+ input clk,
49
+ (* keep = "TRUE" * ) input dir,
50
+ (* keep = "TRUE" * ) input [ DW- 1 :0 ] dataa_x,
51
+ (* keep = "TRUE" * ) input [ DW- 1 :0 ] dataa_y,
52
+ (* keep = "TRUE" * ) input [ DW- 1 :0 ] dataa_z,
53
+ (* keep = "TRUE" * ) input [ DW- 1 :0 ] datab_x,
54
+ (* keep = "TRUE" * ) input [ DW- 1 :0 ] datab_y,
55
+ (* keep = "TRUE" * ) input [ DW- 1 :0 ] datab_z,
56
+ (* keep = "TRUE" * ) output reg [ DW- 1 :0 ] result_x,
57
+ (* keep = "TRUE" * ) output reg [ DW- 1 :0 ] result_y,
58
+ (* keep = "TRUE" * ) output reg [ DW- 1 :0 ] result_z,
59
59
output signed [ DW- 1 :0 ] sgn_shift_x,
60
60
output signed [ DW- 1 :0 ] sgn_shift_y,
61
61
input [DELAY_DW:1 ] data_delay_in,
@@ -66,22 +66,15 @@ module ad_dds_cordic_pipe#(
66
66
67
67
reg [DELAY_DW:1 ] data_delay = 'd0;
68
68
69
+ wire dir_inv = ~ dir;
70
+
69
71
// stage rotation
70
72
71
73
always @(posedge clk)
72
74
begin
73
- case (dir)
74
- 1'b0 : begin
75
- result_x <= dataa_x - datab_y;
76
- result_y <= dataa_y + datab_x;
77
- result_z <= dataa_z - datab_z;
78
- end
79
- 1'b1 : begin
80
- result_x <= dataa_x + datab_y;
81
- result_y <= dataa_y - datab_x;
82
- result_z <= dataa_z + datab_z;
83
- end
84
- endcase
75
+ result_x <= dataa_x + ({DW{dir_inv}} ^ datab_y) + dir_inv;
76
+ result_y <= dataa_y + ({DW{dir}} ^ datab_x) + dir;
77
+ result_z <= dataa_z + ({DW{dir_inv}} ^ datab_z) + dir_inv;
85
78
end
86
79
87
80
// stage shift
@@ -100,4 +93,4 @@ module ad_dds_cordic_pipe#(
100
93
101
94
assign data_delay_out = data_delay;
102
95
103
- endmodule
96
+ endmodule
0 commit comments