Archived
add duifei_online_acq_par
完成对飞并行捕获程序的编写,仿真和测试,能够正常采集数据
This commit is contained in:
@@ -0,0 +1,188 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 11:51:06 06/08/2020
|
||||
// Design Name:
|
||||
// Module Name: test_784TR_top
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
// ??????9?byte? ?1-8?????????????????8???????????????????3?byte???5?don't care??
|
||||
// ?9byte??4bit??spi??4bit??????
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
/*************?????????*******************/
|
||||
module adf4351_2(
|
||||
input i_sysclk ,
|
||||
input i_arstn ,
|
||||
output o_cfgover ,
|
||||
output o_ADF4351_SCK ,
|
||||
output o_ADF4351_DATA ,
|
||||
output o_ADF4351_LE ,
|
||||
output o_ADF4351_CE ,
|
||||
output o_ADF4351_mutel ,
|
||||
input i_ADF4351_locked
|
||||
);
|
||||
|
||||
|
||||
localparam DATA_WIDTH = 32;
|
||||
localparam DATA_LENTH = 6;
|
||||
localparam SYS_CLOCK = 10;
|
||||
localparam LOCK_PIRED = SYS_CLOCK * 100000;
|
||||
localparam rst_time = 16'h7fff;//16'h7fff
|
||||
reg[7:0] cnt_word = 8'd0;
|
||||
reg[5:0] cnt_bits = 6'd0;
|
||||
|
||||
reg [DATA_WIDTH-1:0] cfgdata = 0;
|
||||
wire [DATA_WIDTH-1:0] regdata;
|
||||
reg cfgover = 1'b0 ;
|
||||
reg pll_locked = 1'b0 ;
|
||||
reg load_en = 1'b0 ;
|
||||
reg [31:0] cnt_lock = 32'b0;
|
||||
(* KEEP = "TRUE" *)reg[3:0] cfgstate = 4'b0000;
|
||||
wire spiIdle;
|
||||
|
||||
reg spi_sdi = 1'b0,spi_csb = 1'b1 ;
|
||||
assign o_cfgover = cfgover ;
|
||||
assign o_ADF4351_LE = load_en ;
|
||||
assign o_ADF4351_mutel= 1'b1 ;
|
||||
assign o_ADF4351_SCK = o_ADF4351_CE ? 1'b0 : i_sysclk ;
|
||||
assign o_ADF4351_CE = spi_csb ;
|
||||
assign o_ADF4351_DATA = spi_sdi ;
|
||||
reg [DATA_WIDTH-1:0] CFGREG0 ;
|
||||
assign regdata = CFGREG0 ;
|
||||
reg cfg_start ;
|
||||
reg [15:0] counter0 ;
|
||||
|
||||
always@ (posedge i_sysclk)
|
||||
if(~i_arstn)
|
||||
CFGREG0 <= 32'b0;
|
||||
else begin
|
||||
//RFout = Fpfd*(INT + (Frac/Mod)) Fpfd = Refin*[(1+D)/(R*(1+T))]
|
||||
case (cnt_word)
|
||||
8'h00: CFGREG0 <= {32'h580005}; //reg 5
|
||||
8'h01: CFGREG0 <= {32'h85003C}; //reg 4
|
||||
8'h02: CFGREG0 <= {32'h4B3}; //reg 3
|
||||
8'h03: CFGREG0 <= {32'h28F42}; //reg 2 {5'b0,T,R,D,12'h,reg2} R = 1 D = 1 T = 1
|
||||
8'h04: CFGREG0 <= {32'h8008011}; //reg 1 {3'd0,phase adjust,prescaler,phase value,Frac,reg1}mod = 25
|
||||
8'h05: CFGREG0 <= {32'hC80000}; //reg 0 {1'b0,int,frac,reg0} int = 52 frac= 8
|
||||
default : CFGREG0 <= 32'b0;
|
||||
endcase
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
always@(negedge i_sysclk)begin
|
||||
if(~i_arstn)begin
|
||||
cfgdata <= 0;
|
||||
cnt_word <= 8'd0;
|
||||
cnt_bits <= 6'd0;
|
||||
cfgover <= 1'b0;
|
||||
cfgstate <= 4'd0;
|
||||
spi_csb <= 1'b1;
|
||||
load_en <= 1'b1;
|
||||
spi_sdi <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
case(cfgstate)
|
||||
4'd0:begin
|
||||
if(cfg_start)begin
|
||||
cfgstate <= 4'd1;
|
||||
end
|
||||
else begin
|
||||
spi_csb <= 1'b1;
|
||||
load_en <= 1'b0;
|
||||
spi_sdi <= 1'b0;
|
||||
cfgover <= 1'b0;
|
||||
cfgstate <= 4'd0;
|
||||
end
|
||||
end
|
||||
4'd1:begin
|
||||
cfgdata <= regdata;
|
||||
cnt_lock <= 32'd0;
|
||||
cnt_bits <= 6'd0;
|
||||
cfgstate <= cfgstate + 1'b1;
|
||||
end
|
||||
4'd2:begin
|
||||
spi_csb <= 1'b0;
|
||||
load_en <= 1'b0;
|
||||
spi_sdi <= cfgdata[DATA_WIDTH-1];
|
||||
cfgdata <= cfgdata << 1'b1;
|
||||
cnt_bits <= cnt_bits + 1'b1;
|
||||
if(cnt_bits == DATA_WIDTH-1)begin
|
||||
cfgstate <= cfgstate + 1'b1;
|
||||
cnt_word <= cnt_word + 1'b1;
|
||||
end
|
||||
end
|
||||
4'd3:begin
|
||||
spi_csb <= 1'b1;
|
||||
load_en <= 1'b1;
|
||||
spi_sdi <= 1'b0;
|
||||
if(cnt_word == DATA_LENTH)
|
||||
cfgstate <= cfgstate + 1'b1;
|
||||
else
|
||||
cfgstate <= 4'd0;
|
||||
end
|
||||
4'd4:begin
|
||||
cfgstate <= 4'd5;
|
||||
spi_csb <= 1'b1;
|
||||
load_en <= 1'b0;
|
||||
spi_sdi <= 1'b0;
|
||||
end
|
||||
4'd5:begin//ftw cfg
|
||||
if(cnt_lock > LOCK_PIRED)
|
||||
begin
|
||||
pll_locked <= i_ADF4351_locked;
|
||||
cnt_lock <= cnt_lock;
|
||||
if( (pll_locked == 1'b0) && (cnt_lock > LOCK_PIRED))
|
||||
begin
|
||||
cfgstate <= 4'd1;
|
||||
cnt_word <= 8'd0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
cfgstate <= 4'd5;
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdi <= 1'b0;
|
||||
cfgover <= 1'b1;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
cnt_lock <= cnt_lock + 1'b1;
|
||||
end
|
||||
end
|
||||
default:cfgstate <= 4'd0;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always@(negedge i_sysclk)begin
|
||||
if(~i_arstn)begin
|
||||
counter0 <= 16'd0;
|
||||
cfg_start <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
if(counter0 == rst_time)begin//16'h7fff
|
||||
counter0 <= counter0;
|
||||
cfg_start <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
counter0 <= counter0 + 1'b1;
|
||||
cfg_start <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,441 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 14:37:16 01/15/2022
|
||||
// Design Name:
|
||||
// Module Name: FRAC1
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module FRAC1(
|
||||
input clka,
|
||||
input [15:0] addra,
|
||||
output reg[24:0] douta
|
||||
);
|
||||
|
||||
|
||||
reg[11:0] addr=0;
|
||||
|
||||
always@(posedge clka)begin
|
||||
addr<= (addra+375) % 400 ;
|
||||
end
|
||||
|
||||
always@(posedge clka)begin
|
||||
case(addr)
|
||||
0 : douta <= 0 ;
|
||||
1 : douta <= 83886 ;
|
||||
2 : douta <= 167772 ;
|
||||
3 : douta <= 251658 ;
|
||||
4 : douta <= 335544 ;
|
||||
5 : douta <= 419430 ;
|
||||
6 : douta <= 503316 ;
|
||||
7 : douta <= 587202 ;
|
||||
8 : douta <= 671088 ;
|
||||
9 : douta <= 754974 ;
|
||||
10 : douta <= 838860 ;
|
||||
11 : douta <= 922746 ;
|
||||
12 : douta <= 1006632 ;
|
||||
13 : douta <= 1090519 ;
|
||||
14 : douta <= 1174405 ;
|
||||
15 : douta <= 1258291 ;
|
||||
16 : douta <= 1342177 ;
|
||||
17 : douta <= 1426063 ;
|
||||
18 : douta <= 1509949 ;
|
||||
19 : douta <= 1593835 ;
|
||||
20 : douta <= 1677721 ;
|
||||
21 : douta <= 1761607 ;
|
||||
22 : douta <= 1845493 ;
|
||||
23 : douta <= 1929379 ;
|
||||
24 : douta <= 2013265 ;
|
||||
25 : douta <= 2097152 ;
|
||||
26 : douta <= 2181038 ;
|
||||
27 : douta <= 2264924 ;
|
||||
28 : douta <= 2348810 ;
|
||||
29 : douta <= 2432696 ;
|
||||
30 : douta <= 2516582 ;
|
||||
31 : douta <= 2600468 ;
|
||||
32 : douta <= 2684354 ;
|
||||
33 : douta <= 2768240 ;
|
||||
34 : douta <= 2852126 ;
|
||||
35 : douta <= 2936012 ;
|
||||
36 : douta <= 3019898 ;
|
||||
37 : douta <= 3103784 ;
|
||||
38 : douta <= 3187671 ;
|
||||
39 : douta <= 3271557 ;
|
||||
40 : douta <= 3355443 ;
|
||||
41 : douta <= 3439329 ;
|
||||
42 : douta <= 3523215 ;
|
||||
43 : douta <= 3607101 ;
|
||||
44 : douta <= 3690987 ;
|
||||
45 : douta <= 3774873 ;
|
||||
46 : douta <= 3858759 ;
|
||||
47 : douta <= 3942645 ;
|
||||
48 : douta <= 4026531 ;
|
||||
49 : douta <= 4110417 ;
|
||||
50 : douta <= 4194304 ;
|
||||
51 : douta <= 4278190 ;
|
||||
52 : douta <= 4362076 ;
|
||||
53 : douta <= 4445962 ;
|
||||
54 : douta <= 4529848 ;
|
||||
55 : douta <= 4613734 ;
|
||||
56 : douta <= 4697620 ;
|
||||
57 : douta <= 4781506 ;
|
||||
58 : douta <= 4865392 ;
|
||||
59 : douta <= 4949278 ;
|
||||
60 : douta <= 5033164 ;
|
||||
61 : douta <= 5117050 ;
|
||||
62 : douta <= 5200936 ;
|
||||
63 : douta <= 5284823 ;
|
||||
64 : douta <= 5368709 ;
|
||||
65 : douta <= 5452595 ;
|
||||
66 : douta <= 5536481 ;
|
||||
67 : douta <= 5620367 ;
|
||||
68 : douta <= 5704253 ;
|
||||
69 : douta <= 5788139 ;
|
||||
70 : douta <= 5872025 ;
|
||||
71 : douta <= 5955911 ;
|
||||
72 : douta <= 6039797 ;
|
||||
73 : douta <= 6123683 ;
|
||||
74 : douta <= 6207569 ;
|
||||
75 : douta <= 6291456 ;
|
||||
76 : douta <= 6375342 ;
|
||||
77 : douta <= 6459228 ;
|
||||
78 : douta <= 6543114 ;
|
||||
79 : douta <= 6627000 ;
|
||||
80 : douta <= 6710886 ;
|
||||
81 : douta <= 6794772 ;
|
||||
82 : douta <= 6878658 ;
|
||||
83 : douta <= 6962544 ;
|
||||
84 : douta <= 7046430 ;
|
||||
85 : douta <= 7130316 ;
|
||||
86 : douta <= 7214202 ;
|
||||
87 : douta <= 7298088 ;
|
||||
88 : douta <= 7381975 ;
|
||||
89 : douta <= 7465861 ;
|
||||
90 : douta <= 7549747 ;
|
||||
91 : douta <= 7633633 ;
|
||||
92 : douta <= 7717519 ;
|
||||
93 : douta <= 7801405 ;
|
||||
94 : douta <= 7885291 ;
|
||||
95 : douta <= 7969177 ;
|
||||
96 : douta <= 8053063 ;
|
||||
97 : douta <= 8136949 ;
|
||||
98 : douta <= 8220835 ;
|
||||
99 : douta <= 8304721 ;
|
||||
100 : douta <= 8388608 ;
|
||||
101 : douta <= 8472494 ;
|
||||
102 : douta <= 8556380 ;
|
||||
103 : douta <= 8640266 ;
|
||||
104 : douta <= 8724152 ;
|
||||
105 : douta <= 8808038 ;
|
||||
106 : douta <= 8891924 ;
|
||||
107 : douta <= 8975810 ;
|
||||
108 : douta <= 9059696 ;
|
||||
109 : douta <= 9143582 ;
|
||||
110 : douta <= 9227468 ;
|
||||
111 : douta <= 9311354 ;
|
||||
112 : douta <= 9395240 ;
|
||||
113 : douta <= 9479127 ;
|
||||
114 : douta <= 9563013 ;
|
||||
115 : douta <= 9646899 ;
|
||||
116 : douta <= 9730785 ;
|
||||
117 : douta <= 9814671 ;
|
||||
118 : douta <= 9898557 ;
|
||||
119 : douta <= 9982443 ;
|
||||
120 : douta <= 10066329 ;
|
||||
121 : douta <= 10150215 ;
|
||||
122 : douta <= 10234101 ;
|
||||
123 : douta <= 10317987 ;
|
||||
124 : douta <= 10401873 ;
|
||||
125 : douta <= 10485760 ;
|
||||
126 : douta <= 10569646 ;
|
||||
127 : douta <= 10653532 ;
|
||||
128 : douta <= 10737418 ;
|
||||
129 : douta <= 10821304 ;
|
||||
130 : douta <= 10905190 ;
|
||||
131 : douta <= 10989076 ;
|
||||
132 : douta <= 11072962 ;
|
||||
133 : douta <= 11156848 ;
|
||||
134 : douta <= 11240734 ;
|
||||
135 : douta <= 11324620 ;
|
||||
136 : douta <= 11408506 ;
|
||||
137 : douta <= 11492392 ;
|
||||
138 : douta <= 11576279 ;
|
||||
139 : douta <= 11660165 ;
|
||||
140 : douta <= 11744051 ;
|
||||
141 : douta <= 11827937 ;
|
||||
142 : douta <= 11911823 ;
|
||||
143 : douta <= 11995709 ;
|
||||
144 : douta <= 12079595 ;
|
||||
145 : douta <= 12163481 ;
|
||||
146 : douta <= 12247367 ;
|
||||
147 : douta <= 12331253 ;
|
||||
148 : douta <= 12415139 ;
|
||||
149 : douta <= 12499025 ;
|
||||
150 : douta <= 12582912 ;
|
||||
151 : douta <= 12666798 ;
|
||||
152 : douta <= 12750684 ;
|
||||
153 : douta <= 12834570 ;
|
||||
154 : douta <= 12918456 ;
|
||||
155 : douta <= 13002342 ;
|
||||
156 : douta <= 13086228 ;
|
||||
157 : douta <= 13170114 ;
|
||||
158 : douta <= 13254000 ;
|
||||
159 : douta <= 13337886 ;
|
||||
160 : douta <= 13421772 ;
|
||||
161 : douta <= 13505658 ;
|
||||
162 : douta <= 13589544 ;
|
||||
163 : douta <= 13673431 ;
|
||||
164 : douta <= 13757317 ;
|
||||
165 : douta <= 13841203 ;
|
||||
166 : douta <= 13925089 ;
|
||||
167 : douta <= 14008975 ;
|
||||
168 : douta <= 14092861 ;
|
||||
169 : douta <= 14176747 ;
|
||||
170 : douta <= 14260633 ;
|
||||
171 : douta <= 14344519 ;
|
||||
172 : douta <= 14428405 ;
|
||||
173 : douta <= 14512291 ;
|
||||
174 : douta <= 14596177 ;
|
||||
175 : douta <= 14680064 ;
|
||||
176 : douta <= 14763950 ;
|
||||
177 : douta <= 14847836 ;
|
||||
178 : douta <= 14931722 ;
|
||||
179 : douta <= 15015608 ;
|
||||
180 : douta <= 15099494 ;
|
||||
181 : douta <= 15183380 ;
|
||||
182 : douta <= 15267266 ;
|
||||
183 : douta <= 15351152 ;
|
||||
184 : douta <= 15435038 ;
|
||||
185 : douta <= 15518924 ;
|
||||
186 : douta <= 15602810 ;
|
||||
187 : douta <= 15686696 ;
|
||||
188 : douta <= 15770583 ;
|
||||
189 : douta <= 15854469 ;
|
||||
190 : douta <= 15938355 ;
|
||||
191 : douta <= 16022241 ;
|
||||
192 : douta <= 16106127 ;
|
||||
193 : douta <= 16190013 ;
|
||||
194 : douta <= 16273899 ;
|
||||
195 : douta <= 16357785 ;
|
||||
196 : douta <= 16441671 ;
|
||||
197 : douta <= 16525557 ;
|
||||
198 : douta <= 16609443 ;
|
||||
199 : douta <= 16693329 ;
|
||||
200 : douta <= 16777216 ;
|
||||
201 : douta <= 16861102 ;
|
||||
202 : douta <= 16944988 ;
|
||||
203 : douta <= 17028874 ;
|
||||
204 : douta <= 17112760 ;
|
||||
205 : douta <= 17196646 ;
|
||||
206 : douta <= 17280532 ;
|
||||
207 : douta <= 17364418 ;
|
||||
208 : douta <= 17448304 ;
|
||||
209 : douta <= 17532190 ;
|
||||
210 : douta <= 17616076 ;
|
||||
211 : douta <= 17699962 ;
|
||||
212 : douta <= 17783848 ;
|
||||
213 : douta <= 17867735 ;
|
||||
214 : douta <= 17951621 ;
|
||||
215 : douta <= 18035507 ;
|
||||
216 : douta <= 18119393 ;
|
||||
217 : douta <= 18203279 ;
|
||||
218 : douta <= 18287165 ;
|
||||
219 : douta <= 18371051 ;
|
||||
220 : douta <= 18454937 ;
|
||||
221 : douta <= 18538823 ;
|
||||
222 : douta <= 18622709 ;
|
||||
223 : douta <= 18706595 ;
|
||||
224 : douta <= 18790481 ;
|
||||
225 : douta <= 18874368 ;
|
||||
226 : douta <= 18958254 ;
|
||||
227 : douta <= 19042140 ;
|
||||
228 : douta <= 19126026 ;
|
||||
229 : douta <= 19209912 ;
|
||||
230 : douta <= 19293798 ;
|
||||
231 : douta <= 19377684 ;
|
||||
232 : douta <= 19461570 ;
|
||||
233 : douta <= 19545456 ;
|
||||
234 : douta <= 19629342 ;
|
||||
235 : douta <= 19713228 ;
|
||||
236 : douta <= 19797114 ;
|
||||
237 : douta <= 19881000 ;
|
||||
238 : douta <= 19964887 ;
|
||||
239 : douta <= 20048773 ;
|
||||
240 : douta <= 20132659 ;
|
||||
241 : douta <= 20216545 ;
|
||||
242 : douta <= 20300431 ;
|
||||
243 : douta <= 20384317 ;
|
||||
244 : douta <= 20468203 ;
|
||||
245 : douta <= 20552089 ;
|
||||
246 : douta <= 20635975 ;
|
||||
247 : douta <= 20719861 ;
|
||||
248 : douta <= 20803747 ;
|
||||
249 : douta <= 20887633 ;
|
||||
250 : douta <= 20971520 ;
|
||||
251 : douta <= 21055406 ;
|
||||
252 : douta <= 21139292 ;
|
||||
253 : douta <= 21223178 ;
|
||||
254 : douta <= 21307064 ;
|
||||
255 : douta <= 21390950 ;
|
||||
256 : douta <= 21474836 ;
|
||||
257 : douta <= 21558722 ;
|
||||
258 : douta <= 21642608 ;
|
||||
259 : douta <= 21726494 ;
|
||||
260 : douta <= 21810380 ;
|
||||
261 : douta <= 21894266 ;
|
||||
262 : douta <= 21978152 ;
|
||||
263 : douta <= 22062039 ;
|
||||
264 : douta <= 22145925 ;
|
||||
265 : douta <= 22229811 ;
|
||||
266 : douta <= 22313697 ;
|
||||
267 : douta <= 22397583 ;
|
||||
268 : douta <= 22481469 ;
|
||||
269 : douta <= 22565355 ;
|
||||
270 : douta <= 22649241 ;
|
||||
271 : douta <= 22733127 ;
|
||||
272 : douta <= 22817013 ;
|
||||
273 : douta <= 22900899 ;
|
||||
274 : douta <= 22984785 ;
|
||||
275 : douta <= 23068672 ;
|
||||
276 : douta <= 23152558 ;
|
||||
277 : douta <= 23236444 ;
|
||||
278 : douta <= 23320330 ;
|
||||
279 : douta <= 23404216 ;
|
||||
280 : douta <= 23488102 ;
|
||||
281 : douta <= 23571988 ;
|
||||
282 : douta <= 23655874 ;
|
||||
283 : douta <= 23739760 ;
|
||||
284 : douta <= 23823646 ;
|
||||
285 : douta <= 23907532 ;
|
||||
286 : douta <= 23991418 ;
|
||||
287 : douta <= 24075304 ;
|
||||
288 : douta <= 24159191 ;
|
||||
289 : douta <= 24243077 ;
|
||||
290 : douta <= 24326963 ;
|
||||
291 : douta <= 24410849 ;
|
||||
292 : douta <= 24494735 ;
|
||||
293 : douta <= 24578621 ;
|
||||
294 : douta <= 24662507 ;
|
||||
295 : douta <= 24746393 ;
|
||||
296 : douta <= 24830279 ;
|
||||
297 : douta <= 24914165 ;
|
||||
298 : douta <= 24998051 ;
|
||||
299 : douta <= 25081937 ;
|
||||
300 : douta <= 25165824 ;
|
||||
301 : douta <= 25249710 ;
|
||||
302 : douta <= 25333596 ;
|
||||
303 : douta <= 25417482 ;
|
||||
304 : douta <= 25501368 ;
|
||||
305 : douta <= 25585254 ;
|
||||
306 : douta <= 25669140 ;
|
||||
307 : douta <= 25753026 ;
|
||||
308 : douta <= 25836912 ;
|
||||
309 : douta <= 25920798 ;
|
||||
310 : douta <= 26004684 ;
|
||||
311 : douta <= 26088570 ;
|
||||
312 : douta <= 26172456 ;
|
||||
313 : douta <= 26256343 ;
|
||||
314 : douta <= 26340229 ;
|
||||
315 : douta <= 26424115 ;
|
||||
316 : douta <= 26508001 ;
|
||||
317 : douta <= 26591887 ;
|
||||
318 : douta <= 26675773 ;
|
||||
319 : douta <= 26759659 ;
|
||||
320 : douta <= 26843545 ;
|
||||
321 : douta <= 26927431 ;
|
||||
322 : douta <= 27011317 ;
|
||||
323 : douta <= 27095203 ;
|
||||
324 : douta <= 27179089 ;
|
||||
325 : douta <= 27262976 ;
|
||||
326 : douta <= 27346862 ;
|
||||
327 : douta <= 27430748 ;
|
||||
328 : douta <= 27514634 ;
|
||||
329 : douta <= 27598520 ;
|
||||
330 : douta <= 27682406 ;
|
||||
331 : douta <= 27766292 ;
|
||||
332 : douta <= 27850178 ;
|
||||
333 : douta <= 27934064 ;
|
||||
334 : douta <= 28017950 ;
|
||||
335 : douta <= 28101836 ;
|
||||
336 : douta <= 28185722 ;
|
||||
337 : douta <= 28269608 ;
|
||||
338 : douta <= 28353495 ;
|
||||
339 : douta <= 28437381 ;
|
||||
340 : douta <= 28521267 ;
|
||||
341 : douta <= 28605153 ;
|
||||
342 : douta <= 28689039 ;
|
||||
343 : douta <= 28772925 ;
|
||||
344 : douta <= 28856811 ;
|
||||
345 : douta <= 28940697 ;
|
||||
346 : douta <= 29024583 ;
|
||||
347 : douta <= 29108469 ;
|
||||
348 : douta <= 29192355 ;
|
||||
349 : douta <= 29276241 ;
|
||||
350 : douta <= 29360128 ;
|
||||
351 : douta <= 29444014 ;
|
||||
352 : douta <= 29527900 ;
|
||||
353 : douta <= 29611786 ;
|
||||
354 : douta <= 29695672 ;
|
||||
355 : douta <= 29779558 ;
|
||||
356 : douta <= 29863444 ;
|
||||
357 : douta <= 29947330 ;
|
||||
358 : douta <= 30031216 ;
|
||||
359 : douta <= 30115102 ;
|
||||
360 : douta <= 30198988 ;
|
||||
361 : douta <= 30282874 ;
|
||||
362 : douta <= 30366760 ;
|
||||
363 : douta <= 30450647 ;
|
||||
364 : douta <= 30534533 ;
|
||||
365 : douta <= 30618419 ;
|
||||
366 : douta <= 30702305 ;
|
||||
367 : douta <= 30786191 ;
|
||||
368 : douta <= 30870077 ;
|
||||
369 : douta <= 30953963 ;
|
||||
370 : douta <= 31037849 ;
|
||||
371 : douta <= 31121735 ;
|
||||
372 : douta <= 31205621 ;
|
||||
373 : douta <= 31289507 ;
|
||||
374 : douta <= 31373393 ;
|
||||
375 : douta <= 31457280 ;
|
||||
376 : douta <= 31541166 ;
|
||||
377 : douta <= 31625052 ;
|
||||
378 : douta <= 31708938 ;
|
||||
379 : douta <= 31792824 ;
|
||||
380 : douta <= 31876710 ;
|
||||
381 : douta <= 31960596 ;
|
||||
382 : douta <= 32044482 ;
|
||||
383 : douta <= 32128368 ;
|
||||
384 : douta <= 32212254 ;
|
||||
385 : douta <= 32296140 ;
|
||||
386 : douta <= 32380026 ;
|
||||
387 : douta <= 32463912 ;
|
||||
388 : douta <= 32547799 ;
|
||||
389 : douta <= 32631685 ;
|
||||
390 : douta <= 32715571 ;
|
||||
391 : douta <= 32799457 ;
|
||||
392 : douta <= 32883343 ;
|
||||
393 : douta <= 32967229 ;
|
||||
394 : douta <= 33051115 ;
|
||||
395 : douta <= 33135001 ;
|
||||
396 : douta <= 33218887 ;
|
||||
397 : douta <= 33302773 ;
|
||||
398 : douta <= 33386659 ;
|
||||
399 : douta <= 33470545 ;
|
||||
default : douta <= douta ;
|
||||
endcase
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,348 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 17:05:24 04/08/2022
|
||||
// Design Name:
|
||||
// Module Name: R_CAL
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module R_CAL_1(
|
||||
input i_clk ,
|
||||
input i_rstn ,
|
||||
input signed[7:0] i_temp ,
|
||||
input [15:0] fre_mode ,
|
||||
output reg[3:0] R_CAL
|
||||
|
||||
);
|
||||
|
||||
//接收通道1
|
||||
always@(posedge i_clk,negedge i_rstn)begin //1dB 步进
|
||||
if(!i_rstn)
|
||||
R_CAL<='d0;
|
||||
else if(i_temp>=8'sd70)begin//高温校准接收通道1
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 6 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 6 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 6 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 6 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 6 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 5 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 5 ; //20735 ~ 20774
|
||||
10: R_CAL<= 6 ; //20775 ~ 20814
|
||||
11: R_CAL<= 6 ; //20815 ~ 20854
|
||||
12: R_CAL<= 6 ; //20855 ~ 20894
|
||||
13: R_CAL<= 6 ; //20895 ~ 20934
|
||||
14: R_CAL<= 6 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 6 ; //21055 ~ 21094
|
||||
18: R_CAL<= 6 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 7 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 8 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 7 ; //21895 ~ 21934
|
||||
39: R_CAL<= 7 ; //21935 ~ 21974
|
||||
40: R_CAL<= 7 ; //21975 ~ 22014
|
||||
41: R_CAL<= 7 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 8 ; //22695 ~ 22734
|
||||
59: R_CAL<= 8 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 8 ; //23055 ~ 23094
|
||||
68: R_CAL<= 7 ; //23095 ~ 23134
|
||||
69: R_CAL<= 7 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 6 ; //23255 ~ 23294
|
||||
73: R_CAL<= 6 ; //23295 ~ 23334
|
||||
74: R_CAL<= 6 ; //23335 ~ 23374
|
||||
75: R_CAL<= 6 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 6 ; //23495 ~ 23534
|
||||
79: R_CAL<= 5 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 6 ; //23615 ~ 23654
|
||||
82: R_CAL<= 6 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 6 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
|
||||
else if(i_temp>=8'sd0)begin//常温校准接收通道1
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 6 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 6 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 6 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 6 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 6 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 5 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 5 ; //20735 ~ 20774
|
||||
10: R_CAL<= 6 ; //20775 ~ 20814
|
||||
11: R_CAL<= 6 ; //20815 ~ 20854
|
||||
12: R_CAL<= 6 ; //20855 ~ 20894
|
||||
13: R_CAL<= 6 ; //20895 ~ 20934
|
||||
14: R_CAL<= 6 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 6 ; //21055 ~ 21094
|
||||
18: R_CAL<= 6 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 7 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 8 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 7 ; //21895 ~ 21934
|
||||
39: R_CAL<= 7 ; //21935 ~ 21974
|
||||
40: R_CAL<= 7 ; //21975 ~ 22014
|
||||
41: R_CAL<= 7 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 8 ; //22695 ~ 22734
|
||||
59: R_CAL<= 8 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 8 ; //23055 ~ 23094
|
||||
68: R_CAL<= 7 ; //23095 ~ 23134
|
||||
69: R_CAL<= 7 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 6 ; //23255 ~ 23294
|
||||
73: R_CAL<= 6 ; //23295 ~ 23334
|
||||
74: R_CAL<= 6 ; //23335 ~ 23374
|
||||
75: R_CAL<= 6 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 6 ; //23495 ~ 23534
|
||||
79: R_CAL<= 5 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 6 ; //23615 ~ 23654
|
||||
82: R_CAL<= 6 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 6 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
else begin//低温校准接收通道1
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 6 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 6 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 6 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 6 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 6 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 5 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 5 ; //20735 ~ 20774
|
||||
10: R_CAL<= 6 ; //20775 ~ 20814
|
||||
11: R_CAL<= 6 ; //20815 ~ 20854
|
||||
12: R_CAL<= 6 ; //20855 ~ 20894
|
||||
13: R_CAL<= 6 ; //20895 ~ 20934
|
||||
14: R_CAL<= 6 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 6 ; //21055 ~ 21094
|
||||
18: R_CAL<= 6 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 7 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 8 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 7 ; //21895 ~ 21934
|
||||
39: R_CAL<= 7 ; //21935 ~ 21974
|
||||
40: R_CAL<= 7 ; //21975 ~ 22014
|
||||
41: R_CAL<= 7 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 8 ; //22695 ~ 22734
|
||||
59: R_CAL<= 8 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 8 ; //23055 ~ 23094
|
||||
68: R_CAL<= 7 ; //23095 ~ 23134
|
||||
69: R_CAL<= 7 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 6 ; //23255 ~ 23294
|
||||
73: R_CAL<= 6 ; //23295 ~ 23334
|
||||
74: R_CAL<= 6 ; //23335 ~ 23374
|
||||
75: R_CAL<= 6 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 6 ; //23495 ~ 23534
|
||||
79: R_CAL<= 5 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 6 ; //23615 ~ 23654
|
||||
82: R_CAL<= 6 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 6 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,349 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 17:05:24 04/08/2022
|
||||
// Design Name:
|
||||
// Module Name: R_CAL
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module R_CAL_2(
|
||||
input i_clk ,
|
||||
input i_rstn ,
|
||||
input signed[7:0] i_temp ,
|
||||
input [15:0] fre_mode ,
|
||||
output reg[3:0] R_CAL
|
||||
|
||||
);
|
||||
|
||||
|
||||
//接收通道2
|
||||
always@(posedge i_clk,negedge i_rstn)begin //1dB 步进
|
||||
if(!i_rstn)
|
||||
R_CAL<='d0;
|
||||
else if(i_temp>=8'sd70)begin//高温校准接收通道2
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 6 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 6 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 6 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 5 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 5 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 5 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 5 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 5 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 5 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 5 ; //20735 ~ 20774
|
||||
10: R_CAL<= 5 ; //20775 ~ 20814
|
||||
11: R_CAL<= 5 ; //20815 ~ 20854
|
||||
12: R_CAL<= 5 ; //20855 ~ 20894
|
||||
13: R_CAL<= 5 ; //20895 ~ 20934
|
||||
14: R_CAL<= 5 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 6 ; //21055 ~ 21094
|
||||
18: R_CAL<= 6 ; //21095 ~ 21134
|
||||
19: R_CAL<= 6 ; //21135 ~ 21174
|
||||
20: R_CAL<= 6 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 7 ; //21255 ~ 21294
|
||||
23: R_CAL<= 7 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 7 ; //21895 ~ 21934
|
||||
39: R_CAL<= 7 ; //21935 ~ 21974
|
||||
40: R_CAL<= 7 ; //21975 ~ 22014
|
||||
41: R_CAL<= 7 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 7 ; //22695 ~ 22734
|
||||
59: R_CAL<= 7 ; //22735 ~ 22774
|
||||
60: R_CAL<= 7 ; //22775 ~ 22814
|
||||
61: R_CAL<= 7 ; //22815 ~ 22854
|
||||
62: R_CAL<= 7 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 7 ; //23055 ~ 23094
|
||||
68: R_CAL<= 7 ; //23095 ~ 23134
|
||||
69: R_CAL<= 7 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 7 ; //23255 ~ 23294
|
||||
73: R_CAL<= 6 ; //23295 ~ 23334
|
||||
74: R_CAL<= 6 ; //23335 ~ 23374
|
||||
75: R_CAL<= 6 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 5 ; //23495 ~ 23534
|
||||
79: R_CAL<= 5 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 5 ; //23615 ~ 23654
|
||||
82: R_CAL<= 5 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 5 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
|
||||
else if(i_temp>=8'sd0)begin//常温校准接收通道2
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 6 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 6 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 6 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 5 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 5 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 5 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 5 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 5 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 5 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 5 ; //20735 ~ 20774
|
||||
10: R_CAL<= 5 ; //20775 ~ 20814
|
||||
11: R_CAL<= 5 ; //20815 ~ 20854
|
||||
12: R_CAL<= 5 ; //20855 ~ 20894
|
||||
13: R_CAL<= 5 ; //20895 ~ 20934
|
||||
14: R_CAL<= 5 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 6 ; //21055 ~ 21094
|
||||
18: R_CAL<= 6 ; //21095 ~ 21134
|
||||
19: R_CAL<= 6 ; //21135 ~ 21174
|
||||
20: R_CAL<= 6 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 7 ; //21255 ~ 21294
|
||||
23: R_CAL<= 7 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 7 ; //21895 ~ 21934
|
||||
39: R_CAL<= 7 ; //21935 ~ 21974
|
||||
40: R_CAL<= 7 ; //21975 ~ 22014
|
||||
41: R_CAL<= 7 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 7 ; //22695 ~ 22734
|
||||
59: R_CAL<= 7 ; //22735 ~ 22774
|
||||
60: R_CAL<= 7 ; //22775 ~ 22814
|
||||
61: R_CAL<= 7 ; //22815 ~ 22854
|
||||
62: R_CAL<= 7 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 7 ; //23055 ~ 23094
|
||||
68: R_CAL<= 7 ; //23095 ~ 23134
|
||||
69: R_CAL<= 7 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 7 ; //23255 ~ 23294
|
||||
73: R_CAL<= 6 ; //23295 ~ 23334
|
||||
74: R_CAL<= 6 ; //23335 ~ 23374
|
||||
75: R_CAL<= 6 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 5 ; //23495 ~ 23534
|
||||
79: R_CAL<= 5 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 5 ; //23615 ~ 23654
|
||||
82: R_CAL<= 5 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 5 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
else begin//低温校准接收通道2
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 6 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 6 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 6 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 5 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 5 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 5 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 5 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 5 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 5 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 5 ; //20735 ~ 20774
|
||||
10: R_CAL<= 5 ; //20775 ~ 20814
|
||||
11: R_CAL<= 5 ; //20815 ~ 20854
|
||||
12: R_CAL<= 5 ; //20855 ~ 20894
|
||||
13: R_CAL<= 5 ; //20895 ~ 20934
|
||||
14: R_CAL<= 5 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 6 ; //21055 ~ 21094
|
||||
18: R_CAL<= 6 ; //21095 ~ 21134
|
||||
19: R_CAL<= 6 ; //21135 ~ 21174
|
||||
20: R_CAL<= 6 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 7 ; //21255 ~ 21294
|
||||
23: R_CAL<= 7 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 7 ; //21895 ~ 21934
|
||||
39: R_CAL<= 7 ; //21935 ~ 21974
|
||||
40: R_CAL<= 7 ; //21975 ~ 22014
|
||||
41: R_CAL<= 7 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 7 ; //22695 ~ 22734
|
||||
59: R_CAL<= 7 ; //22735 ~ 22774
|
||||
60: R_CAL<= 7 ; //22775 ~ 22814
|
||||
61: R_CAL<= 7 ; //22815 ~ 22854
|
||||
62: R_CAL<= 7 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 7 ; //23055 ~ 23094
|
||||
68: R_CAL<= 7 ; //23095 ~ 23134
|
||||
69: R_CAL<= 7 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 7 ; //23255 ~ 23294
|
||||
73: R_CAL<= 6 ; //23295 ~ 23334
|
||||
74: R_CAL<= 6 ; //23335 ~ 23374
|
||||
75: R_CAL<= 6 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 5 ; //23495 ~ 23534
|
||||
79: R_CAL<= 5 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 5 ; //23615 ~ 23654
|
||||
82: R_CAL<= 5 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 5 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,348 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 17:05:24 04/08/2022
|
||||
// Design Name:
|
||||
// Module Name: R_CAL
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module R_CAL_3(
|
||||
input i_clk ,
|
||||
input i_rstn ,
|
||||
input signed[7:0] i_temp ,
|
||||
input [15:0] fre_mode ,
|
||||
output reg[3:0] R_CAL
|
||||
|
||||
);
|
||||
|
||||
//接收通道3
|
||||
always@(posedge i_clk,negedge i_rstn)begin //1dB 步进
|
||||
if(!i_rstn)
|
||||
R_CAL<='d0;
|
||||
else if(i_temp>=8'sd70)begin//高温校准接收通道3
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 7 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 7 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 7 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 6 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 6 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 6 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 6 ; //20735 ~ 20774
|
||||
10: R_CAL<= 6 ; //20775 ~ 20814
|
||||
11: R_CAL<= 6 ; //20815 ~ 20854
|
||||
12: R_CAL<= 6 ; //20855 ~ 20894
|
||||
13: R_CAL<= 6 ; //20895 ~ 20934
|
||||
14: R_CAL<= 6 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 7 ; //21055 ~ 21094
|
||||
18: R_CAL<= 7 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 8 ; //21175 ~ 21214
|
||||
21: R_CAL<= 8 ; //21215 ~ 21254
|
||||
22: R_CAL<= 8 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 9 ; //21415 ~ 21454
|
||||
27: R_CAL<= 9 ; //21455 ~ 21494
|
||||
28: R_CAL<= 9 ; //21495 ~ 21534
|
||||
29: R_CAL<= 9 ; //21535 ~ 21574
|
||||
30: R_CAL<= 9 ; //21575 ~ 21614
|
||||
31: R_CAL<= 9 ; //21615 ~ 21654
|
||||
32: R_CAL<= 9 ; //21655 ~ 21694
|
||||
33: R_CAL<= 9 ; //21695 ~ 21734
|
||||
34: R_CAL<= 9 ; //21735 ~ 21774
|
||||
35: R_CAL<= 9 ; //21775 ~ 21814
|
||||
36: R_CAL<= 9 ; //21815 ~ 21854
|
||||
37: R_CAL<= 9 ; //21855 ~ 21894
|
||||
38: R_CAL<= 9 ; //21895 ~ 21934
|
||||
39: R_CAL<= 9 ; //21935 ~ 21974
|
||||
40: R_CAL<= 8 ; //21975 ~ 22014
|
||||
41: R_CAL<= 8 ; //22015 ~ 22054
|
||||
42: R_CAL<= 8 ; //22055 ~ 22094
|
||||
43: R_CAL<= 8 ; //22095 ~ 22134
|
||||
44: R_CAL<= 8 ; //22135 ~ 22174
|
||||
45: R_CAL<= 8 ; //22175 ~ 22214
|
||||
46: R_CAL<= 8 ; //22215 ~ 22254
|
||||
47: R_CAL<= 8 ; //22255 ~ 22294
|
||||
48: R_CAL<= 8 ; //22295 ~ 22334
|
||||
49: R_CAL<= 8 ; //22335 ~ 22374
|
||||
50: R_CAL<= 8 ; //22375 ~ 22414
|
||||
51: R_CAL<= 8 ; //22415 ~ 22454
|
||||
52: R_CAL<= 8 ; //22455 ~ 22494
|
||||
53: R_CAL<= 8 ; //22495 ~ 22534
|
||||
54: R_CAL<= 8 ; //22535 ~ 22574
|
||||
55: R_CAL<= 8 ; //22575 ~ 22614
|
||||
56: R_CAL<= 8 ; //22615 ~ 22654
|
||||
57: R_CAL<= 8 ; //22655 ~ 22694
|
||||
58: R_CAL<= 8 ; //22695 ~ 22734
|
||||
59: R_CAL<= 8 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 9 ; //22895 ~ 22934
|
||||
64: R_CAL<= 9 ; //22935 ~ 22974
|
||||
65: R_CAL<= 9 ; //22975 ~ 23014
|
||||
66: R_CAL<= 9 ; //23015 ~ 23054
|
||||
67: R_CAL<= 9 ; //23055 ~ 23094
|
||||
68: R_CAL<= 8 ; //23095 ~ 23134
|
||||
69: R_CAL<= 8 ; //23135 ~ 23174
|
||||
70: R_CAL<= 8 ; //23175 ~ 23214
|
||||
71: R_CAL<= 8 ; //23215 ~ 23254
|
||||
72: R_CAL<= 8 ; //23255 ~ 23294
|
||||
73: R_CAL<= 7 ; //23295 ~ 23334
|
||||
74: R_CAL<= 7 ; //23335 ~ 23374
|
||||
75: R_CAL<= 7 ; //23375 ~ 23414
|
||||
76: R_CAL<= 7 ; //23415 ~ 23454
|
||||
77: R_CAL<= 7 ; //23455 ~ 23494
|
||||
78: R_CAL<= 7 ; //23495 ~ 23534
|
||||
79: R_CAL<= 7 ; //23535 ~ 23574
|
||||
80: R_CAL<= 7 ; //23575 ~ 23614
|
||||
81: R_CAL<= 7 ; //23615 ~ 23654
|
||||
82: R_CAL<= 7 ; //23655 ~ 23694
|
||||
83: R_CAL<= 7 ; //23695 ~ 23734
|
||||
84: R_CAL<= 7 ; //23735 ~ 23774
|
||||
85: R_CAL<= 7 ; //23775 ~ 23814
|
||||
86: R_CAL<= 7 ; //23815 ~ 23854
|
||||
87: R_CAL<= 7 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
|
||||
else if(i_temp>=8'sd0)begin//常温校准接收通道3
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 7 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 7 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 7 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 6 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 6 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 6 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 6 ; //20735 ~ 20774
|
||||
10: R_CAL<= 6 ; //20775 ~ 20814
|
||||
11: R_CAL<= 6 ; //20815 ~ 20854
|
||||
12: R_CAL<= 6 ; //20855 ~ 20894
|
||||
13: R_CAL<= 6 ; //20895 ~ 20934
|
||||
14: R_CAL<= 6 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 7 ; //21055 ~ 21094
|
||||
18: R_CAL<= 7 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 8 ; //21175 ~ 21214
|
||||
21: R_CAL<= 8 ; //21215 ~ 21254
|
||||
22: R_CAL<= 8 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 9 ; //21415 ~ 21454
|
||||
27: R_CAL<= 9 ; //21455 ~ 21494
|
||||
28: R_CAL<= 9 ; //21495 ~ 21534
|
||||
29: R_CAL<= 9 ; //21535 ~ 21574
|
||||
30: R_CAL<= 9 ; //21575 ~ 21614
|
||||
31: R_CAL<= 9 ; //21615 ~ 21654
|
||||
32: R_CAL<= 9 ; //21655 ~ 21694
|
||||
33: R_CAL<= 9 ; //21695 ~ 21734
|
||||
34: R_CAL<= 9 ; //21735 ~ 21774
|
||||
35: R_CAL<= 9 ; //21775 ~ 21814
|
||||
36: R_CAL<= 9 ; //21815 ~ 21854
|
||||
37: R_CAL<= 9 ; //21855 ~ 21894
|
||||
38: R_CAL<= 9 ; //21895 ~ 21934
|
||||
39: R_CAL<= 9 ; //21935 ~ 21974
|
||||
40: R_CAL<= 8 ; //21975 ~ 22014
|
||||
41: R_CAL<= 8 ; //22015 ~ 22054
|
||||
42: R_CAL<= 8 ; //22055 ~ 22094
|
||||
43: R_CAL<= 8 ; //22095 ~ 22134
|
||||
44: R_CAL<= 8 ; //22135 ~ 22174
|
||||
45: R_CAL<= 8 ; //22175 ~ 22214
|
||||
46: R_CAL<= 8 ; //22215 ~ 22254
|
||||
47: R_CAL<= 8 ; //22255 ~ 22294
|
||||
48: R_CAL<= 8 ; //22295 ~ 22334
|
||||
49: R_CAL<= 8 ; //22335 ~ 22374
|
||||
50: R_CAL<= 8 ; //22375 ~ 22414
|
||||
51: R_CAL<= 8 ; //22415 ~ 22454
|
||||
52: R_CAL<= 8 ; //22455 ~ 22494
|
||||
53: R_CAL<= 8 ; //22495 ~ 22534
|
||||
54: R_CAL<= 8 ; //22535 ~ 22574
|
||||
55: R_CAL<= 8 ; //22575 ~ 22614
|
||||
56: R_CAL<= 8 ; //22615 ~ 22654
|
||||
57: R_CAL<= 8 ; //22655 ~ 22694
|
||||
58: R_CAL<= 8 ; //22695 ~ 22734
|
||||
59: R_CAL<= 8 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 9 ; //22895 ~ 22934
|
||||
64: R_CAL<= 9 ; //22935 ~ 22974
|
||||
65: R_CAL<= 9 ; //22975 ~ 23014
|
||||
66: R_CAL<= 9 ; //23015 ~ 23054
|
||||
67: R_CAL<= 9 ; //23055 ~ 23094
|
||||
68: R_CAL<= 8 ; //23095 ~ 23134
|
||||
69: R_CAL<= 8 ; //23135 ~ 23174
|
||||
70: R_CAL<= 8 ; //23175 ~ 23214
|
||||
71: R_CAL<= 8 ; //23215 ~ 23254
|
||||
72: R_CAL<= 8 ; //23255 ~ 23294
|
||||
73: R_CAL<= 7 ; //23295 ~ 23334
|
||||
74: R_CAL<= 7 ; //23335 ~ 23374
|
||||
75: R_CAL<= 7 ; //23375 ~ 23414
|
||||
76: R_CAL<= 7 ; //23415 ~ 23454
|
||||
77: R_CAL<= 7 ; //23455 ~ 23494
|
||||
78: R_CAL<= 7 ; //23495 ~ 23534
|
||||
79: R_CAL<= 7 ; //23535 ~ 23574
|
||||
80: R_CAL<= 7 ; //23575 ~ 23614
|
||||
81: R_CAL<= 7 ; //23615 ~ 23654
|
||||
82: R_CAL<= 7 ; //23655 ~ 23694
|
||||
83: R_CAL<= 7 ; //23695 ~ 23734
|
||||
84: R_CAL<= 7 ; //23735 ~ 23774
|
||||
85: R_CAL<= 7 ; //23775 ~ 23814
|
||||
86: R_CAL<= 7 ; //23815 ~ 23854
|
||||
87: R_CAL<= 7 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
else begin//低温校准接收通道3
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 7 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 7 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 7 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 6 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 6 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 6 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 6 ; //20735 ~ 20774
|
||||
10: R_CAL<= 6 ; //20775 ~ 20814
|
||||
11: R_CAL<= 6 ; //20815 ~ 20854
|
||||
12: R_CAL<= 6 ; //20855 ~ 20894
|
||||
13: R_CAL<= 6 ; //20895 ~ 20934
|
||||
14: R_CAL<= 6 ; //20935 ~ 20974
|
||||
15: R_CAL<= 6 ; //20975 ~ 21014
|
||||
16: R_CAL<= 6 ; //21015 ~ 21054
|
||||
17: R_CAL<= 7 ; //21055 ~ 21094
|
||||
18: R_CAL<= 7 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 8 ; //21175 ~ 21214
|
||||
21: R_CAL<= 8 ; //21215 ~ 21254
|
||||
22: R_CAL<= 8 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 9 ; //21415 ~ 21454
|
||||
27: R_CAL<= 9 ; //21455 ~ 21494
|
||||
28: R_CAL<= 9 ; //21495 ~ 21534
|
||||
29: R_CAL<= 9 ; //21535 ~ 21574
|
||||
30: R_CAL<= 9 ; //21575 ~ 21614
|
||||
31: R_CAL<= 9 ; //21615 ~ 21654
|
||||
32: R_CAL<= 9 ; //21655 ~ 21694
|
||||
33: R_CAL<= 9 ; //21695 ~ 21734
|
||||
34: R_CAL<= 9 ; //21735 ~ 21774
|
||||
35: R_CAL<= 9 ; //21775 ~ 21814
|
||||
36: R_CAL<= 9 ; //21815 ~ 21854
|
||||
37: R_CAL<= 9 ; //21855 ~ 21894
|
||||
38: R_CAL<= 9 ; //21895 ~ 21934
|
||||
39: R_CAL<= 9 ; //21935 ~ 21974
|
||||
40: R_CAL<= 8 ; //21975 ~ 22014
|
||||
41: R_CAL<= 8 ; //22015 ~ 22054
|
||||
42: R_CAL<= 8 ; //22055 ~ 22094
|
||||
43: R_CAL<= 8 ; //22095 ~ 22134
|
||||
44: R_CAL<= 8 ; //22135 ~ 22174
|
||||
45: R_CAL<= 8 ; //22175 ~ 22214
|
||||
46: R_CAL<= 8 ; //22215 ~ 22254
|
||||
47: R_CAL<= 8 ; //22255 ~ 22294
|
||||
48: R_CAL<= 8 ; //22295 ~ 22334
|
||||
49: R_CAL<= 8 ; //22335 ~ 22374
|
||||
50: R_CAL<= 8 ; //22375 ~ 22414
|
||||
51: R_CAL<= 8 ; //22415 ~ 22454
|
||||
52: R_CAL<= 8 ; //22455 ~ 22494
|
||||
53: R_CAL<= 8 ; //22495 ~ 22534
|
||||
54: R_CAL<= 8 ; //22535 ~ 22574
|
||||
55: R_CAL<= 8 ; //22575 ~ 22614
|
||||
56: R_CAL<= 8 ; //22615 ~ 22654
|
||||
57: R_CAL<= 8 ; //22655 ~ 22694
|
||||
58: R_CAL<= 8 ; //22695 ~ 22734
|
||||
59: R_CAL<= 8 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 9 ; //22895 ~ 22934
|
||||
64: R_CAL<= 9 ; //22935 ~ 22974
|
||||
65: R_CAL<= 9 ; //22975 ~ 23014
|
||||
66: R_CAL<= 9 ; //23015 ~ 23054
|
||||
67: R_CAL<= 9 ; //23055 ~ 23094
|
||||
68: R_CAL<= 8 ; //23095 ~ 23134
|
||||
69: R_CAL<= 8 ; //23135 ~ 23174
|
||||
70: R_CAL<= 8 ; //23175 ~ 23214
|
||||
71: R_CAL<= 8 ; //23215 ~ 23254
|
||||
72: R_CAL<= 8 ; //23255 ~ 23294
|
||||
73: R_CAL<= 7 ; //23295 ~ 23334
|
||||
74: R_CAL<= 7 ; //23335 ~ 23374
|
||||
75: R_CAL<= 7 ; //23375 ~ 23414
|
||||
76: R_CAL<= 7 ; //23415 ~ 23454
|
||||
77: R_CAL<= 7 ; //23455 ~ 23494
|
||||
78: R_CAL<= 7 ; //23495 ~ 23534
|
||||
79: R_CAL<= 7 ; //23535 ~ 23574
|
||||
80: R_CAL<= 7 ; //23575 ~ 23614
|
||||
81: R_CAL<= 7 ; //23615 ~ 23654
|
||||
82: R_CAL<= 7 ; //23655 ~ 23694
|
||||
83: R_CAL<= 7 ; //23695 ~ 23734
|
||||
84: R_CAL<= 7 ; //23735 ~ 23774
|
||||
85: R_CAL<= 7 ; //23775 ~ 23814
|
||||
86: R_CAL<= 7 ; //23815 ~ 23854
|
||||
87: R_CAL<= 7 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,349 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 17:05:24 04/08/2022
|
||||
// Design Name:
|
||||
// Module Name: R_CAL
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module R_CAL_4(
|
||||
input i_clk ,
|
||||
input i_rstn ,
|
||||
input signed[7:0] i_temp ,
|
||||
input [15:0] fre_mode ,
|
||||
output reg[3:0] R_CAL
|
||||
|
||||
);
|
||||
|
||||
|
||||
//接收通道4
|
||||
always@(posedge i_clk,negedge i_rstn)begin //1dB 步进
|
||||
if(!i_rstn)
|
||||
R_CAL<='d0;
|
||||
else if(i_temp>=8'sd70)begin//高温校准接收通道4
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 7 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 7 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 7 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 7 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 7 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 7 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 7 ; //20735 ~ 20774
|
||||
10: R_CAL<= 7 ; //20775 ~ 20814
|
||||
11: R_CAL<= 7 ; //20815 ~ 20854
|
||||
12: R_CAL<= 7 ; //20855 ~ 20894
|
||||
13: R_CAL<= 7 ; //20895 ~ 20934
|
||||
14: R_CAL<= 7 ; //20935 ~ 20974
|
||||
15: R_CAL<= 7 ; //20975 ~ 21014
|
||||
16: R_CAL<= 7 ; //21015 ~ 21054
|
||||
17: R_CAL<= 7 ; //21055 ~ 21094
|
||||
18: R_CAL<= 7 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 7 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 7 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 8 ; //21895 ~ 21934
|
||||
39: R_CAL<= 8 ; //21935 ~ 21974
|
||||
40: R_CAL<= 8 ; //21975 ~ 22014
|
||||
41: R_CAL<= 8 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 7 ; //22695 ~ 22734
|
||||
59: R_CAL<= 7 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 8 ; //23055 ~ 23094
|
||||
68: R_CAL<= 8 ; //23095 ~ 23134
|
||||
69: R_CAL<= 8 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 7 ; //23255 ~ 23294
|
||||
73: R_CAL<= 7 ; //23295 ~ 23334
|
||||
74: R_CAL<= 7 ; //23335 ~ 23374
|
||||
75: R_CAL<= 7 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 6 ; //23495 ~ 23534
|
||||
79: R_CAL<= 6 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 6 ; //23615 ~ 23654
|
||||
82: R_CAL<= 6 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 6 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
|
||||
else if(i_temp>=8'sd0)begin//常温校准接收通道4
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 7 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 7 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 7 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 7 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 7 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 7 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 7 ; //20735 ~ 20774
|
||||
10: R_CAL<= 7 ; //20775 ~ 20814
|
||||
11: R_CAL<= 7 ; //20815 ~ 20854
|
||||
12: R_CAL<= 7 ; //20855 ~ 20894
|
||||
13: R_CAL<= 7 ; //20895 ~ 20934
|
||||
14: R_CAL<= 7 ; //20935 ~ 20974
|
||||
15: R_CAL<= 7 ; //20975 ~ 21014
|
||||
16: R_CAL<= 7 ; //21015 ~ 21054
|
||||
17: R_CAL<= 7 ; //21055 ~ 21094
|
||||
18: R_CAL<= 7 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 7 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 7 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 8 ; //21895 ~ 21934
|
||||
39: R_CAL<= 8 ; //21935 ~ 21974
|
||||
40: R_CAL<= 8 ; //21975 ~ 22014
|
||||
41: R_CAL<= 8 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 7 ; //22695 ~ 22734
|
||||
59: R_CAL<= 7 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 8 ; //23055 ~ 23094
|
||||
68: R_CAL<= 8 ; //23095 ~ 23134
|
||||
69: R_CAL<= 8 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 7 ; //23255 ~ 23294
|
||||
73: R_CAL<= 7 ; //23295 ~ 23334
|
||||
74: R_CAL<= 7 ; //23335 ~ 23374
|
||||
75: R_CAL<= 7 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 6 ; //23495 ~ 23534
|
||||
79: R_CAL<= 6 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 6 ; //23615 ~ 23654
|
||||
82: R_CAL<= 6 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 6 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
else begin//低温校准接收通道4
|
||||
case(fre_mode)
|
||||
0 : R_CAL<= 7 ; //20375 ~ 20414
|
||||
1 : R_CAL<= 7 ; //20415 ~ 20454
|
||||
2 : R_CAL<= 7 ; //20455 ~ 20494
|
||||
3 : R_CAL<= 7 ; //20495 ~ 20534
|
||||
4 : R_CAL<= 7 ; //20535 ~ 20574
|
||||
5 : R_CAL<= 7 ; //20575 ~ 20614
|
||||
6 : R_CAL<= 7 ; //20615 ~ 20654
|
||||
7 : R_CAL<= 7 ; //20655 ~ 20694
|
||||
8 : R_CAL<= 7 ; //20695 ~ 20734
|
||||
9 : R_CAL<= 7 ; //20735 ~ 20774
|
||||
10: R_CAL<= 7 ; //20775 ~ 20814
|
||||
11: R_CAL<= 7 ; //20815 ~ 20854
|
||||
12: R_CAL<= 7 ; //20855 ~ 20894
|
||||
13: R_CAL<= 7 ; //20895 ~ 20934
|
||||
14: R_CAL<= 7 ; //20935 ~ 20974
|
||||
15: R_CAL<= 7 ; //20975 ~ 21014
|
||||
16: R_CAL<= 7 ; //21015 ~ 21054
|
||||
17: R_CAL<= 7 ; //21055 ~ 21094
|
||||
18: R_CAL<= 7 ; //21095 ~ 21134
|
||||
19: R_CAL<= 7 ; //21135 ~ 21174
|
||||
20: R_CAL<= 7 ; //21175 ~ 21214
|
||||
21: R_CAL<= 7 ; //21215 ~ 21254
|
||||
22: R_CAL<= 7 ; //21255 ~ 21294
|
||||
23: R_CAL<= 8 ; //21295 ~ 21334
|
||||
24: R_CAL<= 8 ; //21335 ~ 21374
|
||||
25: R_CAL<= 8 ; //21375 ~ 21414
|
||||
26: R_CAL<= 8 ; //21415 ~ 21454
|
||||
27: R_CAL<= 8 ; //21455 ~ 21494
|
||||
28: R_CAL<= 8 ; //21495 ~ 21534
|
||||
29: R_CAL<= 8 ; //21535 ~ 21574
|
||||
30: R_CAL<= 8 ; //21575 ~ 21614
|
||||
31: R_CAL<= 8 ; //21615 ~ 21654
|
||||
32: R_CAL<= 8 ; //21655 ~ 21694
|
||||
33: R_CAL<= 8 ; //21695 ~ 21734
|
||||
34: R_CAL<= 8 ; //21735 ~ 21774
|
||||
35: R_CAL<= 8 ; //21775 ~ 21814
|
||||
36: R_CAL<= 8 ; //21815 ~ 21854
|
||||
37: R_CAL<= 8 ; //21855 ~ 21894
|
||||
38: R_CAL<= 8 ; //21895 ~ 21934
|
||||
39: R_CAL<= 8 ; //21935 ~ 21974
|
||||
40: R_CAL<= 8 ; //21975 ~ 22014
|
||||
41: R_CAL<= 8 ; //22015 ~ 22054
|
||||
42: R_CAL<= 7 ; //22055 ~ 22094
|
||||
43: R_CAL<= 7 ; //22095 ~ 22134
|
||||
44: R_CAL<= 7 ; //22135 ~ 22174
|
||||
45: R_CAL<= 7 ; //22175 ~ 22214
|
||||
46: R_CAL<= 7 ; //22215 ~ 22254
|
||||
47: R_CAL<= 7 ; //22255 ~ 22294
|
||||
48: R_CAL<= 7 ; //22295 ~ 22334
|
||||
49: R_CAL<= 7 ; //22335 ~ 22374
|
||||
50: R_CAL<= 7 ; //22375 ~ 22414
|
||||
51: R_CAL<= 7 ; //22415 ~ 22454
|
||||
52: R_CAL<= 7 ; //22455 ~ 22494
|
||||
53: R_CAL<= 7 ; //22495 ~ 22534
|
||||
54: R_CAL<= 7 ; //22535 ~ 22574
|
||||
55: R_CAL<= 7 ; //22575 ~ 22614
|
||||
56: R_CAL<= 7 ; //22615 ~ 22654
|
||||
57: R_CAL<= 7 ; //22655 ~ 22694
|
||||
58: R_CAL<= 7 ; //22695 ~ 22734
|
||||
59: R_CAL<= 7 ; //22735 ~ 22774
|
||||
60: R_CAL<= 8 ; //22775 ~ 22814
|
||||
61: R_CAL<= 8 ; //22815 ~ 22854
|
||||
62: R_CAL<= 8 ; //22855 ~ 22894
|
||||
63: R_CAL<= 8 ; //22895 ~ 22934
|
||||
64: R_CAL<= 8 ; //22935 ~ 22974
|
||||
65: R_CAL<= 8 ; //22975 ~ 23014
|
||||
66: R_CAL<= 8 ; //23015 ~ 23054
|
||||
67: R_CAL<= 8 ; //23055 ~ 23094
|
||||
68: R_CAL<= 8 ; //23095 ~ 23134
|
||||
69: R_CAL<= 8 ; //23135 ~ 23174
|
||||
70: R_CAL<= 7 ; //23175 ~ 23214
|
||||
71: R_CAL<= 7 ; //23215 ~ 23254
|
||||
72: R_CAL<= 7 ; //23255 ~ 23294
|
||||
73: R_CAL<= 7 ; //23295 ~ 23334
|
||||
74: R_CAL<= 7 ; //23335 ~ 23374
|
||||
75: R_CAL<= 7 ; //23375 ~ 23414
|
||||
76: R_CAL<= 6 ; //23415 ~ 23454
|
||||
77: R_CAL<= 6 ; //23455 ~ 23494
|
||||
78: R_CAL<= 6 ; //23495 ~ 23534
|
||||
79: R_CAL<= 6 ; //23535 ~ 23574
|
||||
80: R_CAL<= 6 ; //23575 ~ 23614
|
||||
81: R_CAL<= 6 ; //23615 ~ 23654
|
||||
82: R_CAL<= 6 ; //23655 ~ 23694
|
||||
83: R_CAL<= 6 ; //23695 ~ 23734
|
||||
84: R_CAL<= 6 ; //23735 ~ 23774
|
||||
85: R_CAL<= 6 ; //23775 ~ 23814
|
||||
86: R_CAL<= 6 ; //23815 ~ 23854
|
||||
87: R_CAL<= 6 ; //23855 ~ 23875
|
||||
default:R_CAL<=R_CAL;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,301 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company: Chengdu Tiger
|
||||
// Engineer: Tangxy
|
||||
//
|
||||
// Create Date: 14:14:49 09/06/2021
|
||||
// Design Name:
|
||||
// Module Name: top
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module Sisyif(
|
||||
input clk_40m ,
|
||||
input clk_20m ,
|
||||
input rst_n ,
|
||||
//调零至信处接口
|
||||
input SPI_CLK_F ,//SPI控制,时钟暂定50MHz,用来发送跳频频点、发射MGC值、接收MGC值
|
||||
input SPI_SYN_F ,//片选
|
||||
input SPI_MOSI_F ,
|
||||
output SPI_MISO_F ,
|
||||
input TP_EN_F ,//跳频使能控制(上升沿更新)
|
||||
input TR_MGC_F ,//接收发射MGC使能控制(上升沿更新)
|
||||
input CAL_F ,//校准MGC使能(上升沿更新)
|
||||
input PRF ,//高发低收,默认接收
|
||||
|
||||
//信处至射频接口
|
||||
output standby ,//高开低待机,默认待机
|
||||
output SW_PLL ,//乒乓频率源选择0:频率源A —— 1:频率源B
|
||||
output T ,//发射电源控制
|
||||
output R ,//接收电源控制
|
||||
output SW_BPF ,//开关滤波器选择
|
||||
output SCLK1 ,//锁相环A控制
|
||||
output SDIO1 ,//
|
||||
output CS1 ,//
|
||||
input LD1 ,//
|
||||
output SCLK2 ,//锁相环B控制
|
||||
output SDIO2 ,//
|
||||
output CS2 ,//
|
||||
input LD2 ,//
|
||||
output SCLK3 ,//点频源控制
|
||||
output SDIO3 ,//
|
||||
output CS3 ,//
|
||||
input LD3 ,//
|
||||
output TMGC_16db ,//发射通道MGC控制,高电平衰减
|
||||
output TMGC_8db ,//
|
||||
output TMGC_4db ,//
|
||||
output TMGC_2db ,//
|
||||
output TMGC_1db ,//
|
||||
output RMGC_16db ,//四个接收通道MGC控制,同时控制,高电平衰减
|
||||
output RMGC_8db ,//
|
||||
output RMGC_4db ,//
|
||||
output RMGC_2db ,//
|
||||
output RMGC_1db ,//
|
||||
output ENABLE ,//SPI控制四个接收通道增益校准
|
||||
output SC ,//
|
||||
output SD ,//
|
||||
output END_SYN ,//
|
||||
input SDOUT ,//
|
||||
inout DQ_WD ,//温度传感器
|
||||
output SW_RX //接收监测控制
|
||||
|
||||
);
|
||||
|
||||
wire vio_rstn ;
|
||||
wire [9:0] SYNC_OUT ;
|
||||
wire [35:0] CONTROL0 ;
|
||||
wire [35:0] CONTROL1 ;
|
||||
wire [150:0] TRIG0 ;
|
||||
|
||||
wire[15:0] temp_data ;//LSB =0.625 C
|
||||
wire[7:0] temp ;//LSB =1°C
|
||||
wire[11:0] hop_fre_code;
|
||||
wire adf4371_hop1 ;
|
||||
wire adf4371_hop2 ;
|
||||
wire [15:0] fre_code ;
|
||||
wire [7:0] tx_mgc ;
|
||||
wire [7:0] rx1_mgc ;
|
||||
wire [7:0] rx2_mgc ;
|
||||
wire [7:0] rx3_mgc ;
|
||||
wire [7:0] rx4_mgc ;
|
||||
wire [3:0] cal1_mgc ;
|
||||
wire [3:0] cal2_mgc ;
|
||||
wire [3:0] cal3_mgc ;
|
||||
wire [3:0] cal4_mgc ;
|
||||
wire [7:0] tx_cal_mgc ;
|
||||
wire [3:0] model ;
|
||||
wire [3:0] rf_en ;
|
||||
wire [31:0] frame_count;
|
||||
wire [3:0] ceshi_model;
|
||||
wire [15:0] current_fre_code ;
|
||||
wire [15:0] cal_fre_code ;
|
||||
wire [7:0] R_MGC_1 ;
|
||||
|
||||
wire SW_C1;
|
||||
wire SW;
|
||||
wire SW2;
|
||||
wire SW3;
|
||||
|
||||
wire [3:0] R_CAL1;
|
||||
wire [3:0] R_CAL2;
|
||||
wire [3:0] R_CAL3;
|
||||
wire [3:0] R_CAL4;
|
||||
wire [4:0] T_CAL ;
|
||||
|
||||
assign temp = temp_data[11:4] ;
|
||||
assign RMGC_16db = R_MGC_1[4] ;
|
||||
assign RMGC_8db = R_MGC_1[3] ;
|
||||
assign RMGC_4db = R_MGC_1[2] ;
|
||||
assign RMGC_2db = R_MGC_1[1] ;
|
||||
assign RMGC_1db = R_MGC_1[0] ;
|
||||
assign standby = rf_en == 4'b0 ;
|
||||
assign T = PRF ;
|
||||
assign R = ~PRF ;
|
||||
assign SW_BPF = SW_C1 ;
|
||||
assign SW_PLL = SW ;
|
||||
assign SW_RX = rx2_mgc == 8'b0 ? 1'b0 :1'b1 ;
|
||||
|
||||
|
||||
spi_slave u_spi_slave (
|
||||
.i_sys_clk(clk_40m),
|
||||
.i_sys_rst_n(rst_n),
|
||||
.i_spi_sck(SPI_CLK_F),
|
||||
.i_spi_cs(SPI_SYN_F),
|
||||
.i_spi_sdi(SPI_MOSI_F),
|
||||
.o_frame_count(frame_count),
|
||||
.o_fre_code(fre_code),
|
||||
.o_tx_mgc(tx_mgc),
|
||||
.o_model(model),
|
||||
.o_rf_en(rf_en),
|
||||
.o_cal1_mgc(cal1_mgc),
|
||||
.o_cal2_mgc(cal2_mgc),
|
||||
.o_cal3_mgc(cal3_mgc),
|
||||
.o_cal4_mgc(cal4_mgc),
|
||||
.o_tx_cal_mgc(tx_cal_mgc),
|
||||
.o_rx1_mgc(rx1_mgc),
|
||||
.o_rx2_mgc(rx2_mgc),
|
||||
.o_rx3_mgc(rx3_mgc),
|
||||
.o_rx4_mgc(rx4_mgc),
|
||||
.o_ceshi_model(ceshi_model)
|
||||
);
|
||||
|
||||
spi_master u_spi_master (
|
||||
.i_sys_rst_n (rst_n) ,
|
||||
.i_clk (clk_40m) ,
|
||||
//.debug_clk (clk_80m) ,
|
||||
.i_spi_sck (SPI_CLK_F) ,
|
||||
.i_spi_cs (SPI_SYN_F) ,
|
||||
.o_spi_sdo (SPI_MISO_F) ,
|
||||
.i_spi_sdi (SPI_MOSI_F) ,
|
||||
.i_LD_LO3 (LD3) ,
|
||||
.i_LD1 (LD1) ,
|
||||
.i_LD2 (LD2) ,
|
||||
.i_cal1_mgc (R_CAL4) ,
|
||||
.i_cal2_mgc (R_CAL3) ,
|
||||
.i_cal3_mgc (R_CAL2) ,
|
||||
.i_cal4_mgc (R_CAL1) ,
|
||||
.i_temp (temp ) ,
|
||||
.i_frame_count (frame_count)
|
||||
);
|
||||
|
||||
mgc_ctrl u_mgc_ctrl(
|
||||
.i_sys_clk (clk_40m ),
|
||||
.i_rst_n (rst_n ),
|
||||
.i_TR_SW_F (PRF ),
|
||||
.i_TP_EN_F (TP_EN_F ),
|
||||
.i_T_MGC_EN_F (TR_MGC_F ),
|
||||
.i_R_MGC_EN_F (TR_MGC_F ),
|
||||
.i_CAL_F (CAL_F ),
|
||||
.i_fre_code (fre_code ),
|
||||
.i_tx_mgc (tx_mgc ),
|
||||
.i_rx1_mgc (rx1_mgc ),
|
||||
.i_rx2_mgc (rx2_mgc ),
|
||||
.i_rx3_mgc (rx3_mgc ),
|
||||
.i_rx4_mgc (rx4_mgc ),
|
||||
.i_ceshi_module (ceshi_model ),
|
||||
.o_current_fre_code (current_fre_code ),
|
||||
.o_cal_fre_code (cal_fre_code ),
|
||||
.o_hop_fre_code (hop_fre_code ), //0(20.375GHz)~3500(23.875GHz)
|
||||
.o_adf4371_hop1 (adf4371_hop1 ), //high active
|
||||
.o_adf4371_hop2 (adf4371_hop2 ),
|
||||
.o_SW (SW ),
|
||||
.o_SW2 (SW2 ),
|
||||
.o_SW3 (SW3 ),
|
||||
.o_SW_C1 (SW_C1 ),
|
||||
.o_T_MGC_1dB (TMGC_1db ),
|
||||
.o_T_MGC_2dB (TMGC_2db ),
|
||||
.o_T_MGC_4dB (TMGC_4db ),
|
||||
.o_T_MGC_8dB (TMGC_8db ),
|
||||
.o_T_MGC_16dB (TMGC_16db ),
|
||||
.o_R_MGC_1 (R_MGC_1 )
|
||||
//.o_R_MGC_2 (R_MGC_2 ),
|
||||
//.o_R_MGC_3 (R_MGC_3 ),
|
||||
//.o_R_MGC_4 (R_MGC_4 )
|
||||
);
|
||||
|
||||
wire cfgover;
|
||||
adf4371_a u_adf4371_a (
|
||||
.sysclk (clk_40m ),
|
||||
.arstn (rst_n&vio_rstn ),
|
||||
.cs (CS1 ),
|
||||
.mux_out (LD1 ),
|
||||
.sclk (SCLK1 ),
|
||||
.sdio (SDIO1 ),
|
||||
.rf_en (rf_en ),
|
||||
.SW_PLL (SW_PLL ),
|
||||
.CAL_F (CAL_F ),
|
||||
.o_cfgover (cfgover ),
|
||||
.ceshi_model(ceshi_model ),
|
||||
.adf4371_hop(adf4371_hop1),
|
||||
.fre_code (hop_fre_code)
|
||||
);
|
||||
|
||||
adf4371_b u_adf4371_b (
|
||||
.sysclk (clk_40m ),
|
||||
.arstn (rst_n&vio_rstn),
|
||||
.cs (CS2 ),
|
||||
.mux_out (LD2 ),
|
||||
.sclk (SCLK2 ),
|
||||
.sdio (SDIO2 ),
|
||||
.rf_en (rf_en ),
|
||||
.SW_PLL (SW_PLL ),
|
||||
.CAL_F (CAL_F ),
|
||||
.i_cfgover (cfgover ),
|
||||
.ceshi_model(ceshi_model ),
|
||||
.adf4371_hop(adf4371_hop2),
|
||||
.fre_code (hop_fre_code)
|
||||
);
|
||||
|
||||
fre_caliatt u_fre_caliatt (
|
||||
.i_clk (clk_40m ),
|
||||
.i_rstn (rst_n ),
|
||||
.ENABLE (ENABLE ),
|
||||
.SC (SC ),
|
||||
.SD (SD ),
|
||||
.END_SYN (END_SYN ),
|
||||
.SDOUT (SDOUT ),
|
||||
.CAL_F (CAL_F ),
|
||||
.i_temp (temp ),
|
||||
.i_fre_mode (current_fre_code ),
|
||||
.i_cal_fre_code (cal_fre_code ),
|
||||
// .SYNC_OUT (SYNC_OUT ),
|
||||
.SW (SW ),
|
||||
.cal1_mgc (cal1_mgc ),
|
||||
.cal2_mgc (cal2_mgc ),
|
||||
.cal3_mgc (cal3_mgc ),
|
||||
.cal4_mgc (cal4_mgc ),
|
||||
.tx_cal_mgc (tx_cal_mgc ),
|
||||
.tx_mgc (tx_mgc ),
|
||||
.i_ceshi_module (ceshi_model ),
|
||||
.R_CAL1 (R_CAL1 ),
|
||||
.R_CAL2 (R_CAL2 ),
|
||||
.R_CAL3 (R_CAL3 ),
|
||||
.R_CAL4 (R_CAL4 ),
|
||||
.T_CAL (T_CAL )
|
||||
);
|
||||
|
||||
|
||||
adf4351_2 u_adf4351 (
|
||||
.i_sysclk(clk_20m),
|
||||
.i_arstn(rst_n),
|
||||
.o_ADF4351_SCK(SCLK3),
|
||||
.o_ADF4351_DATA(SDIO3),
|
||||
.o_ADF4351_LE(CS3),
|
||||
.i_ADF4351_locked(LD3)
|
||||
);
|
||||
|
||||
|
||||
ds18b20_temp u_temp (
|
||||
.clk(clk_40m),
|
||||
.rstn(rst_n),
|
||||
.dq(DQ_WD),
|
||||
.temp_data(temp_data)
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
assign vio_rstn = 1'b1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,631 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 17:05:24 04/08/2022
|
||||
// Design Name:
|
||||
// Module Name: T_CAL_
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module T_CAL(
|
||||
input i_clk ,
|
||||
input i_rstn ,
|
||||
input SW ,
|
||||
input signed[7:0] i_temp ,
|
||||
input [31:0] hop_fre_mode ,
|
||||
output reg[4:0] T_CAL_
|
||||
|
||||
);
|
||||
|
||||
|
||||
|
||||
//发射通道
|
||||
always@(posedge i_clk,negedge i_rstn)begin//1dB 步进
|
||||
if(!i_rstn)
|
||||
T_CAL_<='d0;
|
||||
else if(SW==1'b1)//B环校准值
|
||||
begin
|
||||
if(i_temp>=8'sd70)//B环高温校准值
|
||||
begin
|
||||
if(hop_fre_mode<=20414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20454) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20494) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20534) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20734) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20774) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20814) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20854) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20894) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20934) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20974) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21014) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21054) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21094) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21134) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21174) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21214) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21254) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21294) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21334) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21374) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21454) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21494) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21534) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21734) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21774) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21814) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21854) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21875) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21894) T_CAL_<= 11 ; //21894
|
||||
else if(hop_fre_mode<=21934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=21974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22054) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22094) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22134) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22174) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22214) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22254) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22294) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22334) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22374) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22414) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22454) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22494) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22534) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22574) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22614) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22654) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22694) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22734) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22774) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22814) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22854) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22894) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23054) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23094) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23134) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23174) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23214) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23254) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23294) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23334) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23374) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23414) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23454) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23494) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23534) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23574) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23614) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23654) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23694) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23734) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23774) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23814) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23854) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23875) T_CAL_<= 9 ;
|
||||
end
|
||||
|
||||
else if(i_temp>=8'sd0)//B环常温校准值
|
||||
begin
|
||||
if(hop_fre_mode<=20414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20454) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20494) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20534) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20734) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20774) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20814) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20854) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20894) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20934) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20974) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21014) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21054) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21094) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21134) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21174) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21214) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21254) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21294) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21334) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21374) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21454) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21494) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21534) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21734) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21774) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21814) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21854) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21875) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21894) T_CAL_<= 11 ; //21894
|
||||
else if(hop_fre_mode<=21934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=21974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22054) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22094) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22134) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22174) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22214) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22254) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22294) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22334) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22374) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22414) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22454) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22494) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22534) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22574) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22614) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22654) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22694) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22734) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22774) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22814) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22854) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22894) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23054) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23094) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23134) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23174) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23214) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23254) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23294) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23334) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23374) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23414) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23454) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23494) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23534) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23574) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23614) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23654) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23694) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23734) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23774) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23814) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23854) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23875) T_CAL_<= 9 ;
|
||||
end
|
||||
|
||||
else //B环低温校准值
|
||||
begin
|
||||
if(hop_fre_mode<=20414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20454) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20494) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20534) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20734) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20774) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20814) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20854) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20894) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20934) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20974) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21014) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21054) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21094) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21134) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21174) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21214) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21254) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21294) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21334) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21374) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21454) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21494) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21534) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21734) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21774) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21814) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21854) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21875) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21894) T_CAL_<= 11 ; //21894
|
||||
else if(hop_fre_mode<=21934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=21974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22054) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22094) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22134) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22174) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22214) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22254) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22294) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22334) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22374) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22414) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22454) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22494) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22534) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22574) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22614) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22654) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22694) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22734) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22774) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22814) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22854) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22894) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23054) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23094) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23134) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23174) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23214) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23254) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23294) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23334) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23374) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23414) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23454) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23494) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23534) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23574) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23614) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23654) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23694) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23734) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23774) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23814) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23854) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23875) T_CAL_<= 9 ;
|
||||
end
|
||||
end
|
||||
else //A环校准值
|
||||
begin
|
||||
if(i_temp>=8'sd70)//A环高温校准值
|
||||
begin
|
||||
if(hop_fre_mode<=20414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20454) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20494) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20534) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20734) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20774) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20814) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20854) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20894) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20934) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20974) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21014) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21054) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21094) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21134) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21174) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21214) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21254) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21294) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21334) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21374) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21454) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21494) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21534) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21734) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21774) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21814) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21854) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21875) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21894) T_CAL_<= 11 ; //21894
|
||||
else if(hop_fre_mode<=21934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=21974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22054) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22094) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22134) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22174) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22214) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22254) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22294) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22334) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22374) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22414) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22454) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22494) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22534) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22574) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22614) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22654) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22694) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22734) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22774) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22814) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22854) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22894) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23054) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23094) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23134) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23174) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23214) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23254) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23294) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23334) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23374) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23414) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23454) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23494) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23534) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23574) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23614) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23654) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23694) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23734) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23774) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23814) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23854) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23875) T_CAL_<= 9 ;
|
||||
end
|
||||
|
||||
else if(i_temp>=8'sd0)//A环常温校准值
|
||||
begin
|
||||
if(hop_fre_mode<=20414) T_CAL_<= 14 ; //20375 ~ 20414
|
||||
else if(hop_fre_mode<=20454) T_CAL_<= 14 ; //20415 ~ 20454
|
||||
else if(hop_fre_mode<=20494) T_CAL_<= 14 ; //20455 ~ 20494
|
||||
else if(hop_fre_mode<=20534) T_CAL_<= 14 ; //20495 ~ 20534
|
||||
else if(hop_fre_mode<=20574) T_CAL_<= 15 ; //20535 ~ 20574
|
||||
else if(hop_fre_mode<=20614) T_CAL_<= 15 ; //20575 ~ 20614
|
||||
else if(hop_fre_mode<=20654) T_CAL_<= 15 ; //20615 ~ 20654
|
||||
else if(hop_fre_mode<=20694) T_CAL_<= 15 ; //20655 ~ 20694
|
||||
else if(hop_fre_mode<=20734) T_CAL_<= 15 ; //20695 ~ 20734
|
||||
else if(hop_fre_mode<=20774) T_CAL_<= 16 ; //20735 ~ 20774
|
||||
else if(hop_fre_mode<=20814) T_CAL_<= 16 ; //20775 ~ 20814
|
||||
else if(hop_fre_mode<=20854) T_CAL_<= 16 ; //20815 ~ 20854
|
||||
else if(hop_fre_mode<=20894) T_CAL_<= 16 ; //20855 ~ 20894
|
||||
else if(hop_fre_mode<=20934) T_CAL_<= 16 ; //20895 ~ 20934
|
||||
else if(hop_fre_mode<=20974) T_CAL_<= 16 ; //20935 ~ 20974
|
||||
else if(hop_fre_mode<=21014) T_CAL_<= 16 ; //20975 ~ 21014
|
||||
else if(hop_fre_mode<=21054) T_CAL_<= 16 ; //21015 ~ 21054
|
||||
else if(hop_fre_mode<=21094) T_CAL_<= 15 ; //21055 ~ 21094
|
||||
else if(hop_fre_mode<=21134) T_CAL_<= 14 ; //21095 ~ 21134
|
||||
else if(hop_fre_mode<=21174) T_CAL_<= 14 ; //21135 ~ 21174
|
||||
else if(hop_fre_mode<=21214) T_CAL_<= 13 ; //21175 ~ 21214
|
||||
else if(hop_fre_mode<=21254) T_CAL_<= 13 ; //21215 ~ 21254
|
||||
else if(hop_fre_mode<=21294) T_CAL_<= 13 ; //21255 ~ 21294
|
||||
else if(hop_fre_mode<=21334) T_CAL_<= 13 ; //21295 ~ 21334
|
||||
else if(hop_fre_mode<=21374) T_CAL_<= 14 ; //21335 ~ 21374
|
||||
else if(hop_fre_mode<=21414) T_CAL_<= 14 ; //21375 ~ 21414
|
||||
else if(hop_fre_mode<=21454) T_CAL_<= 15 ; //21415 ~ 21454
|
||||
else if(hop_fre_mode<=21494) T_CAL_<= 15 ; //21455 ~ 21494
|
||||
else if(hop_fre_mode<=21534) T_CAL_<= 15 ; //21495 ~ 21534
|
||||
else if(hop_fre_mode<=21574) T_CAL_<= 15 ; //21535 ~ 21574
|
||||
else if(hop_fre_mode<=21614) T_CAL_<= 15 ; //21575 ~ 21614
|
||||
else if(hop_fre_mode<=21654) T_CAL_<= 15 ; //21615 ~ 21654
|
||||
else if(hop_fre_mode<=21694) T_CAL_<= 15 ; //21655 ~ 21694
|
||||
else if(hop_fre_mode<=21734) T_CAL_<= 14 ; //21695 ~ 21734
|
||||
else if(hop_fre_mode<=21774) T_CAL_<= 14 ; //21735 ~ 21774
|
||||
else if(hop_fre_mode<=21814) T_CAL_<= 13 ; //21775 ~ 21814
|
||||
else if(hop_fre_mode<=21854) T_CAL_<= 13 ; //21815 ~ 21854
|
||||
else if(hop_fre_mode<=21875) T_CAL_<= 13 ; //21855 ~ 21875
|
||||
else if(hop_fre_mode<=21894) T_CAL_<= 11 ; //21874 ~ 21894
|
||||
else if(hop_fre_mode<=21934) T_CAL_<= 11 ; //21895 ~ 21934
|
||||
else if(hop_fre_mode<=21974) T_CAL_<= 11 ; //21935 ~ 21974
|
||||
else if(hop_fre_mode<=22014) T_CAL_<= 11 ; //21975 ~ 22014
|
||||
else if(hop_fre_mode<=22054) T_CAL_<= 11 ; //22015 ~ 22054
|
||||
else if(hop_fre_mode<=22094) T_CAL_<= 11 ; //22055 ~ 22094
|
||||
else if(hop_fre_mode<=22134) T_CAL_<= 11 ; //22095 ~ 22134
|
||||
else if(hop_fre_mode<=22174) T_CAL_<= 11 ; //22135 ~ 22174
|
||||
else if(hop_fre_mode<=22214) T_CAL_<= 11 ; //22175 ~ 22214
|
||||
else if(hop_fre_mode<=22254) T_CAL_<= 11 ; //22215 ~ 22254
|
||||
else if(hop_fre_mode<=22294) T_CAL_<= 11 ; //22255 ~ 22294
|
||||
else if(hop_fre_mode<=22334) T_CAL_<= 11 ; //22295 ~ 22334
|
||||
else if(hop_fre_mode<=22374) T_CAL_<= 11 ; //22335 ~ 22374
|
||||
else if(hop_fre_mode<=22414) T_CAL_<= 11 ; //22375 ~ 22414
|
||||
else if(hop_fre_mode<=22454) T_CAL_<= 11 ; //22415 ~ 22454
|
||||
else if(hop_fre_mode<=22494) T_CAL_<= 11 ; //22455 ~ 22494
|
||||
else if(hop_fre_mode<=22534) T_CAL_<= 11 ; //22495 ~ 22534
|
||||
else if(hop_fre_mode<=22574) T_CAL_<= 11 ; //22535 ~ 22574
|
||||
else if(hop_fre_mode<=22614) T_CAL_<= 11 ; //22575 ~ 22614
|
||||
else if(hop_fre_mode<=22654) T_CAL_<= 11 ; //22615 ~ 22654
|
||||
else if(hop_fre_mode<=22694) T_CAL_<= 11 ; //22655 ~ 22694
|
||||
else if(hop_fre_mode<=22734) T_CAL_<= 11 ; //22695 ~ 22734
|
||||
else if(hop_fre_mode<=22774) T_CAL_<= 11 ; //22735 ~ 22774
|
||||
else if(hop_fre_mode<=22814) T_CAL_<= 11 ; //22775 ~ 22814
|
||||
else if(hop_fre_mode<=22854) T_CAL_<= 11 ; //22815 ~ 22854
|
||||
else if(hop_fre_mode<=22894) T_CAL_<= 11 ; //22855 ~ 22894
|
||||
else if(hop_fre_mode<=22934) T_CAL_<= 11 ; //22895 ~ 22934
|
||||
else if(hop_fre_mode<=22974) T_CAL_<= 11 ; //22935 ~ 22974
|
||||
else if(hop_fre_mode<=23014) T_CAL_<= 11 ; //22975 ~ 23014
|
||||
else if(hop_fre_mode<=23054) T_CAL_<= 10 ; //23015 ~ 23054
|
||||
else if(hop_fre_mode<=23094) T_CAL_<= 10 ; //23055 ~ 23094
|
||||
else if(hop_fre_mode<=23134) T_CAL_<= 10 ; //23095 ~ 23134
|
||||
else if(hop_fre_mode<=23174) T_CAL_<= 10 ; //23135 ~ 23174
|
||||
else if(hop_fre_mode<=23214) T_CAL_<= 10 ; //23175 ~ 23214
|
||||
else if(hop_fre_mode<=23254) T_CAL_<= 10 ; //23215 ~ 23254
|
||||
else if(hop_fre_mode<=23294) T_CAL_<= 10 ; //23255 ~ 23294
|
||||
else if(hop_fre_mode<=23334) T_CAL_<= 10 ; //23295 ~ 23334
|
||||
else if(hop_fre_mode<=23374) T_CAL_<= 10 ; //23335 ~ 23374
|
||||
else if(hop_fre_mode<=23414) T_CAL_<= 10 ; //23375 ~ 23414
|
||||
else if(hop_fre_mode<=23454) T_CAL_<= 10 ; //23415 ~ 23454
|
||||
else if(hop_fre_mode<=23494) T_CAL_<= 10 ; //23455 ~ 23494
|
||||
else if(hop_fre_mode<=23534) T_CAL_<= 10 ; //23495 ~ 23534
|
||||
else if(hop_fre_mode<=23574) T_CAL_<= 10 ; //23535 ~ 23574
|
||||
else if(hop_fre_mode<=23614) T_CAL_<= 9 ; //23575 ~ 23614
|
||||
else if(hop_fre_mode<=23654) T_CAL_<= 9 ; //23615 ~ 23654
|
||||
else if(hop_fre_mode<=23694) T_CAL_<= 9 ; //23655 ~ 23694
|
||||
else if(hop_fre_mode<=23734) T_CAL_<= 9 ; //23695 ~ 23734
|
||||
else if(hop_fre_mode<=23774) T_CAL_<= 9 ; //23735 ~ 23774
|
||||
else if(hop_fre_mode<=23814) T_CAL_<= 9 ; //23775 ~ 23814
|
||||
else if(hop_fre_mode<=23854) T_CAL_<= 9 ; //23815 ~ 23854
|
||||
else if(hop_fre_mode<=23875) T_CAL_<= 9 ; //23855 ~ 23875
|
||||
end
|
||||
else //A环低温校准值
|
||||
begin
|
||||
if(hop_fre_mode<=20414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20454) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20494) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20534) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=20574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20734) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=20774) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20814) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20854) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20894) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20934) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=20974) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21014) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21054) T_CAL_<= 16 ;
|
||||
else if(hop_fre_mode<=21094) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21134) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21174) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21214) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21254) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21294) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21334) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21374) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21414) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21454) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21494) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21534) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21574) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21614) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21654) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21694) T_CAL_<= 15 ;
|
||||
else if(hop_fre_mode<=21734) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21774) T_CAL_<= 14 ;
|
||||
else if(hop_fre_mode<=21814) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21854) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21875) T_CAL_<= 13 ;
|
||||
else if(hop_fre_mode<=21894) T_CAL_<= 11 ; //21894
|
||||
else if(hop_fre_mode<=21934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=21974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22054) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22094) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22134) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22174) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22214) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22254) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22294) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22334) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22374) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22414) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22454) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22494) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22534) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22574) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22614) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22654) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22694) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22734) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22774) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22814) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22854) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22894) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22934) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=22974) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23014) T_CAL_<= 11 ;
|
||||
else if(hop_fre_mode<=23054) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23094) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23134) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23174) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23214) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23254) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23294) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23334) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23374) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23414) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23454) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23494) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23534) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23574) T_CAL_<= 10 ;
|
||||
else if(hop_fre_mode<=23614) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23654) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23694) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23734) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23774) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23814) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23854) T_CAL_<= 9 ;
|
||||
else if(hop_fre_mode<=23875) T_CAL_<= 9 ;
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,633 @@
|
||||
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 2021/8/13 00:24:20
|
||||
// Design Name:
|
||||
// Module Name: LMX2595
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
|
||||
// fRFOUT= (INT+ (FRAC1+FRAC2/MOD2)/MOD1)× (fPFD/R)
|
||||
// fPFD = fPFD = REFIN × ((1 + D)/(R × (1 + T)))
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module adf4371_a(//20.375Ghz ~ 23.875Ghz
|
||||
input sysclk ,//40MHZ
|
||||
input arstn ,
|
||||
output cs ,
|
||||
input mux_out ,
|
||||
output sclk ,
|
||||
output sdio ,
|
||||
input [3:0] rf_en ,
|
||||
input SW_PLL ,
|
||||
input CAL_F ,
|
||||
input [3:0] ceshi_model ,
|
||||
input adf4371_hop ,
|
||||
output o_cfgover ,
|
||||
input[11:0] fre_code
|
||||
);
|
||||
|
||||
localparam DATA_WIDTH = 24 ;
|
||||
localparam DATA_LENTH = 72 ;
|
||||
localparam WAIT_ld = 40000 ;
|
||||
//*****************************************************************************
|
||||
reg[7:0] cnt_word = 8'd0 ;
|
||||
reg csb_reg = 1'b1 ;
|
||||
reg[5:0] cnt_bits = 6'd0 ;
|
||||
reg[DATA_WIDTH-1:0] cfgdata = 0, regdata = 0 ;
|
||||
reg[3:0] state = 4'b000 ;
|
||||
reg spi_sdo = 1'b0, spi_csb = 1'b1;
|
||||
wire pll_locked ;
|
||||
reg cfgover ;
|
||||
reg[31:0] cnt_lock = 32'd0 ;
|
||||
reg[31:0] cnt_locked = 32'd0 ;
|
||||
wire[15:0] band ;
|
||||
assign o_cfgover =cfgover ;
|
||||
//-----------------------------------
|
||||
assign pll_locked = mux_out ;
|
||||
assign sclk = spi_csb ? 1'b0 : ~sysclk ;
|
||||
assign cs = spi_csb & csb_reg ;
|
||||
assign sdio = spi_sdo ;
|
||||
//-----------------------------------
|
||||
|
||||
wire [7:0] SI_BAND_SEL ; //VCO频段
|
||||
wire [7:0] SI_VCO_SEL_BIAS_CODE ; //[7:4]=VCO内核, [3:0]=VCO偏置
|
||||
reg[13:0] MOD2 ;
|
||||
reg[13:0] FRAC2 ;
|
||||
reg[24:0] FRAC1 ;
|
||||
reg[15:0] INT ;
|
||||
|
||||
assign SI_BAND_SEL = band[15:8] ;
|
||||
assign SI_VCO_SEL_BIAS_CODE = band[7:0] ;
|
||||
|
||||
reg[2:0] hop_en ;
|
||||
reg[15:0] code ;
|
||||
reg[11:0] pre_fre_code ;
|
||||
reg[3:0] rf_en_r ;
|
||||
reg[2:0] CAL_F_R ;
|
||||
|
||||
reg [3:0] R_DIV ;
|
||||
reg [3:0] D ;
|
||||
wire[13:0] douta3 ;
|
||||
wire[13:0] douta4 ;
|
||||
wire[24:0] douta2 ;
|
||||
wire[15:0] douta1 ;
|
||||
//-----------------------------------
|
||||
|
||||
INT_ROMb int_rom (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta1)
|
||||
);
|
||||
|
||||
// Instantiate the module
|
||||
FRAC1 frac1_rom (
|
||||
.clka(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta2)
|
||||
);
|
||||
|
||||
|
||||
// FRAC1_ROM FRAC1_ROM (
|
||||
// .clka(sysclk), // input clka
|
||||
// .addra(code), // input [11 : 0] addra
|
||||
// .douta(douta2) // output [24 : 0] douta
|
||||
//);
|
||||
|
||||
frac2_rom frac2_rom (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta4)
|
||||
);
|
||||
|
||||
mod2_rom mod2_rom (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta3)
|
||||
);
|
||||
|
||||
|
||||
band_rom_a band_rom_a (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(band) // output [15 : 0] douta
|
||||
);
|
||||
|
||||
|
||||
//-------------------整数边界杂散用66.666666Mhz鉴相----------------------------------
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
INT<=douta1;
|
||||
else if(code==24 || code==26 )
|
||||
INT<=76;
|
||||
else if(code==424 )
|
||||
INT<=77;
|
||||
else if(code==426 )
|
||||
INT<=78;
|
||||
else if(code==824 || code==826 )
|
||||
INT<=79;
|
||||
else if(code==1224)
|
||||
INT<=80;
|
||||
else if(code==1226 )
|
||||
INT<=81;
|
||||
else if(code==1624 || code==1626 )
|
||||
INT<=82;
|
||||
else if(code==2024 )
|
||||
INT<=83;
|
||||
else if(code==2026 )
|
||||
INT<=84;
|
||||
else if(code==2424 || code==2426 )
|
||||
INT<=85;
|
||||
else if(code==2824 )
|
||||
INT<=86;
|
||||
else if( code==2826 )
|
||||
INT<=87;
|
||||
else
|
||||
INT<=douta1;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
FRAC1<=douta2;
|
||||
else if(code==24 )
|
||||
FRAC1<=16651386;
|
||||
else if(code==26 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==424 )
|
||||
FRAC1<=33428602;
|
||||
else if(code==426 )
|
||||
FRAC1<=125829;
|
||||
else if(code==824 )
|
||||
FRAC1<=16651386;
|
||||
else if(code==826 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==1224)
|
||||
FRAC1<=33428602;
|
||||
else if(code==1226 )
|
||||
FRAC1<=125829;
|
||||
else if(code==1624)
|
||||
FRAC1<=16651386;
|
||||
else if(code==1626 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==2024 )
|
||||
FRAC1<=33428602;
|
||||
else if(code==2026 )
|
||||
FRAC1<=125829;
|
||||
else if(code==2424 )
|
||||
FRAC1<=16651386;
|
||||
else if(code==2426 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==2824 )
|
||||
FRAC1<=33428602;
|
||||
else if( code==2826 )
|
||||
FRAC1<=125829;
|
||||
else
|
||||
FRAC1<=douta2;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
MOD2<=douta3;
|
||||
else if(code==24 )
|
||||
MOD2<=25;
|
||||
else if(code==26 )
|
||||
MOD2<=25;
|
||||
else if(code==424 )
|
||||
MOD2<=25;
|
||||
else if(code==426 )
|
||||
MOD2<=25;
|
||||
else if(code==824 )
|
||||
MOD2<=25;
|
||||
else if(code==826 )
|
||||
MOD2<=25;
|
||||
else if(code==1224)
|
||||
MOD2<=25;
|
||||
else if(code==1226 )
|
||||
MOD2<=25;
|
||||
else if(code==1624)
|
||||
MOD2<=25;
|
||||
else if(code==1626 )
|
||||
MOD2<=25;
|
||||
else if(code==2024 )
|
||||
MOD2<=25;
|
||||
else if(code==2026 )
|
||||
MOD2<=25;
|
||||
else if(code==2424 )
|
||||
MOD2<=25;
|
||||
else if(code==2426 )
|
||||
MOD2<=25;
|
||||
else if(code==2824 )
|
||||
MOD2<=25;
|
||||
else if( code==2826 )
|
||||
MOD2<=25;
|
||||
else
|
||||
MOD2<=douta3;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
FRAC2<=douta4;
|
||||
else if(code==24 )
|
||||
FRAC2<=22;
|
||||
else if(code==26 )
|
||||
FRAC2<=3;
|
||||
else if(code==424 )
|
||||
FRAC2<=22;
|
||||
else if(code==426 )
|
||||
FRAC2<=3;
|
||||
else if(code==824 )
|
||||
FRAC2<=22;
|
||||
else if(code==826 )
|
||||
FRAC2<=3;
|
||||
else if(code==1224)
|
||||
FRAC2<=22;
|
||||
else if(code==1226 )
|
||||
FRAC2<=3;
|
||||
else if(code==1624)
|
||||
FRAC2<=22;
|
||||
else if(code==1626 )
|
||||
FRAC2<=3;
|
||||
else if(code==2024 )
|
||||
FRAC2<=22;
|
||||
else if(code==2026 )
|
||||
FRAC2<=3;
|
||||
else if(code==2424 )
|
||||
FRAC2<=22;
|
||||
else if(code==2426 )
|
||||
FRAC2<=3;
|
||||
else if(code==2824 )
|
||||
FRAC2<=22;
|
||||
else if( code==2826 )
|
||||
FRAC2<=3;
|
||||
else
|
||||
FRAC2<=douta4;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)begin
|
||||
R_DIV<=4'b1;
|
||||
D<=4'b0;
|
||||
end
|
||||
else if(code==24 || code==26 || code==424 || code==426 || code==824 || code==826|| code==1224 || code==1226 || code==1624 || code==1626 ||code==2024 || code==2026 ||code==2424 || code==2426 ||code==2824 || code==2826 )
|
||||
begin
|
||||
R_DIV<= 4'd3;
|
||||
D<=4'd2;
|
||||
end
|
||||
else
|
||||
begin
|
||||
R_DIV<=4'b1;
|
||||
D<=4'b0;
|
||||
end
|
||||
end
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
pre_fre_code<=11'h6d6;
|
||||
else if(CAL_F_R==3'b011)
|
||||
pre_fre_code<=fre_code;
|
||||
else
|
||||
pre_fre_code<=pre_fre_code;
|
||||
end
|
||||
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
code<=16'h0;
|
||||
else if(hop_en==2'b01)
|
||||
code<=fre_code;
|
||||
else
|
||||
code<=code;
|
||||
end
|
||||
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)begin
|
||||
hop_en <= 3'b0;
|
||||
rf_en_r <= 4'b0;
|
||||
CAL_F_R <= 3'b0;
|
||||
end
|
||||
else begin
|
||||
hop_en <= {hop_en[1:0],adf4371_hop};
|
||||
CAL_F_R <= {CAL_F_R[1:0],CAL_F};
|
||||
rf_en_r <= rf_en ;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
csb_reg <= 1'b1;
|
||||
else
|
||||
csb_reg <= spi_csb;
|
||||
end
|
||||
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
cnt_locked<=32'b0;
|
||||
else if(cnt_locked==WAIT_ld)
|
||||
cnt_locked<=32'b0;
|
||||
else if(!pll_locked)
|
||||
cnt_locked<=cnt_locked+1'b1;
|
||||
else
|
||||
cnt_locked<=32'b0;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)begin
|
||||
cfgdata <= 0;
|
||||
cnt_word <= 7'd0;
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'b0;
|
||||
cnt_lock <= 32'd0;
|
||||
spi_csb <= 1'b1;
|
||||
cfgover <= 1'b0;
|
||||
spi_sdo <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
case(state)
|
||||
4'd0:begin
|
||||
cnt_word <= 7'd0;
|
||||
if(rf_en==1'b1)
|
||||
state <= 4'd0;
|
||||
else if(cnt_lock >= 32'd4000)
|
||||
state <= 4'd1;
|
||||
else
|
||||
state <= state;
|
||||
|
||||
if(rf_en==1'b0)
|
||||
cnt_lock <= cnt_lock + 1'b1;
|
||||
else
|
||||
cnt_lock<=32'd0;
|
||||
|
||||
end
|
||||
4'd1:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
if(rf_en==1'b1)
|
||||
state <= 4'd0;
|
||||
else
|
||||
state <= 4'd2;
|
||||
end
|
||||
4'd2:begin
|
||||
cfgdata <= regdata;
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'd3;
|
||||
end
|
||||
4'd3:begin
|
||||
spi_csb <= 1'b0;
|
||||
spi_sdo <= cfgdata[DATA_WIDTH-1];
|
||||
cfgdata <= cfgdata << 1'b1;
|
||||
cnt_bits <= cnt_bits + 1'b1;
|
||||
if(cnt_bits == DATA_WIDTH-1)begin
|
||||
state <= 4'd4;
|
||||
cnt_word <= cnt_word + 1'b1;
|
||||
end
|
||||
cnt_lock <= 32'd0;
|
||||
end
|
||||
4'd4:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
cnt_lock <= 32'd0;
|
||||
cnt_bits <= 32'd0;
|
||||
if(cnt_word == DATA_LENTH)begin
|
||||
state <= 4'd5;
|
||||
end
|
||||
else
|
||||
state <= 4'd1;
|
||||
end
|
||||
4'd5:begin
|
||||
if(cnt_lock>=40000 || pll_locked)begin
|
||||
cnt_lock <= 32'd0 ;
|
||||
state <= 4'd6 ;
|
||||
end
|
||||
else begin
|
||||
cnt_lock <=cnt_lock+1'b1;
|
||||
state <= state ;
|
||||
end
|
||||
end
|
||||
4'd6:begin
|
||||
cnt_word <= 7'd0;
|
||||
if(pll_locked)
|
||||
state <= 4'd7 ;
|
||||
else
|
||||
state <= 4'b1 ;
|
||||
end
|
||||
//----------------------------------------------------------------
|
||||
4'd7:begin//IDLE
|
||||
cnt_word <= DATA_LENTH;
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
cnt_bits <= 6'd0;
|
||||
cfgover <= 1'b0;
|
||||
if(rf_en==4'b1)
|
||||
state <= state;
|
||||
else if(rf_en==4'b0 && rf_en_r==4'b1 )
|
||||
state <= 4'd0;
|
||||
else if(hop_en==2'b10 || cnt_locked==WAIT_ld )
|
||||
state <= 4'd8;
|
||||
else if(CAL_F_R==3'b011 && (pre_fre_code!=fre_code))//打开RF_OUT
|
||||
state <= 4'd12;
|
||||
else
|
||||
state <= state;
|
||||
end
|
||||
4'd8:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
state <= 4'd9;
|
||||
end
|
||||
4'd9:begin
|
||||
cfgdata <= regdata;
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'd10;
|
||||
end
|
||||
4'd10:begin
|
||||
spi_csb <= 1'b0;
|
||||
spi_sdo <= cfgdata[DATA_WIDTH-1];
|
||||
cfgdata <= cfgdata << 1'b1;
|
||||
cnt_bits <= cnt_bits + 1'b1;
|
||||
if(cnt_bits == DATA_WIDTH-1)begin
|
||||
state <= 4'd11;
|
||||
cnt_word <= cnt_word + 1'b1;
|
||||
end
|
||||
end
|
||||
4'd11:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
cnt_lock <= 32'd0;
|
||||
cnt_bits <= 32'd0;
|
||||
if(cnt_word == 8'd85)begin
|
||||
state <= 4'd7;
|
||||
end
|
||||
else
|
||||
state <= 4'd8;
|
||||
end
|
||||
4'd12:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
state <= 4'd13;
|
||||
end
|
||||
4'd13:begin
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'd14;
|
||||
if(ceshi_model==4'ha)
|
||||
cfgdata<={16'h0025,8'h13};
|
||||
else if(ceshi_model==4'hb)
|
||||
cfgdata<={16'h0025,8'h00};
|
||||
else if(SW_PLL)
|
||||
cfgdata<={16'h0025,8'h13};
|
||||
else
|
||||
cfgdata<={16'h0025,8'h00};
|
||||
end
|
||||
4'd14:begin
|
||||
spi_csb <= 1'b0;
|
||||
spi_sdo <= cfgdata[DATA_WIDTH-1];
|
||||
cfgdata <= cfgdata << 1'b1;
|
||||
cnt_bits <= cnt_bits + 1'b1;
|
||||
if(cnt_bits == DATA_WIDTH-1)begin
|
||||
state <= 4'd7;
|
||||
cfgover <= 1'b1;
|
||||
cnt_word <= cnt_word ;
|
||||
end
|
||||
end
|
||||
|
||||
//&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#//
|
||||
default: begin
|
||||
spi_csb <= 1'b1;
|
||||
state <= 4'd0;
|
||||
cnt_lock <= 32'd0;
|
||||
cnt_word <= 8'd0;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
regdata <= {16'h0000,8'h18 };
|
||||
else case(cnt_word)
|
||||
8'd0 : regdata <= {16'h0000,8'h18 };
|
||||
8'd1 : regdata <= {16'h0001,8'h00 };
|
||||
8'd2 : regdata <= {16'h0003,8'h00 };
|
||||
8'd3 : regdata <= {16'h0004,8'h00 };
|
||||
8'd4 : regdata <= {16'h0005,8'h00 };
|
||||
8'd5 : regdata <= {16'h0006,8'hFF };
|
||||
8'd6 : regdata <= {16'h000C,8'h00 };
|
||||
8'd7 : regdata <= {16'h000D,8'h00 };
|
||||
8'd8 : regdata <= {16'h0010 ,INT[7:0] } ;
|
||||
8'd9 : regdata <= {16'h0011 ,INT[15:8] } ;
|
||||
8'd10 : regdata <= {16'h0012,8'h00 };//[6]No Autocalibration
|
||||
//8'd10 : regdata <= {16'h0012,8'h40 };//[6]Autocalibration
|
||||
8'd11 : regdata <= {16'h0014 ,FRAC1[7:0]} ;
|
||||
8'd12 : regdata <= {16'h0015 ,FRAC1[15:8]} ;
|
||||
8'd13 : regdata <= {16'h0016 ,FRAC1[23:16]} ;
|
||||
8'd14 : regdata <= {16'h0017 ,FRAC2[6:0],FRAC1[24]} ;
|
||||
8'd15 : regdata <= {16'h0018 ,1'b0,FRAC2[13:7] } ;
|
||||
8'd16 : regdata <= {16'h0019 ,MOD2[7:0]} ;
|
||||
8'd17 : regdata <= {16'h001A ,2'b0,MOD2[13:8]} ;
|
||||
8'd18 : regdata <= {16'h001B,8'h00 };
|
||||
8'd19 : regdata <= {16'h001C,8'h00 };
|
||||
8'd20 : regdata <= {16'h001D,8'h00 };
|
||||
8'd21 : regdata <= {16'h001E,8'h18 };//CP_CURRENT 电荷泵
|
||||
// 8'd21 : regdata <= { 16'h001E,cp,4'h8 };//CP_CURRENT 电荷泵
|
||||
8'd22 : regdata <= { 16'h001F,4'h0,R_DIV };//R DIV R分频器
|
||||
8'd23 : regdata <= {16'h0020,8'h1c };//digital lock detect 数字锁定ld
|
||||
8'd24 : regdata <= {16'h0021,8'h00 };
|
||||
8'd25 : regdata <= {16'h0022,D,4'd0 };//[4]2分频 [5]double 2倍频器
|
||||
8'd26 : regdata <= {16'h0023,8'h00 };
|
||||
8'd27 : regdata <= {16'h0024,8'h80 };//Fout_clk DIV_SEL
|
||||
8'd28 : regdata <= {16'h0025,8'h13 };//X4_EN
|
||||
8'd29 : regdata <= {16'h0026,8'h1F };
|
||||
8'd30 : regdata <= {16'h0027,8'hCD };
|
||||
//8'd30 : regdata <= {16'h0027,8'hCD };
|
||||
8'd31 : regdata <= {16'h0028,8'h83 };
|
||||
8'd32 : regdata <= {16'h002A,8'h00 };
|
||||
8'd33 : regdata <= {16'h002B,8'h00 };
|
||||
8'd34 : regdata <= {16'h002C,8'h44 };
|
||||
8'd35 : regdata <= {16'h002D,8'h11 };
|
||||
8'd36 : regdata <= {16'h002E,8'h12 };
|
||||
8'd37 : regdata <= {16'h002F,8'h94 };
|
||||
8'd38 : regdata <= {16'h0030,8'h2A };
|
||||
8'd39 : regdata <= {16'h0031,8'h02 };
|
||||
8'd40 : regdata <= {16'h0032,8'h04 };
|
||||
8'd41 : regdata <= {16'h0033,8'h22 };
|
||||
8'd42 : regdata <= {16'h0034,8'h25 };
|
||||
8'd43 : regdata <= {16'h0035,8'hFA };
|
||||
8'd44 : regdata <= {16'h0036,8'h30 };
|
||||
8'd45 : regdata <= {16'h0037,SI_BAND_SEL} ;//VCO频段
|
||||
8'd46 : regdata <= {16'h0038,SI_VCO_SEL_BIAS_CODE };//[7:4]=VCO内核,[3:0]VCO偏置
|
||||
8'd47 : regdata <= {16'h0039,8'h07 };
|
||||
8'd48 : regdata <= {16'h003A,8'h55 };
|
||||
8'd49 : regdata <= {16'h003D,8'h00 };
|
||||
8'd50 : regdata <= {16'h003E,8'h0C };
|
||||
8'd51 : regdata <= {16'h003F,8'h80 };
|
||||
8'd52 : regdata <= {16'h0040,8'h50 };
|
||||
8'd53 : regdata <= {16'h0041,8'h28 };
|
||||
8'd54 : regdata <= {16'h0042,8'h00 };
|
||||
8'd55 : regdata <= {16'h0043,8'h00 };
|
||||
8'd56 : regdata <= {16'h0044,8'h00 };
|
||||
8'd57 : regdata <= {16'h0045,8'h00 };
|
||||
8'd58 : regdata <= {16'h0046,8'h00 };
|
||||
8'd59 : regdata <= {16'h0047,8'hC0 };
|
||||
8'd60 : regdata <= {16'h0052,8'hF4 };
|
||||
8'd61 : regdata <= {16'h006C,8'h00 };
|
||||
8'd62 : regdata <= {16'h006E,8'h00 };
|
||||
8'd63 : regdata <= {16'h006F,8'h00 };
|
||||
8'd64 : regdata <= {16'h0070,8'hE3 };
|
||||
8'd65 : regdata <= {16'h0071,8'h60 };
|
||||
8'd66 : regdata <= {16'h0072,8'h32 };
|
||||
8'd67 : regdata <= {16'h0073,8'h00 };
|
||||
8'd68 : regdata <= {16'h0079,8'h00 };
|
||||
8'd69 : regdata <= {16'h007A,8'h00 };
|
||||
8'd70 : regdata <= {16'h007B,8'h00 };
|
||||
8'd71 : regdata <= {16'h007C,8'h00 };
|
||||
|
||||
//跳频
|
||||
8'd72:regdata <= { 16'h0022,D,4'd0 };//double D倍频器
|
||||
8'd73:regdata <= { 16'h001F,4'h0,R_DIV };//R DIV R分频器
|
||||
8'd74:regdata <= { 16'h001A ,2'b0,MOD2[13:8] } ;
|
||||
8'd75:regdata <= { 16'h0019 ,MOD2[7:0] } ;
|
||||
8'd76:regdata <= { 16'h0018 ,1'b0,FRAC2[13:7] } ;
|
||||
8'd77:regdata <= { 16'h0017 ,FRAC2[6:0],FRAC1[24] } ;
|
||||
8'd78:regdata <= { 16'h0016 ,FRAC1[23:16] } ;
|
||||
8'd79:regdata <= { 16'h0015 ,FRAC1[15:8] } ;
|
||||
8'd80:regdata <= { 16'h0014 ,FRAC1[7:0] } ;
|
||||
8'd81:regdata <= { 16'h0037 ,SI_BAND_SEL } ;
|
||||
8'd82:regdata <= { 16'h0038 ,SI_VCO_SEL_BIAS_CODE } ;
|
||||
8'd83:regdata <= { 16'h0011 ,INT[15:8] } ;
|
||||
8'd84:regdata <= { 16'h0010 ,INT[7:0] } ;
|
||||
|
||||
default: regdata <= regdata;
|
||||
endcase
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,622 @@
|
||||
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 2021/8/13 00:24:20
|
||||
// Design Name:
|
||||
// Module Name: LMX2595
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
|
||||
// fRFOUT= (INT+ (FRAC1+FRAC2/MOD2)/MOD1)× (fPFD/R)
|
||||
// fPFD = fPFD = REFIN × ((1 + D)/(R × (1 + T)))
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module adf4371_b(//20.375Ghz ~ 23.875Ghz
|
||||
input sysclk ,//40MHZ
|
||||
input arstn ,
|
||||
output cs ,
|
||||
input mux_out ,
|
||||
output sclk ,
|
||||
output sdio ,
|
||||
input [3:0] rf_en ,
|
||||
input CAL_F ,
|
||||
input SW_PLL ,
|
||||
input i_cfgover ,
|
||||
input [3:0] ceshi_model ,
|
||||
input adf4371_hop ,
|
||||
input[11:0] fre_code
|
||||
);
|
||||
|
||||
localparam DATA_WIDTH = 24 ;
|
||||
localparam DATA_LENTH = 72 ;
|
||||
localparam WAIT_ld = 40000 ;
|
||||
//***********************************************************************************************************//
|
||||
reg[7:0] cnt_word = 8'd0 ;
|
||||
reg csb_reg = 1'b1 ;
|
||||
reg[5:0] cnt_bits = 6'd0 ;
|
||||
reg[DATA_WIDTH-1:0] cfgdata = 0, regdata = 0 ;
|
||||
reg[3:0] state = 4'b000 ;
|
||||
reg spi_sdo = 1'b0, spi_csb = 1'b1;
|
||||
wire pll_locked ;
|
||||
reg[31:0] cnt_lock = 32'd0 ;
|
||||
reg[31:0] cnt_locked = 32'd0 ;
|
||||
wire[15:0] band ;
|
||||
|
||||
//-----------------------------------
|
||||
assign pll_locked = mux_out ;
|
||||
assign sclk = spi_csb ? 1'b0 : ~sysclk ;
|
||||
assign cs = spi_csb & csb_reg ;
|
||||
assign sdio = spi_sdo ;
|
||||
//-----------------------------------
|
||||
|
||||
wire [7:0] SI_BAND_SEL ; //VCO频段
|
||||
wire [7:0] SI_VCO_SEL_BIAS_CODE ; //[7:4]=VCO内核, [3:0]=VCO偏置
|
||||
reg[13:0] MOD2 ;
|
||||
reg[13:0] FRAC2 ;
|
||||
reg[24:0] FRAC1 ;
|
||||
reg[15:0] INT ;
|
||||
|
||||
assign SI_BAND_SEL = band[15:8] ;
|
||||
assign SI_VCO_SEL_BIAS_CODE = band[7:0] ;
|
||||
|
||||
reg[2:0] hop_en;
|
||||
reg[15:0] code;
|
||||
reg[11:0] pre_fre_code;
|
||||
reg[3:0] cp_r;
|
||||
reg[3:0] rf_en_r;
|
||||
reg[2:0] CAL_F_R;
|
||||
|
||||
reg [3:0] R_DIV ;
|
||||
reg [3:0] D ;
|
||||
wire[13:0] douta3 ;
|
||||
wire[13:0] douta4 ;
|
||||
wire[24:0] douta2 ;
|
||||
wire[15:0] douta1 ;
|
||||
|
||||
//-----------------------------------
|
||||
INT_ROMb int_rom (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta1)
|
||||
);
|
||||
|
||||
FRAC1 frac1_rom (
|
||||
.clka(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta2)
|
||||
);
|
||||
|
||||
// FRAC1_ROM FRAC1_ROM (
|
||||
// .clka(sysclk), // input clka
|
||||
// .addra(code), // input [11 : 0] addra
|
||||
// .douta(douta2) // output [24 : 0] douta
|
||||
//);
|
||||
|
||||
frac2_rom frac2_rom (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta4)
|
||||
);
|
||||
|
||||
mod2_rom mod2_rom (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(douta3)
|
||||
);
|
||||
|
||||
|
||||
band_rom_b band_rom_b (
|
||||
.sysclk(sysclk),
|
||||
.addra(code),
|
||||
.douta(band) // output [15 : 0] douta
|
||||
);
|
||||
|
||||
//-------------------整数边界杂散用66.666666Mhz鉴相----------------------------------
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
INT<=douta1;
|
||||
else if(code==24 || code==26 )
|
||||
INT<=76;
|
||||
else if(code==424 )
|
||||
INT<=77;
|
||||
else if(code==426 )
|
||||
INT<=78;
|
||||
else if(code==824 || code==826 )
|
||||
INT<=79;
|
||||
else if(code==1224)
|
||||
INT<=80;
|
||||
else if(code==1226 )
|
||||
INT<=81;
|
||||
else if(code==1624 || code==1626 )
|
||||
INT<=82;
|
||||
else if(code==2024 )
|
||||
INT<=83;
|
||||
else if(code==2026 )
|
||||
INT<=84;
|
||||
else if(code==2424 || code==2426 )
|
||||
INT<=85;
|
||||
else if(code==2824 )
|
||||
INT<=86;
|
||||
else if( code==2826 )
|
||||
INT<=87;
|
||||
else
|
||||
INT<=douta1;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
FRAC1<=douta2;
|
||||
else if(code==24 )
|
||||
FRAC1<=16651386;
|
||||
else if(code==26 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==424 )
|
||||
FRAC1<=33428602;
|
||||
else if(code==426 )
|
||||
FRAC1<=125829;
|
||||
else if(code==824 )
|
||||
FRAC1<=16651386;
|
||||
else if(code==826 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==1224)
|
||||
FRAC1<=33428602;
|
||||
else if(code==1226 )
|
||||
FRAC1<=125829;
|
||||
else if(code==1624)
|
||||
FRAC1<=16651386;
|
||||
else if(code==1626 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==2024 )
|
||||
FRAC1<=33428602;
|
||||
else if(code==2026 )
|
||||
FRAC1<=125829;
|
||||
else if(code==2424 )
|
||||
FRAC1<=16651386;
|
||||
else if(code==2426 )
|
||||
FRAC1<=16903045;
|
||||
else if(code==2824 )
|
||||
FRAC1<=33428602;
|
||||
else if( code==2826 )
|
||||
FRAC1<=125829;
|
||||
else
|
||||
FRAC1<=douta2;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
MOD2<=douta3;
|
||||
else if(code==24 )
|
||||
MOD2<=25;
|
||||
else if(code==26 )
|
||||
MOD2<=25;
|
||||
else if(code==424 )
|
||||
MOD2<=25;
|
||||
else if(code==426 )
|
||||
MOD2<=25;
|
||||
else if(code==824 )
|
||||
MOD2<=25;
|
||||
else if(code==826 )
|
||||
MOD2<=25;
|
||||
else if(code==1224)
|
||||
MOD2<=25;
|
||||
else if(code==1226 )
|
||||
MOD2<=25;
|
||||
else if(code==1624)
|
||||
MOD2<=25;
|
||||
else if(code==1626 )
|
||||
MOD2<=25;
|
||||
else if(code==2024 )
|
||||
MOD2<=25;
|
||||
else if(code==2026 )
|
||||
MOD2<=25;
|
||||
else if(code==2424 )
|
||||
MOD2<=25;
|
||||
else if(code==2426 )
|
||||
MOD2<=25;
|
||||
else if(code==2824 )
|
||||
MOD2<=25;
|
||||
else if( code==2826 )
|
||||
MOD2<=25;
|
||||
else
|
||||
MOD2<=douta3;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
FRAC2<=douta4;
|
||||
else if(code==24 )
|
||||
FRAC2<=22;
|
||||
else if(code==26 )
|
||||
FRAC2<=3;
|
||||
else if(code==424 )
|
||||
FRAC2<=22;
|
||||
else if(code==426 )
|
||||
FRAC2<=3;
|
||||
else if(code==824 )
|
||||
FRAC2<=22;
|
||||
else if(code==826 )
|
||||
FRAC2<=3;
|
||||
else if(code==1224)
|
||||
FRAC2<=22;
|
||||
else if(code==1226 )
|
||||
FRAC2<=3;
|
||||
else if(code==1624)
|
||||
FRAC2<=22;
|
||||
else if(code==1626 )
|
||||
FRAC2<=3;
|
||||
else if(code==2024 )
|
||||
FRAC2<=22;
|
||||
else if(code==2026 )
|
||||
FRAC2<=3;
|
||||
else if(code==2424 )
|
||||
FRAC2<=22;
|
||||
else if(code==2426 )
|
||||
FRAC2<=3;
|
||||
else if(code==2824 )
|
||||
FRAC2<=22;
|
||||
else if( code==2826 )
|
||||
FRAC2<=3;
|
||||
else
|
||||
FRAC2<=douta4;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)begin
|
||||
R_DIV<=4'b1;
|
||||
D<=4'b0;
|
||||
end
|
||||
else if(code==24 || code==26 || code==424 || code==426 || code==824 || code==826|| code==1224 || code==1226 || code==1624 || code==1626 ||code==2024 || code==2026 ||code==2424 || code==2426 ||code==2824 || code==2826 )
|
||||
begin
|
||||
R_DIV<= 4'd3;
|
||||
D<=4'd2;
|
||||
end
|
||||
else
|
||||
begin
|
||||
R_DIV<=4'b1;
|
||||
D<=4'b0;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
pre_fre_code<=11'h6d6;
|
||||
else if(CAL_F_R==3'b011)
|
||||
pre_fre_code<=fre_code;
|
||||
else
|
||||
pre_fre_code<=pre_fre_code;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
code<=16'h6d6;
|
||||
else if(hop_en==2'b01)
|
||||
code<=fre_code;
|
||||
else
|
||||
code<=code;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)begin
|
||||
hop_en <= 3'b0;
|
||||
CAL_F_R <= 3'b0;
|
||||
rf_en_r <= 4'b0;
|
||||
end
|
||||
else begin
|
||||
hop_en <= {hop_en[1:0],adf4371_hop};
|
||||
CAL_F_R <= {CAL_F_R[1:0],CAL_F};
|
||||
rf_en_r <= rf_en ;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
csb_reg <= 1'b1;
|
||||
else
|
||||
csb_reg <= spi_csb;
|
||||
end
|
||||
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)
|
||||
cnt_locked<=32'b0;
|
||||
else if(cnt_locked==WAIT_ld)
|
||||
cnt_locked<=32'b0;
|
||||
else if(!pll_locked)
|
||||
cnt_locked<=cnt_locked+1'b1;
|
||||
else
|
||||
cnt_locked<=32'b0;
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)begin
|
||||
if(~arstn)begin
|
||||
cfgdata <= 0;
|
||||
cnt_word <= 7'd0;
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'b0;
|
||||
cnt_lock <= 32'd0;
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
case(state)
|
||||
4'd0:begin
|
||||
cnt_word <= 7'd0;
|
||||
if(rf_en==1'b1)
|
||||
state <= 4'd0;
|
||||
else if(cnt_lock >= 32'd6000)
|
||||
state <= 4'd1;
|
||||
else
|
||||
state <= state;
|
||||
|
||||
if(rf_en==1'b0)
|
||||
cnt_lock <= cnt_lock + 1'b1;
|
||||
else
|
||||
cnt_lock<=32'd0;
|
||||
|
||||
end
|
||||
4'd1:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
state <= 4'd2;
|
||||
end
|
||||
4'd2:begin
|
||||
cfgdata <= regdata;
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'd3;
|
||||
end
|
||||
4'd3:begin
|
||||
spi_csb <= 1'b0;
|
||||
spi_sdo <= cfgdata[DATA_WIDTH-1];
|
||||
cfgdata <= cfgdata << 1'b1;
|
||||
cnt_bits <= cnt_bits + 1'b1;
|
||||
if(cnt_bits == DATA_WIDTH-1)begin
|
||||
state <= 4'd4;
|
||||
cnt_word <= cnt_word + 1'b1;
|
||||
end
|
||||
cnt_lock <= 32'd0;
|
||||
end
|
||||
4'd4:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
cnt_lock <= 32'd0;
|
||||
cnt_bits <= 32'd0;
|
||||
if(cnt_word == DATA_LENTH)begin
|
||||
state <= 4'd5;
|
||||
end
|
||||
else
|
||||
state <= 4'd1;
|
||||
end
|
||||
4'd5:begin
|
||||
if(cnt_lock>=40000 || pll_locked)begin
|
||||
cnt_lock <= 32'd0 ;
|
||||
state <= 4'd6 ;
|
||||
end
|
||||
else begin
|
||||
cnt_lock <=cnt_lock+1'b1;
|
||||
state <= state ;
|
||||
end
|
||||
end
|
||||
4'd6:begin
|
||||
cnt_word <= 7'd0;
|
||||
if(pll_locked)
|
||||
state <= 4'd7 ;
|
||||
else
|
||||
state <= 4'b1 ;
|
||||
end
|
||||
//&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#//
|
||||
4'd7:begin//IDLE
|
||||
cnt_word <= DATA_LENTH;
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
cnt_bits <= 6'd0;
|
||||
if(rf_en==4'b1)
|
||||
state <= state;
|
||||
else if(rf_en==4'b0 && rf_en_r==4'b1 )
|
||||
state <= 4'd0;
|
||||
else if(hop_en==2'b10 || cnt_locked==WAIT_ld )
|
||||
state <= 4'd8;
|
||||
//else if(CAL_F_R==3'b011 && (pre_fre_code!=fre_code))//打开RF_OUT
|
||||
else if(i_cfgover)
|
||||
state <= 4'd12;
|
||||
else
|
||||
state <= state;
|
||||
end
|
||||
4'd8:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
state <= 4'd9;
|
||||
end
|
||||
4'd9:begin
|
||||
cfgdata <= regdata;
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'd10;
|
||||
end
|
||||
4'd10:begin
|
||||
spi_csb <= 1'b0;
|
||||
spi_sdo <= cfgdata[DATA_WIDTH-1];
|
||||
cfgdata <= cfgdata << 1'b1;
|
||||
cnt_bits <= cnt_bits + 1'b1;
|
||||
if(cnt_bits == DATA_WIDTH-1)begin
|
||||
state <= 4'd11;
|
||||
cnt_word <= cnt_word + 1'b1;
|
||||
end
|
||||
end
|
||||
4'd11:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
cnt_lock <= 32'd0;
|
||||
cnt_bits <= 32'd0;
|
||||
if(cnt_word == 8'd85)begin
|
||||
state <= 4'd7;
|
||||
end
|
||||
else
|
||||
state <= 4'd8;
|
||||
end
|
||||
4'd12:begin
|
||||
spi_csb <= 1'b1;
|
||||
spi_sdo <= 1'b0;
|
||||
state <= 4'd13;
|
||||
end
|
||||
4'd13:begin
|
||||
cnt_bits <= 6'd0;
|
||||
state <= 4'd14;
|
||||
if(ceshi_model==4'hb)
|
||||
cfgdata <= {16'h0025,8'h13};
|
||||
else if(ceshi_model==4'ha)
|
||||
cfgdata <= {16'h0025,8'h00};
|
||||
else if (SW_PLL)
|
||||
cfgdata <= {16'h0025,8'h00};
|
||||
else
|
||||
cfgdata <= {16'h0025,8'h13};
|
||||
end
|
||||
4'd14:begin
|
||||
spi_csb <= 1'b0;
|
||||
spi_sdo <= cfgdata[DATA_WIDTH-1];
|
||||
cfgdata <= cfgdata << 1'b1;
|
||||
cnt_bits <= cnt_bits + 1'b1;
|
||||
if(cnt_bits == DATA_WIDTH-1)begin
|
||||
state <= 4'd7;
|
||||
cnt_word <= cnt_word ;
|
||||
end
|
||||
end
|
||||
//&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#&*&#//
|
||||
default: begin
|
||||
spi_csb <= 1'b1;
|
||||
state <= 4'd0;
|
||||
cnt_lock <= 32'd0;
|
||||
cnt_word <= 8'd0;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge sysclk,negedge arstn)
|
||||
begin
|
||||
if(!arstn)
|
||||
regdata <= {16'h0000,8'h18 };
|
||||
else case(cnt_word)
|
||||
8'd0 : regdata <= {16'h0000,8'h18 };
|
||||
8'd1 : regdata <= {16'h0001,8'h00 };
|
||||
8'd2 : regdata <= {16'h0003,8'h00 };
|
||||
8'd3 : regdata <= {16'h0004,8'h00 };
|
||||
8'd4 : regdata <= {16'h0005,8'h00 };
|
||||
8'd5 : regdata <= {16'h0006,8'hFF };
|
||||
8'd6 : regdata <= {16'h000C,8'h00 };
|
||||
8'd7 : regdata <= {16'h000D,8'h00 };
|
||||
8'd8 : regdata <= {16'h0010 ,INT[7:0] } ;
|
||||
8'd9 : regdata <= {16'h0011 ,INT[15:8] } ;
|
||||
8'd10 : regdata <= {16'h0012,8'h00 };//[6]Autocalibration
|
||||
//8'd10 : regdata <= {16'h0012,8'h40 };//[6]Autocalibration
|
||||
8'd11 : regdata <= {16'h0014 ,FRAC1[7:0]} ;
|
||||
8'd12 : regdata <= {16'h0015 ,FRAC1[15:8]} ;
|
||||
8'd13 : regdata <= {16'h0016 ,FRAC1[23:16]} ;
|
||||
8'd14 : regdata <= {16'h0017 ,FRAC2[6:0],FRAC1[24]} ;
|
||||
8'd15 : regdata <= {16'h0018 ,1'b0,FRAC2[13:7] } ;
|
||||
8'd16 : regdata <= {16'h0019 ,MOD2[7:0]} ;
|
||||
8'd17 : regdata <= {16'h001A ,2'b0,MOD2[13:8]} ;
|
||||
8'd18 : regdata <= {16'h001B,8'h00 };
|
||||
8'd19 : regdata <= {16'h001C,8'h00 };
|
||||
8'd20 : regdata <= {16'h001D,8'h00 };
|
||||
8'd21 : regdata <= {16'h001E,8'h18 };//CP_CURRENT 电荷泵
|
||||
//8'd21 : regdata <= {16'h001E,cp,4'h8 };//CP_CURRENT 电荷泵
|
||||
8'd22 : regdata <= { 16'h001F,4'h0,R_DIV };//R DIV R分频器
|
||||
8'd23 : regdata <= {16'h0020,8'h1c };//digital lock detect 数字锁定ld
|
||||
8'd24 : regdata <= {16'h0021,8'h00 };
|
||||
8'd25 : regdata <= { 16'h0022,D,4'd0 };//double D倍频器
|
||||
8'd26 : regdata <= {16'h0023,8'h00 };
|
||||
8'd27 : regdata <= {16'h0024,8'h80 };//DIV_SEL
|
||||
8'd28 : regdata <= {16'h0025,8'h13 };//X4_EN
|
||||
8'd29 : regdata <= {16'h0026,8'h1F };
|
||||
8'd30 : regdata <= {16'h0027,8'hCD };
|
||||
//8'd30 : regdata <= {16'h0027,8'hCD };
|
||||
8'd31 : regdata <= {16'h0028,8'h83 };
|
||||
8'd32 : regdata <= {16'h002A,8'h00 };
|
||||
8'd33 : regdata <= {16'h002B,8'h00 };
|
||||
8'd34 : regdata <= {16'h002C,8'h44 };
|
||||
8'd35 : regdata <= {16'h002D,8'h11 };
|
||||
8'd36 : regdata <= {16'h002E,8'h12 };
|
||||
8'd37 : regdata <= {16'h002F,8'h94 };
|
||||
8'd38 : regdata <= {16'h0030,8'h2A };
|
||||
8'd39 : regdata <= {16'h0031,8'h02 };
|
||||
8'd40 : regdata <= {16'h0032,8'h04 };
|
||||
8'd41 : regdata <= {16'h0033,8'h22 };
|
||||
8'd42 : regdata <= {16'h0034,8'h25 };
|
||||
8'd43 : regdata <= {16'h0035,8'hFA };
|
||||
8'd44 : regdata <= {16'h0036,8'h30 };
|
||||
8'd45 : regdata <= {16'h0037,SI_BAND_SEL} ;//VCO频段
|
||||
8'd46 : regdata <= {16'h0038,SI_VCO_SEL_BIAS_CODE };//[7:4]=VCO内核,[3:0]VCO偏置
|
||||
8'd47 : regdata <= {16'h0039,8'h07 };
|
||||
8'd48 : regdata <= {16'h003A,8'h55 };
|
||||
8'd49 : regdata <= {16'h003D,8'h00 };
|
||||
8'd50 : regdata <= {16'h003E,8'h0C };
|
||||
8'd51 : regdata <= {16'h003F,8'h80 };
|
||||
8'd52 : regdata <= {16'h0040,8'h50 };
|
||||
8'd53 : regdata <= {16'h0041,8'h28 };
|
||||
8'd54 : regdata <= {16'h0042,8'h00 };
|
||||
8'd55 : regdata <= {16'h0043,8'h00 };
|
||||
8'd56 : regdata <= {16'h0044,8'h00 };
|
||||
8'd57 : regdata <= {16'h0045,8'h00 };
|
||||
8'd58 : regdata <= {16'h0046,8'h00 };
|
||||
8'd59 : regdata <= {16'h0047,8'hC0 };
|
||||
8'd60 : regdata <= {16'h0052,8'hF4 };
|
||||
8'd61 : regdata <= {16'h006C,8'h00 };
|
||||
8'd62 : regdata <= {16'h006E,8'h00 };
|
||||
8'd63 : regdata <= {16'h006F,8'h00 };
|
||||
8'd64 : regdata <= {16'h0070,8'hE3 };
|
||||
8'd65 : regdata <= {16'h0071,8'h60 };
|
||||
8'd66 : regdata <= {16'h0072,8'h32 };
|
||||
8'd67 : regdata <= {16'h0073,8'h00 };
|
||||
8'd68 : regdata <= {16'h0079,8'h00 };
|
||||
8'd69 : regdata <= {16'h007A,8'h00 };
|
||||
8'd70 : regdata <= {16'h007B,8'h00 };
|
||||
8'd71 : regdata <= {16'h007C,8'h00 };
|
||||
|
||||
//跳频
|
||||
8'd72:regdata <= { 16'h0022,D,4'd0 };//double D倍频器
|
||||
8'd73:regdata <= { 16'h001F,4'h0,R_DIV };//R DIV R分频器
|
||||
8'd74:regdata <= { 16'h001A ,2'b0,MOD2[13:8] } ;
|
||||
8'd75:regdata <= { 16'h0019 ,MOD2[7:0] } ;
|
||||
8'd76:regdata <= { 16'h0018 ,1'b0,FRAC2[13:7] } ;
|
||||
8'd77:regdata <= { 16'h0017 ,FRAC2[6:0],FRAC1[24] } ;
|
||||
8'd78:regdata <= { 16'h0016 ,FRAC1[23:16] } ;
|
||||
8'd79:regdata <= { 16'h0015 ,FRAC1[15:8] } ;
|
||||
8'd80:regdata <= { 16'h0014 ,FRAC1[7:0] } ;
|
||||
8'd81:regdata <= { 16'h0037 ,SI_BAND_SEL } ;
|
||||
8'd82:regdata <= { 16'h0038 ,SI_VCO_SEL_BIAS_CODE } ;
|
||||
8'd83:regdata <= { 16'h0011 ,INT[15:8] } ;
|
||||
8'd84:regdata <= { 16'h0010 ,INT[7:0] } ;
|
||||
|
||||
default: regdata <= regdata;
|
||||
endcase
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,368 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 13:59:21 10/19/2020
|
||||
// Design Name:
|
||||
// Module Name: DS18B20
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
|
||||
//+125 0000 0111 1101 0000 07D0h
|
||||
//+85* 0000 0101 0101 0000 0550h
|
||||
//+25.0625 0000 0001 1001 0001 0191h
|
||||
//+10.125 0000 0000 1010 0010 00A2h
|
||||
//+0.5 0000 0000 0000 1000 0008h
|
||||
//0 0000 0000 0000 0000 0000h
|
||||
//-0.5 1111 1111 1111 1000 FFF8h
|
||||
//-10.125 1111 1111 0101 1110 FF5Eh
|
||||
//-25.0625 1111 1110 0110 1111 FE6Fh
|
||||
//-55 1111 1100 1001 0000 FC90h
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module ds18b20_temp(
|
||||
input clk , //40_000_000
|
||||
input rstn ,
|
||||
inout dq ,
|
||||
output reg signed[15:0] temp_data //LSB =0.625 C
|
||||
);
|
||||
|
||||
parameter FRE = 40 ;// //clk为40M时钟,若clk为50M,则 FRE=50;
|
||||
|
||||
parameter INIT = 3'b000 , //Gray code
|
||||
WR_CMD = 3'b001 ,
|
||||
WAIT = 3'b011 ,
|
||||
INIT_AGAIN = 3'b010 ,
|
||||
RD_CMD = 3'b110 ,
|
||||
RD_TEMP = 3'b111 ;
|
||||
|
||||
localparam WR_CC_44 = 16'h44cc ;
|
||||
localparam WR_CC_BE = 16'hbecc ;
|
||||
localparam cnt_max = FRE[31:1]-1 ;
|
||||
localparam WAIT_TEMP_CNT = 20'd750_000 ;//750ms
|
||||
|
||||
reg flag ;
|
||||
reg [15:0] data_reg ;
|
||||
reg [2:0] state ;
|
||||
reg clk_1us ;
|
||||
reg [31:0] cnt_1us ;
|
||||
reg dq_en ;
|
||||
reg dq_reg ;
|
||||
reg [19:0] cnt ;
|
||||
reg [3:0] bit_cnt ;
|
||||
|
||||
assign dq = dq_en ? dq_reg : 1'bz;
|
||||
|
||||
always@(posedge clk,negedge rstn)
|
||||
if(!rstn)
|
||||
cnt_1us<=32'b0;
|
||||
else if(cnt_1us==cnt_max)
|
||||
cnt_1us<=32'b0;
|
||||
else
|
||||
cnt_1us<=cnt_1us+1'b1;
|
||||
|
||||
always@(posedge clk,negedge rstn)
|
||||
if(!rstn)
|
||||
clk_1us<=1'b0;
|
||||
else if(cnt_1us==cnt_max)
|
||||
clk_1us<=~clk_1us;
|
||||
else
|
||||
clk_1us<=clk_1us;
|
||||
|
||||
always@(posedge clk_1us,negedge rstn)
|
||||
if(!rstn)
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg <=1'b0;
|
||||
state <=INIT;
|
||||
cnt <=20'd0;
|
||||
flag <=1'b0;
|
||||
bit_cnt <=4'b0;
|
||||
data_reg <=16'd0;
|
||||
temp_data<=12'b0;
|
||||
end
|
||||
else case(state)
|
||||
INIT :begin
|
||||
//if(cnt==16'd999)begin //for sim
|
||||
if(cnt==16'd9999)
|
||||
cnt <=20'd0;
|
||||
else if(cnt==16'd999&&flag)begin
|
||||
cnt <=20'd0;
|
||||
state<=WR_CMD;
|
||||
end
|
||||
else begin
|
||||
cnt <=cnt+1'd1;
|
||||
state<=INIT;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==16'd9999)begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
//else if(cnt==16'd499)begin
|
||||
else if(cnt==16'd599)begin
|
||||
dq_en <=1'b0;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else begin
|
||||
dq_en <=dq_en;
|
||||
dq_reg<=dq_reg;
|
||||
end
|
||||
//------------------
|
||||
// if(cnt==20'd570)//&&dq==1'b0)
|
||||
if(cnt==20'd670)//&&dq==1'b0)
|
||||
flag<= ~dq;
|
||||
else if(cnt==20'd999)
|
||||
flag<=1'b0;
|
||||
else
|
||||
flag<=flag;
|
||||
end
|
||||
/* INIT :begin
|
||||
//if(cnt==16'd999)begin //for sim
|
||||
if(cnt==16'd999&&flag)begin
|
||||
cnt <=20'd0;
|
||||
state<=WR_CMD;
|
||||
end
|
||||
else begin
|
||||
cnt <=cnt+1'd1;
|
||||
state<=INIT;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==16'd499)begin
|
||||
dq_en <=1'b0;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else begin
|
||||
dq_en <=dq_en;
|
||||
dq_reg<=dq_reg;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==20'd570)//&&dq==1'b0)
|
||||
flag<= ~dq;
|
||||
else if(cnt==20'd999)
|
||||
flag<=1'b0;
|
||||
else
|
||||
flag<=flag;
|
||||
end */
|
||||
WR_CMD :begin
|
||||
if(cnt==20'd64 && bit_cnt==4'd15)
|
||||
begin
|
||||
bit_cnt<=4'd0;
|
||||
state<=WAIT;
|
||||
end
|
||||
else if(cnt==20'd64)
|
||||
begin
|
||||
bit_cnt<=bit_cnt+1'd1;
|
||||
state<=WR_CMD;
|
||||
end
|
||||
else
|
||||
begin
|
||||
bit_cnt<=bit_cnt;
|
||||
state<=WR_CMD;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==20'd64 && bit_cnt==4'd15)
|
||||
cnt<=20'd0;
|
||||
else if(cnt==20'd64)
|
||||
cnt<=20'd0;
|
||||
else
|
||||
cnt<=cnt+1'd1;
|
||||
//------------------
|
||||
if(WR_CC_44[bit_cnt]==1'b0 && cnt<=20'd62)
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else if(WR_CC_44[bit_cnt]==1'b1 && cnt<=20'd1)
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
dq_en <=1'b0;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
end
|
||||
WAIT : if(cnt==WAIT_TEMP_CNT)
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b0;
|
||||
cnt<=20'd0;
|
||||
state<=INIT_AGAIN;
|
||||
end
|
||||
else
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b1;
|
||||
cnt<=cnt+1'd1;
|
||||
state<=WAIT;
|
||||
end
|
||||
INIT_AGAIN :begin
|
||||
if(cnt==16'd999&&flag)
|
||||
//if(cnt==16'd999) //for sim
|
||||
begin
|
||||
cnt <=20'd0;
|
||||
state<=RD_CMD;
|
||||
end
|
||||
else
|
||||
begin
|
||||
cnt <=cnt+1'd1;
|
||||
state<=INIT_AGAIN;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==16'd499)
|
||||
begin
|
||||
dq_en <=1'b0;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
dq_en <=dq_en;
|
||||
dq_reg<=dq_reg;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==20'd570)//&&dq==1'b0)
|
||||
flag<=~dq;
|
||||
else if(cnt==20'd999)
|
||||
flag<=1'b0;
|
||||
else
|
||||
flag<=flag;
|
||||
end
|
||||
RD_CMD :begin
|
||||
if(cnt==20'd64 && bit_cnt==4'd15)
|
||||
begin
|
||||
bit_cnt<=4'd0;
|
||||
state<=RD_TEMP;
|
||||
end
|
||||
else if(cnt==20'd64)
|
||||
begin
|
||||
bit_cnt<=bit_cnt+1'd1;
|
||||
state<=RD_CMD;
|
||||
end
|
||||
else
|
||||
begin
|
||||
bit_cnt<=bit_cnt;
|
||||
state<=RD_CMD;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==20'd64 && bit_cnt==4'd15)
|
||||
cnt<=20'd0;
|
||||
else if(cnt==20'd64)
|
||||
cnt<=20'd0;
|
||||
else
|
||||
cnt<=cnt+1'd1;
|
||||
//------------------
|
||||
if(WR_CC_BE[bit_cnt]==1'b0 && cnt<=20'd62)
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else if(WR_CC_BE[bit_cnt]==1'b1 && cnt<=20'd1)
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
dq_en <=1'b0;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
end
|
||||
RD_TEMP :begin
|
||||
if(cnt==20'd64 && bit_cnt==4'd15)
|
||||
cnt <=20'd0;
|
||||
else if(cnt==20'd64)
|
||||
cnt<=20'd0;
|
||||
else
|
||||
cnt<=cnt+1'd1;
|
||||
//------------------
|
||||
if(cnt<=20'd1|| (cnt==20'd64 && bit_cnt==4'd15))
|
||||
begin
|
||||
dq_en <=1'b1;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
dq_en <=1'b0;
|
||||
dq_reg<=1'b0;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==20'd64 && bit_cnt==4'd15)
|
||||
begin
|
||||
bit_cnt<=4'd0;
|
||||
state<=INIT;
|
||||
end
|
||||
else if(cnt==20'd64)
|
||||
begin
|
||||
bit_cnt<=bit_cnt+1'd1;
|
||||
state<=RD_TEMP;
|
||||
end
|
||||
else
|
||||
begin
|
||||
bit_cnt<=bit_cnt;
|
||||
state<=RD_TEMP;
|
||||
end
|
||||
//------------------
|
||||
if(cnt==20'd8)
|
||||
data_reg<={dq,data_reg[15:1]};
|
||||
else
|
||||
data_reg<=data_reg;
|
||||
//------------------
|
||||
if(cnt==20'd64 && bit_cnt==4'd15)
|
||||
temp_data<=data_reg;
|
||||
else
|
||||
temp_data<=temp_data;
|
||||
end
|
||||
default: state<=INIT;
|
||||
endcase
|
||||
|
||||
|
||||
/* wire[33:0]SYNC_OUT;
|
||||
wire[35:0]CONTROL0;
|
||||
wire[35:0]CONTROL1;
|
||||
wire[149:0]TRIG0;
|
||||
|
||||
vio u_vio (
|
||||
.CONTROL (CONTROL0), // INOUT BUS [35:0]
|
||||
.CLK (clk), // IN
|
||||
.SYNC_OUT (SYNC_OUT) // OUT BUS [33:0]
|
||||
);
|
||||
|
||||
|
||||
icon u_icon (
|
||||
.CONTROL0 (CONTROL0), // INOUT BUS [35:0]
|
||||
.CONTROL1 (CONTROL1) // INOUT BUS [35:0]
|
||||
);
|
||||
|
||||
|
||||
ila u_ila (
|
||||
.CONTROL (CONTROL1), // INOUT BUS [35:0]
|
||||
.CLK (clk), // IN
|
||||
.TRIG0 (TRIG0) // IN BUS [39:0]
|
||||
);
|
||||
|
||||
|
||||
assign TRIG0[2:0] = state ;
|
||||
assign TRIG0[21:3] = cnt ;
|
||||
assign TRIG0[22] = dq ;
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,72 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 15:35:03 01/27/2022
|
||||
// Design Name:
|
||||
// Module Name: mod2_rom
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module frac2_rom(
|
||||
input sysclk,
|
||||
input [11 : 0] addra,
|
||||
output reg[13:0] douta
|
||||
);
|
||||
|
||||
|
||||
reg[11:0] addr=0;
|
||||
|
||||
always@(posedge sysclk)begin
|
||||
addr<=addra%25;
|
||||
end
|
||||
|
||||
always@(posedge sysclk)begin
|
||||
case(addr)
|
||||
0 : douta <= 0;
|
||||
1 : douta <= 2;
|
||||
2 : douta <= 4;
|
||||
3 : douta <= 6;
|
||||
4 : douta <= 8;
|
||||
5 : douta <= 2;
|
||||
6 : douta <= 12;
|
||||
7 : douta <= 14;
|
||||
8 : douta <= 16;
|
||||
9 : douta <= 18;
|
||||
10 : douta <= 4;
|
||||
11 : douta <= 22;
|
||||
12 : douta <= 24;
|
||||
13 : douta <= 1;
|
||||
14 : douta <= 3;
|
||||
15 : douta <= 1;
|
||||
16 : douta <= 7;
|
||||
17 : douta <= 9;
|
||||
18 : douta <= 11;
|
||||
19 : douta <= 13;
|
||||
20 : douta <= 3;
|
||||
21 : douta <= 17;
|
||||
22 : douta <= 19;
|
||||
23 : douta <= 21;
|
||||
24 : douta <= 23;
|
||||
default:douta <= douta ;
|
||||
endcase
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,210 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 10:03:33 09/24/2021
|
||||
// Design Name:
|
||||
// Module Name: fre_caliatt
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module fre_caliatt(
|
||||
input i_clk ,
|
||||
input i_rstn ,
|
||||
output ENABLE ,
|
||||
output SC ,
|
||||
output SD ,
|
||||
output END_SYN ,
|
||||
input SDOUT ,
|
||||
input CAL_F ,
|
||||
input signed[7:0] i_temp ,
|
||||
input[15:0] i_fre_mode ,
|
||||
input[15:0] i_cal_fre_code ,
|
||||
input [3:0] cal1_mgc ,
|
||||
input [3:0] cal2_mgc ,
|
||||
input [3:0] cal3_mgc ,
|
||||
input [3:0] cal4_mgc ,
|
||||
input [3:0] i_ceshi_module ,
|
||||
input [40:0] SYNC_OUT ,
|
||||
input SW ,
|
||||
output [3:0] R_CAL1 ,
|
||||
output [3:0] R_CAL2 ,
|
||||
output [3:0] R_CAL3 ,
|
||||
output [3:0] R_CAL4 ,
|
||||
input [4:0] tx_mgc ,
|
||||
input [4:0] tx_cal_mgc ,
|
||||
output [4:0] T_CAL
|
||||
);
|
||||
|
||||
|
||||
wire[15:0] fre_mode ;
|
||||
wire[31:0] hop_fre_mode ;
|
||||
assign fre_mode = i_cal_fre_code/40 ;//20.375Ghz~23.875Ghz
|
||||
assign hop_fre_mode = i_cal_fre_code+20375 ;//20.375Ghz~23.875Ghz
|
||||
|
||||
|
||||
wire [3:0] R_CAL4_r ;
|
||||
wire [3:0] R_CAL3_r ;
|
||||
wire [3:0] R_CAL2_r ;
|
||||
wire [3:0] R_CAL1_r ;
|
||||
wire [4:0] T_CAL_r ;
|
||||
wire [31:0] data_in ;
|
||||
reg [31:0] data_in_r ;
|
||||
reg R_CAL_F ;
|
||||
wire[15:0] cal_mgc_r ;
|
||||
reg [15:0] cal_mgc_rr ;
|
||||
reg tx_en ;
|
||||
reg vio_en ;
|
||||
|
||||
|
||||
|
||||
|
||||
always@(posedge i_clk)
|
||||
begin
|
||||
cal_mgc_rr <= cal_mgc_r;
|
||||
end
|
||||
//------------------vio_debug------------------------//
|
||||
/* always@(posedge i_clk)
|
||||
begin
|
||||
vio_R_CAL_4 <= SYNC_OUT[4:0];
|
||||
vio_R_CAL_3 <= SYNC_OUT[9:5];
|
||||
vio_R_CAL_2 <= SYNC_OUT[14:10];
|
||||
vio_R_CAL_1 <= SYNC_OUT[19:15];
|
||||
vio_T_CAL <= SYNC_OUT[24:20];
|
||||
vio_en <= SYNC_OUT[25];
|
||||
end */
|
||||
|
||||
//------------------vio_debug------------------------//
|
||||
assign R_CAL1 = R_CAL1_r + cal1_mgc ;//通道1
|
||||
assign R_CAL2 = R_CAL2_r + cal2_mgc ;//通道2
|
||||
assign R_CAL3 = R_CAL3_r + cal3_mgc ;//通道3
|
||||
assign R_CAL4 = R_CAL4_r + cal4_mgc ;//通道4
|
||||
assign T_CAL = ( i_ceshi_module==4'ha || i_ceshi_module==4'hb) ? (tx_mgc[4:0] + tx_cal_mgc) : (T_CAL_r + tx_cal_mgc) ;//发射通道,低衰减
|
||||
|
||||
assign cal_mgc_r = {cal1_mgc,cal2_mgc,cal3_mgc,cal4_mgc};
|
||||
assign data_in = { 4'h0,3'b0,
|
||||
T_CAL , //发射通道
|
||||
R_CAL1[0], //接收通道1_1dB
|
||||
R_CAL1[1], //接收通道1_2dB
|
||||
R_CAL1[2], //接收通道1_4dB
|
||||
R_CAL1[3], //接收通道1_8dB
|
||||
R_CAL2[0], //接收通道2_1dB
|
||||
R_CAL2[1], //接收通道2_2dB
|
||||
R_CAL2[2], //接收通道2_4dB
|
||||
R_CAL2[3], //接收通道2_8dB
|
||||
R_CAL3[0], //接收通道3_1dB
|
||||
R_CAL3[1], //接收通道3_2dB
|
||||
R_CAL3[2], //接收通道3_4dB
|
||||
R_CAL3[3], //接收通道3_8dB
|
||||
R_CAL4 , //
|
||||
4'b0 };
|
||||
reg [31:0] cnt5us=0;
|
||||
|
||||
always@(posedge i_clk)begin
|
||||
if(cnt5us==2000)
|
||||
cnt5us<=2000;
|
||||
else
|
||||
cnt5us<=cnt5us+1'b1;
|
||||
end
|
||||
|
||||
always@(posedge i_clk or negedge i_rstn)begin
|
||||
if(!i_rstn)
|
||||
R_CAL_F <= 1'b0;
|
||||
else
|
||||
R_CAL_F <= CAL_F;
|
||||
end
|
||||
|
||||
always@(posedge i_clk or negedge i_rstn)begin
|
||||
if(!i_rstn)
|
||||
tx_en<=1'b0;
|
||||
else if(cnt5us==1999)
|
||||
tx_en<=1'b1;
|
||||
else if({R_CAL_F,CAL_F}==2'b01 || cal_mgc_rr!=cal_mgc_r)
|
||||
tx_en<=1'b1;
|
||||
else
|
||||
tx_en<=1'b0;
|
||||
end
|
||||
|
||||
|
||||
|
||||
R_CAL_1 R_CAL_1 (
|
||||
.i_clk(i_clk),
|
||||
.i_rstn(i_rstn),
|
||||
.i_temp(i_temp),
|
||||
.fre_mode(fre_mode),
|
||||
.R_CAL(R_CAL1_r)
|
||||
);
|
||||
|
||||
R_CAL_2 R_CAL_2 (
|
||||
.i_clk(i_clk),
|
||||
.i_rstn(i_rstn),
|
||||
.i_temp(i_temp),
|
||||
.fre_mode(fre_mode),
|
||||
.R_CAL(R_CAL2_r)
|
||||
);
|
||||
|
||||
R_CAL_3 R_CAL_3 (
|
||||
.i_clk(i_clk),
|
||||
.i_rstn(i_rstn),
|
||||
.i_temp(i_temp),
|
||||
.fre_mode(fre_mode),
|
||||
.R_CAL(R_CAL3_r)
|
||||
);
|
||||
|
||||
R_CAL_4 R_CAL_4 (
|
||||
.i_clk(i_clk),
|
||||
.i_rstn(i_rstn),
|
||||
.i_temp(i_temp),
|
||||
.fre_mode(fre_mode),
|
||||
.R_CAL(R_CAL4_r)
|
||||
);
|
||||
|
||||
|
||||
T_CAL T_CAL__ (
|
||||
.i_clk(i_clk),
|
||||
.i_rstn(i_rstn),
|
||||
.SW(SW),
|
||||
.i_temp(i_temp),
|
||||
.hop_fre_mode(hop_fre_mode),
|
||||
.T_CAL_(T_CAL_r)
|
||||
);
|
||||
|
||||
|
||||
spi_tx SPI_TX (
|
||||
.clk (i_clk ) ,
|
||||
.rstn (i_rstn ) ,
|
||||
.tx_en (tx_en ) ,
|
||||
.data_in (data_in ) ,
|
||||
.spi_cs (ENABLE ) ,
|
||||
.spi_sclk (SC ) ,
|
||||
.spi_sdo (SD ) ,
|
||||
.DARY (END_SYN )
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,434 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 19:54:29 09/06/2021
|
||||
// Design Name:
|
||||
// Module Name: mgc_ctrl
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module mgc_ctrl(
|
||||
input i_sys_clk ,
|
||||
input i_rst_n ,
|
||||
input i_TR_SW_F ,
|
||||
input i_TP_EN_F ,
|
||||
input i_CAL_F ,
|
||||
input i_T_MGC_EN_F ,
|
||||
input i_R_MGC_EN_F ,
|
||||
|
||||
input [15:0] i_fre_code ,
|
||||
input [7:0] i_tx_mgc ,
|
||||
input [7:0] i_rx1_mgc ,
|
||||
input [7:0] i_rx2_mgc ,
|
||||
input [7:0] i_rx3_mgc ,
|
||||
input [7:0] i_rx4_mgc ,
|
||||
input [3:0] i_ceshi_module,
|
||||
output [15:0] o_current_fre_code,
|
||||
output [15:0] o_cal_fre_code,
|
||||
output [15:0] o_hop_fre_code,
|
||||
output o_adf4371_hop1,
|
||||
output o_adf4371_hop2,
|
||||
|
||||
output o_SW,
|
||||
output o_SW2,
|
||||
output o_SW3,
|
||||
output o_SW_C1,
|
||||
|
||||
//发射通道MGC控制,高衰。31dB,步进1dB。初始态直通(全置1)
|
||||
output o_T_MGC_1dB,
|
||||
output o_T_MGC_2dB,
|
||||
output o_T_MGC_4dB,
|
||||
output o_T_MGC_8dB,
|
||||
output o_T_MGC_16dB,
|
||||
//接收通道1MGC控制,高衰。31dB,步进1dB。初始态直通(全置1)
|
||||
output reg[7:0] o_R_MGC_1,
|
||||
|
||||
//接收通道2MGC控制,高衰。31dB,步进1dB。初始态直通(全置1)
|
||||
output reg[7:0] o_R_MGC_2,
|
||||
|
||||
//接收通道3MGC控制,高衰。31dB,步进1dB。初始态直通(全置1)
|
||||
output reg[7:0] o_R_MGC_3,
|
||||
//接收通道4MGC控制,高衰。31dB,步进1dB。初始态直通(全置1)
|
||||
output reg[7:0] o_R_MGC_4
|
||||
|
||||
);
|
||||
|
||||
|
||||
reg TR_SW_F;
|
||||
reg [2:0] TP_EN_r;
|
||||
reg [2:0] T_MGC_EN_r;
|
||||
reg [2:0] R_MGC_EN_r;
|
||||
reg [2:0] R_CAL_F;
|
||||
reg [15:0] hop_fre_code;
|
||||
reg [15:0] current_fre_code;
|
||||
wire [15:0] cal_fre_code;
|
||||
reg [47:0] fre_code_a_b;
|
||||
reg hop_en;
|
||||
reg hop_en_r;
|
||||
reg hop_en_rr;
|
||||
reg cfg_en;
|
||||
reg cfg_en_r;
|
||||
reg cfg_en_rr;
|
||||
reg hmc704_1_hop;
|
||||
reg hmc704_2_hop;
|
||||
reg [1:0] cnt_cfg;
|
||||
reg [1:0] cnt_hop;
|
||||
|
||||
|
||||
reg sw1;
|
||||
reg sw2;
|
||||
reg sw3;
|
||||
reg SW_C1;
|
||||
|
||||
reg T_MGC_1dB_r ;
|
||||
reg T_MGC_2dB_r ;
|
||||
reg T_MGC_4dB_r ;
|
||||
reg T_MGC_8dB_r ;
|
||||
reg T_MGC_16dB_r;
|
||||
|
||||
assign o_SW = sw1;
|
||||
assign o_SW2 = sw2;
|
||||
assign o_SW3 = sw3;
|
||||
assign o_SW_C1 = SW_C1;
|
||||
|
||||
assign o_current_fre_code= current_fre_code;
|
||||
assign o_cal_fre_code = cal_fre_code;
|
||||
assign o_hop_fre_code = hop_fre_code;
|
||||
assign o_adf4371_hop1 = hmc704_1_hop;
|
||||
assign o_adf4371_hop2 = hmc704_2_hop;
|
||||
|
||||
assign o_T_MGC_1dB = T_MGC_1dB_r ;
|
||||
assign o_T_MGC_2dB = T_MGC_2dB_r ;
|
||||
assign o_T_MGC_4dB = T_MGC_4dB_r ;
|
||||
assign o_T_MGC_8dB = T_MGC_8dB_r ;
|
||||
assign o_T_MGC_16dB = T_MGC_16dB_r ;
|
||||
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
TR_SW_F <= 1'b0;
|
||||
TP_EN_r <= 3'b0;
|
||||
T_MGC_EN_r <= 3'b0;
|
||||
R_MGC_EN_r <= 3'b0;
|
||||
R_CAL_F <= 3'b0;
|
||||
end
|
||||
else begin
|
||||
TR_SW_F <= i_TR_SW_F;
|
||||
TP_EN_r <= {TP_EN_r[1:0] ,i_TP_EN_F};
|
||||
T_MGC_EN_r <= {T_MGC_EN_r[1:0] ,i_T_MGC_EN_F};
|
||||
R_MGC_EN_r <= {R_MGC_EN_r[1:0] ,i_R_MGC_EN_F};
|
||||
R_CAL_F <= {R_CAL_F[1:0] ,i_CAL_F};
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
SW_C1 <= 1'b0;
|
||||
current_fre_code <= 16'h6d6 ;
|
||||
end
|
||||
else begin
|
||||
current_fre_code <= hop_en ? hop_fre_code : current_fre_code ;
|
||||
if(TR_SW_F==1'b1)begin
|
||||
if(current_fre_code<=1500)//20.375Ghz~21.875Ghz
|
||||
SW_C1 <= 1'b1;
|
||||
else //21.875Ghz~23.875Ghz
|
||||
SW_C1 <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
SW_C1 <= SW_C1;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
assign cal_fre_code = R_CAL_F==3'b001 ? hop_fre_code : cal_fre_code ;
|
||||
|
||||
|
||||
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
fre_code_a_b <= 48'h0000000006d6;
|
||||
end
|
||||
else if(cfg_en)begin
|
||||
fre_code_a_b <= {fre_code_a_b[31:0],i_fre_code};
|
||||
end
|
||||
else begin
|
||||
fre_code_a_b <= fre_code_a_b;
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
hop_en <= 1'b0;
|
||||
end
|
||||
else if(TP_EN_r==3'b011)begin
|
||||
hop_en <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
hop_en <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
hop_fre_code <= 16'h6d6;
|
||||
end
|
||||
else begin
|
||||
hop_fre_code <= i_fre_code;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
cfg_en <= 1'b0;
|
||||
end
|
||||
else if(hop_fre_code != i_fre_code)begin
|
||||
cfg_en <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
cfg_en <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
hop_en_r <= 1'b0;
|
||||
hop_en_rr <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
hop_en_r <= hop_en;
|
||||
hop_en_rr <= hop_en_r;
|
||||
end
|
||||
end
|
||||
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
cfg_en_r <= 1'b0;
|
||||
cfg_en_rr <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
cfg_en_r <= cfg_en;
|
||||
cfg_en_rr <= cfg_en_r;
|
||||
end
|
||||
end
|
||||
|
||||
reg [15:0] pre_hop_fre_code;
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
cnt_hop <= 2'b00;
|
||||
end
|
||||
else if(cnt_hop == 2'b10)begin
|
||||
cnt_hop <= 2'b00;
|
||||
end
|
||||
else if(~hop_en_r & hop_en && (pre_hop_fre_code!=hop_fre_code ))begin
|
||||
cnt_hop <= cnt_hop + 1'b1;
|
||||
end
|
||||
else begin
|
||||
cnt_hop <= cnt_hop;
|
||||
end
|
||||
end
|
||||
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
cnt_cfg <= 2'b00;
|
||||
end
|
||||
else if(cnt_cfg == 2'b10)begin
|
||||
cnt_cfg <= 2'b00;
|
||||
end
|
||||
else if(~cfg_en_r&cfg_en)begin
|
||||
cnt_cfg <= cnt_cfg + 1'b1;
|
||||
end
|
||||
else begin
|
||||
cnt_cfg <= cnt_cfg;
|
||||
end
|
||||
end
|
||||
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)
|
||||
pre_hop_fre_code<=16'h6d6;
|
||||
else if(hop_en_rr)
|
||||
pre_hop_fre_code<=hop_fre_code;
|
||||
else
|
||||
pre_hop_fre_code<=pre_hop_fre_code;
|
||||
end
|
||||
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
sw1 <= 1'b1;
|
||||
sw2 <= 1'b1;
|
||||
sw3 <= 1'b0;
|
||||
end
|
||||
else if(i_ceshi_module==4'ha)//自动校准开关到a
|
||||
begin
|
||||
sw1 <= 1'b0;
|
||||
sw2 <= 1'b0;
|
||||
sw3 <= 1'b1;
|
||||
end
|
||||
else if(i_ceshi_module==4'hb)//自动校准开关到b
|
||||
begin
|
||||
sw1 <= 1'b1;
|
||||
sw2 <= 1'b1;
|
||||
sw3 <= 1'b0;
|
||||
end
|
||||
else if(hop_en_rr && pre_hop_fre_code != hop_fre_code)begin
|
||||
if(cnt_hop == 2'b01)begin
|
||||
sw1 <= 1'b0;
|
||||
sw2 <= 1'b0;
|
||||
sw3 <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
sw1 <= 1'b1;
|
||||
sw2 <= 1'b1;
|
||||
sw3 <= 1'b0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
sw1 <= sw1;
|
||||
sw2 <= sw2;
|
||||
sw3 <= sw3;
|
||||
end
|
||||
end
|
||||
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b0;
|
||||
end
|
||||
else if(i_ceshi_module==4'ha&&cfg_en_rr)begin
|
||||
hmc704_1_hop <= 1'b1;
|
||||
hmc704_2_hop <= 1'b0;
|
||||
end
|
||||
else if(i_ceshi_module==4'hb&&cfg_en_rr)begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b1;
|
||||
end
|
||||
else if(cfg_en_rr)begin
|
||||
if(fre_code_a_b[47:32]==fre_code_a_b[15:0])begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b0;
|
||||
end
|
||||
else if(cnt_cfg == 2'b01)begin
|
||||
hmc704_1_hop <= 1'b1;
|
||||
hmc704_2_hop <= 1'b0;
|
||||
end
|
||||
else begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b1;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
/* always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
sw1 <= 1'b1;
|
||||
sw2 <= 1'b1;
|
||||
sw3 <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
always @ (posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b0;
|
||||
end
|
||||
else if(cfg_en_rr)begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
hmc704_1_hop <= 1'b0;
|
||||
hmc704_2_hop <= 1'b0;
|
||||
end
|
||||
end */
|
||||
|
||||
|
||||
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
T_MGC_1dB_r <= 1'b0;
|
||||
T_MGC_2dB_r <= 1'b0;
|
||||
T_MGC_4dB_r <= 1'b0;
|
||||
T_MGC_8dB_r <= 1'b0;
|
||||
T_MGC_16dB_r <= 1'b0;
|
||||
end
|
||||
else if(i_ceshi_module==4'ha || i_ceshi_module==4'hb )begin
|
||||
T_MGC_1dB_r <= 1'b0;
|
||||
T_MGC_2dB_r <= 1'b0;
|
||||
T_MGC_4dB_r <= 1'b0;
|
||||
T_MGC_8dB_r <= 1'b0;
|
||||
T_MGC_16dB_r <= 1'b0;
|
||||
end
|
||||
else if(T_MGC_EN_r==3'b011)begin
|
||||
T_MGC_1dB_r <= i_tx_mgc[0];
|
||||
T_MGC_2dB_r <= i_tx_mgc[1];
|
||||
T_MGC_4dB_r <= i_tx_mgc[2];
|
||||
T_MGC_8dB_r <= i_tx_mgc[3];
|
||||
T_MGC_16dB_r <= i_tx_mgc[4];
|
||||
end
|
||||
else begin
|
||||
T_MGC_1dB_r <= T_MGC_1dB_r ;
|
||||
T_MGC_2dB_r <= T_MGC_2dB_r ;
|
||||
T_MGC_4dB_r <= T_MGC_4dB_r ;
|
||||
T_MGC_8dB_r <= T_MGC_8dB_r ;
|
||||
T_MGC_16dB_r <= T_MGC_16dB_r ;
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
o_R_MGC_1 <= 1'b0;
|
||||
end
|
||||
else if(R_MGC_EN_r==3'b011)begin
|
||||
o_R_MGC_1 <= i_rx1_mgc;
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
o_R_MGC_2 <= 1'b0;
|
||||
end
|
||||
else if(R_MGC_EN_r==3'b011)begin
|
||||
o_R_MGC_2 <= i_rx2_mgc;
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
o_R_MGC_3 <= 1'b0;
|
||||
end
|
||||
else if(R_MGC_EN_r==3'b011)begin
|
||||
o_R_MGC_3 <= i_rx3_mgc;
|
||||
end
|
||||
end
|
||||
|
||||
always@(posedge i_sys_clk or negedge i_rst_n)begin
|
||||
if(!i_rst_n)begin
|
||||
o_R_MGC_4 <= 1'b0;
|
||||
end
|
||||
else if(R_MGC_EN_r==3'b011)begin
|
||||
o_R_MGC_4 <= i_rx4_mgc;
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,71 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 15:35:03 01/27/2022
|
||||
// Design Name:
|
||||
// Module Name: mod2_rom
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module mod2_rom(
|
||||
input sysclk,
|
||||
input [11 : 0] addra,
|
||||
|
||||
output reg[13:0] douta
|
||||
);
|
||||
|
||||
reg[11:0] addr=0;
|
||||
always@(posedge sysclk)begin
|
||||
addr<=addra%25;
|
||||
end
|
||||
|
||||
always@(posedge sysclk)begin
|
||||
case(addr)
|
||||
0 : douta <= 1 ;
|
||||
1 : douta <= 25 ;
|
||||
2 : douta <= 25 ;
|
||||
3 : douta <= 25 ;
|
||||
4 : douta <= 25 ;
|
||||
5 : douta <= 5 ;
|
||||
6 : douta <= 25 ;
|
||||
7 : douta <= 25 ;
|
||||
8 : douta <= 25 ;
|
||||
9 : douta <= 25 ;
|
||||
10 : douta <= 5 ;
|
||||
11 : douta <= 25 ;
|
||||
12 : douta <= 25 ;
|
||||
13 : douta <= 25 ;
|
||||
14 : douta <= 25 ;
|
||||
15 : douta <= 5 ;
|
||||
16 : douta <= 25 ;
|
||||
17 : douta <= 25 ;
|
||||
18 : douta <= 25 ;
|
||||
19 : douta <= 25 ;
|
||||
20 : douta <= 5 ;
|
||||
21 : douta <= 25 ;
|
||||
22 : douta <= 25 ;
|
||||
23 : douta <= 25 ;
|
||||
24 : douta <= 25 ;
|
||||
default:douta <= douta ;
|
||||
endcase
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,150 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 20:42:39 09/29/2021
|
||||
// Design Name:
|
||||
// Module Name: spi_master
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module spi_master #(parameter BIT_NUM = 95 )(
|
||||
input i_clk ,
|
||||
input debug_clk ,
|
||||
input i_sys_rst_n ,
|
||||
input i_spi_sck ,
|
||||
input i_spi_cs ,
|
||||
output o_spi_sdo ,
|
||||
input i_spi_sdi ,
|
||||
input i_LD_LO3 ,
|
||||
input i_LD1 ,
|
||||
input i_LD2 ,
|
||||
input[3:0] i_cal1_mgc ,
|
||||
input[3:0] i_cal2_mgc ,
|
||||
input[3:0] i_cal3_mgc ,
|
||||
input[3:0] i_cal4_mgc ,
|
||||
input[7:0] i_temp ,
|
||||
input[31:0] i_frame_count
|
||||
|
||||
);
|
||||
|
||||
wire [BIT_NUM:0] data ;
|
||||
reg [BIT_NUM:0] data_r ;
|
||||
reg [BIT_NUM:0] data_reg ;
|
||||
assign data={ 8'hAA ,
|
||||
i_temp ,
|
||||
7'b0,i_LD_LO3 ,
|
||||
7'b0,i_LD1 ,
|
||||
7'b0,i_LD2 ,
|
||||
i_cal1_mgc,i_cal2_mgc ,
|
||||
i_cal3_mgc,i_cal4_mgc ,
|
||||
i_frame_count ,
|
||||
8'hCC } ;
|
||||
|
||||
wire spi_sck ;
|
||||
wire spi_cs ;
|
||||
reg spi_sdo ;
|
||||
reg [2:0] reg_cs ;
|
||||
reg [31:0] cnt ;
|
||||
|
||||
assign spi_sck = i_spi_sck;
|
||||
assign spi_cs = i_spi_cs;
|
||||
assign o_spi_sdo = spi_sdo;
|
||||
|
||||
always@(negedge spi_sck,negedge i_sys_rst_n)begin
|
||||
if(!i_sys_rst_n)
|
||||
reg_cs<=3'b111;
|
||||
else
|
||||
reg_cs<={reg_cs[1:0],i_spi_cs};
|
||||
end
|
||||
|
||||
always@(negedge spi_sck,negedge i_sys_rst_n)begin
|
||||
if(!i_sys_rst_n)
|
||||
data_r<={8'hAA,80'b0,8'hCC};
|
||||
else if(reg_cs[2:1]==2'b10)
|
||||
data_r<={8'hAA,data[87:8],8'hCC};
|
||||
end
|
||||
|
||||
always@(negedge spi_sck,negedge i_sys_rst_n)begin
|
||||
if(!i_sys_rst_n)
|
||||
spi_sdo <= 1'b0 ;
|
||||
else if(!spi_cs)
|
||||
spi_sdo <= data_r[cnt];
|
||||
else
|
||||
spi_sdo <= 1'b0 ;
|
||||
end
|
||||
|
||||
always@(posedge spi_sck,negedge i_sys_rst_n)begin
|
||||
if(!i_sys_rst_n)
|
||||
cnt<=BIT_NUM;
|
||||
else if(spi_cs==1 | cnt==0)
|
||||
cnt<=BIT_NUM;
|
||||
else
|
||||
cnt<=cnt-1;
|
||||
end
|
||||
|
||||
//------------debug------------
|
||||
always@(posedge spi_sck,negedge i_sys_rst_n)begin
|
||||
if(!i_sys_rst_n)
|
||||
data_reg <= 0 ;
|
||||
else if(!spi_cs)
|
||||
data_reg <= {data_reg,spi_sdo} ;
|
||||
else
|
||||
data_reg <= data_reg ;
|
||||
end
|
||||
//------------debug------------
|
||||
|
||||
/*
|
||||
wire [40:0] SYNC_OUT ;
|
||||
wire [35:0] CONTROL0 ;
|
||||
wire [35:0] CONTROL1 ;
|
||||
wire [150:0] TRIG0 ;
|
||||
|
||||
vio u_vio (
|
||||
.CONTROL (CONTROL0), // INOUT BUS [35:0]
|
||||
.CLK (i_clk), // IN
|
||||
.SYNC_OUT (SYNC_OUT) // OUT BUS [33:0]
|
||||
);
|
||||
|
||||
|
||||
icon u_icon (
|
||||
.CONTROL0 (CONTROL0), // INOUT BUS [35:0]
|
||||
.CONTROL1 (CONTROL1) // INOUT BUS [35:0]
|
||||
);
|
||||
|
||||
|
||||
ila u_ila (
|
||||
.CONTROL (CONTROL1), // INOUT BUS [35:0]
|
||||
.CLK (debug_clk), // IN
|
||||
.TRIG0 (TRIG0) // IN BUS [39:0]
|
||||
);
|
||||
|
||||
|
||||
assign TRIG0[0] = i_LD_LO3;
|
||||
assign TRIG0[1] = i_LD1 ;
|
||||
assign TRIG0[2] = i_LD2 ;
|
||||
assign TRIG0[98:3] = data_r ;
|
||||
assign TRIG0[101:99] = reg_cs ;
|
||||
assign TRIG0[132:102] = cnt ;
|
||||
assign TRIG0[133] = i_spi_sck ;
|
||||
assign TRIG0[134] = i_spi_cs ;
|
||||
assign TRIG0[135] = o_spi_sdo ;
|
||||
assign TRIG0[136] = i_spi_sdi ;
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,171 @@
|
||||
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 2020/09/02 10:48:55
|
||||
// Design Name:
|
||||
// Module Name: d
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
// SPI时钟频率50MHz。每一帧数据12个字节,共96bit数据。
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module spi_slave#(
|
||||
parameter BIT_NUM = 96
|
||||
)
|
||||
(
|
||||
input i_sys_clk,
|
||||
input i_sys_rst_n,
|
||||
|
||||
input i_spi_sck, //从机在时钟下降沿采样数据
|
||||
input i_spi_cs, //低电平时从机接收数据指令
|
||||
input i_spi_sdi,
|
||||
output [31:0] o_frame_count, //帧计数
|
||||
output [15:0] o_fre_code , //天线频率
|
||||
output [7:0] o_tx_mgc, //发射MGC
|
||||
output [3:0] o_model, //模式字
|
||||
output [3:0] o_rf_en, //射频使能
|
||||
output [3:0] o_cal1_mgc, //接收校准1mgc
|
||||
output [3:0] o_cal2_mgc, //接收校准2mgc
|
||||
output [3:0] o_cal3_mgc, //接收校准3mgc
|
||||
output [3:0] o_cal4_mgc, //接收校准4mgc
|
||||
output [7:0] o_tx_cal_mgc, //发射校准mgc
|
||||
output [7:0] o_rx1_mgc, //接收1mgc
|
||||
output [7:0] o_rx2_mgc, //接收2mgc
|
||||
output [7:0] o_rx3_mgc, //接收3mgc
|
||||
output [7:0] o_rx4_mgc , //接收4mgc
|
||||
|
||||
output [3:0] o_ceshi_model
|
||||
);
|
||||
|
||||
reg [BIT_NUM -1:0] receive_data;
|
||||
reg [3:0] rf_en ;
|
||||
reg [3:0] model;
|
||||
reg [31:0] frame_count;
|
||||
reg [11:0] fre_code;
|
||||
reg [7:0] tx_mgc;
|
||||
reg [7:0] rx1_mgc;
|
||||
reg [7:0] rx2_mgc;
|
||||
reg [7:0] rx3_mgc;
|
||||
reg [7:0] rx4_mgc;
|
||||
reg [3:0] cal1_mgc;
|
||||
reg [3:0] cal2_mgc;
|
||||
reg [3:0] cal3_mgc;
|
||||
reg [3:0] cal4_mgc;
|
||||
reg [7:0] tx_cal_mgc;
|
||||
reg [3:0] ceshi_module;
|
||||
|
||||
|
||||
assign o_frame_count= frame_count;
|
||||
assign o_fre_code = {4'b0,fre_code};
|
||||
assign o_rf_en = rf_en;
|
||||
assign o_model = model;
|
||||
assign o_tx_mgc = tx_mgc;
|
||||
assign o_cal1_mgc = cal1_mgc;
|
||||
assign o_cal2_mgc = cal2_mgc;
|
||||
assign o_cal3_mgc = cal3_mgc;
|
||||
assign o_cal4_mgc = cal4_mgc;
|
||||
assign o_tx_cal_mgc = tx_cal_mgc;
|
||||
assign o_rx1_mgc = rx1_mgc;
|
||||
assign o_rx2_mgc = rx2_mgc;
|
||||
assign o_rx3_mgc = rx3_mgc;
|
||||
assign o_rx4_mgc = rx4_mgc;
|
||||
assign o_ceshi_model = ceshi_module;
|
||||
|
||||
always @ ( negedge i_spi_sck or negedge i_sys_rst_n)begin
|
||||
if( !i_sys_rst_n )
|
||||
receive_data <= 'b0;
|
||||
else if(i_spi_cs == 1'b0)
|
||||
receive_data <= {receive_data,i_spi_sdi};
|
||||
else
|
||||
receive_data <= receive_data;
|
||||
end
|
||||
|
||||
|
||||
reg [2:0] cs_reg;
|
||||
|
||||
always @ ( posedge i_sys_clk or negedge i_sys_rst_n)begin
|
||||
if( !i_sys_rst_n )
|
||||
cs_reg <= 3'b111;
|
||||
else
|
||||
cs_reg <= {cs_reg[1:0],i_spi_cs};
|
||||
end
|
||||
|
||||
|
||||
|
||||
always @ ( posedge i_sys_clk or negedge i_sys_rst_n)begin
|
||||
if(!i_sys_rst_n)begin
|
||||
tx_cal_mgc<=8'h0;
|
||||
end
|
||||
else if(cs_reg[2:1]==2'b01 && (receive_data[95:88] == 8'hbb) && (receive_data[7:0] == 8'hdd))begin
|
||||
tx_cal_mgc<=receive_data[15:8];
|
||||
end
|
||||
else begin
|
||||
tx_cal_mgc<=tx_cal_mgc;
|
||||
end
|
||||
end
|
||||
|
||||
always @ ( posedge i_sys_clk or negedge i_sys_rst_n)begin
|
||||
if(!i_sys_rst_n)begin
|
||||
fre_code <= 12'h6d6;
|
||||
tx_mgc <= 8'h00;
|
||||
rf_en <= 4'b1;
|
||||
model <= 4'b0;
|
||||
frame_count <= 32'd1;
|
||||
rx1_mgc <= 4'h0;
|
||||
rx2_mgc <= 4'h0;
|
||||
rx3_mgc <= 4'h0;
|
||||
rx4_mgc <= 4'h0;
|
||||
cal1_mgc <= 4'h0;
|
||||
cal2_mgc <= 4'h0;
|
||||
cal3_mgc <= 4'h0;
|
||||
cal4_mgc <= 4'h0;
|
||||
ceshi_module <= 4'h0;
|
||||
end
|
||||
else if(cs_reg[2:1]==2'b01 && (receive_data[95:88] == 8'haa) && (receive_data[7:0] == 8'hcc))begin
|
||||
frame_count <= frame_count+1'b1;
|
||||
rf_en <= receive_data[87:84];
|
||||
model <= receive_data[83:80];
|
||||
ceshi_module<= receive_data[79:76];
|
||||
fre_code <= receive_data[75:64];
|
||||
tx_mgc <= receive_data[63:56];
|
||||
cal1_mgc <= receive_data[55:52];
|
||||
cal2_mgc <= receive_data[51:48];
|
||||
cal3_mgc <= receive_data[47:44];
|
||||
cal4_mgc <= receive_data[43:40];
|
||||
rx1_mgc <= receive_data[39:32];
|
||||
rx2_mgc <= receive_data[31:24];
|
||||
rx3_mgc <= receive_data[23:16];
|
||||
rx4_mgc <= receive_data[15:8];
|
||||
end
|
||||
else begin
|
||||
frame_count <= frame_count ;
|
||||
rf_en <= rf_en ;
|
||||
model <= model ;
|
||||
fre_code <= fre_code ;
|
||||
tx_mgc <= tx_mgc ;
|
||||
cal1_mgc <= cal1_mgc ;
|
||||
cal2_mgc <= cal2_mgc ;
|
||||
cal3_mgc <= cal3_mgc ;
|
||||
cal4_mgc <= cal4_mgc ;
|
||||
rx1_mgc <= rx1_mgc ;
|
||||
rx2_mgc <= rx2_mgc ;
|
||||
rx3_mgc <= rx3_mgc ;
|
||||
rx4_mgc <= rx4_mgc ;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,118 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 15:23:58 10/12/2020
|
||||
// Design Name: spi发送模块
|
||||
// Module Name: spi
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
module spi_tx #(parameter WHITH=32)(
|
||||
input clk,//系统时钟
|
||||
input rstn,//异步复位
|
||||
input tx_en,//发送使能
|
||||
input [WHITH-1:0] data_in,//待发送数据
|
||||
output reg spi_cs, //片选
|
||||
output reg spi_sclk, //同步时钟,等于clk/2
|
||||
output reg spi_sdo, //发送数据的线
|
||||
output reg DARY
|
||||
);
|
||||
|
||||
//localparam [1:0] polaeity = 2'b10;//negedge 数据下降沿保持
|
||||
localparam [1:0] polaeity = 2'b01;//posedge 数据上降沿保持
|
||||
reg [2:0] state ; //状态机
|
||||
reg [WHITH-1:0] reg_data;//移位寄存器
|
||||
reg [5:0] cnt;//计数器,必须大于数据位宽
|
||||
|
||||
wire CPOL ; //时钟空闲时电平
|
||||
wire CPHA ; //极性
|
||||
assign CPOL = polaeity[0] ;
|
||||
assign CPHA = polaeity[1] ;
|
||||
|
||||
always @(posedge clk,negedge rstn)begin
|
||||
if(!rstn)begin
|
||||
state <= 3'd0;
|
||||
spi_cs <= 1'b1;
|
||||
spi_sclk <= CPOL;
|
||||
reg_data <= 1'd0;
|
||||
cnt <= 5'b0;
|
||||
spi_sdo <= 1'b0;
|
||||
DARY <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
case(state)
|
||||
3'd0:begin//空闲态
|
||||
spi_sclk <= CPOL ;
|
||||
spi_cs <= 1'b1 ;
|
||||
spi_sdo <= 1'b0 ;
|
||||
DARY <= 1'b1 ;
|
||||
cnt <= 5'b0 ;
|
||||
reg_data <= data_in ;
|
||||
if(tx_en)//发送使能跳下一个状态
|
||||
state <= 3'd1 ;
|
||||
else
|
||||
state <= state ;
|
||||
end
|
||||
3'd1:begin
|
||||
spi_cs <= 1'b0 ;
|
||||
state <= 3'd2 ;
|
||||
reg_data <= data_in ;
|
||||
end
|
||||
3'd2:begin//数据移位态
|
||||
spi_cs <= 1'b0 ;
|
||||
reg_data <= reg_data<<1'b1 ;
|
||||
spi_sdo <= reg_data[WHITH-1] ;
|
||||
spi_sclk <= CPHA ;
|
||||
state <= (cnt >= WHITH-1) ? 3'd4:3'd3;
|
||||
end
|
||||
3'd3:begin//时钟翻转
|
||||
cnt <= cnt+1'b1 ;
|
||||
spi_sclk <= ~CPHA ;
|
||||
state <= 3'd2 ;
|
||||
end
|
||||
3'd4:begin//结束态
|
||||
state <= 3'd5;
|
||||
spi_sclk <= ~CPHA;
|
||||
end
|
||||
3'd5:begin//结束态
|
||||
state <= 3'd6;
|
||||
DARY <= 0;
|
||||
spi_sdo <= 1'b0 ;
|
||||
spi_cs <= 1'b1 ;
|
||||
end
|
||||
3'd6:begin//结束态
|
||||
state <= 3'd7;
|
||||
DARY <= 1;
|
||||
spi_cs <= 1'b1 ;
|
||||
end
|
||||
3'd7:begin//结束态
|
||||
state <= 3'd8;
|
||||
DARY <= 0;
|
||||
end
|
||||
3'd8:begin//结束态
|
||||
state <= 3'd0;
|
||||
DARY <= 1;
|
||||
end
|
||||
default :state<=3'd0;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,509 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 2022/07/13 14:20:24
|
||||
// Design Name:
|
||||
// Module Name: ant_rf_ctrl
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module ant_rf_ctrl
|
||||
(
|
||||
input clk_48m ,
|
||||
input clk_96m ,
|
||||
input clk_32m ,
|
||||
input clk_19p2m ,
|
||||
input sys_rst ,
|
||||
|
||||
output ant_clk ,
|
||||
output ant_en ,
|
||||
output ant_data ,
|
||||
output ant_tr ,
|
||||
output ant_dary ,
|
||||
input ant_dout ,
|
||||
|
||||
output rf_standby ,
|
||||
output rf_sw_pll ,
|
||||
output rf_t ,
|
||||
output rf_r ,
|
||||
output rf_sw_bpf ,
|
||||
output rf_sclk1 ,
|
||||
output rf_sdio1 ,
|
||||
output rf_cs1 ,
|
||||
input rf_ld1 ,
|
||||
output rf_sclk2 ,
|
||||
output rf_sdio2 ,
|
||||
output rf_cs2 ,
|
||||
input rf_ld2 ,
|
||||
output rf_sclk3 ,
|
||||
output rf_sdio3 ,
|
||||
output rf_cs3 ,
|
||||
input rf_ld3 ,
|
||||
output rf_tmgc_16 ,
|
||||
output rf_tmgc_8 ,
|
||||
output rf_tmgc_4 ,
|
||||
output rf_tmgc_2 ,
|
||||
output rf_tmgc_1 ,
|
||||
output rf_rmgc_16 ,
|
||||
output rf_rmgc_8 ,
|
||||
output rf_rmgc_4 ,
|
||||
output rf_rmgc_2 ,
|
||||
output rf_rmgc_1 ,
|
||||
output rf_enable ,
|
||||
output rf_sc ,
|
||||
output rf_sd ,
|
||||
output rf_endsyn ,
|
||||
input rf_sdout ,
|
||||
inout rf_dq_wd ,
|
||||
output rf_sw_rx
|
||||
);
|
||||
|
||||
|
||||
(*dont_touch = "true"*) wire vio_switch ; // 键控开关,沿有效
|
||||
(*dont_touch = "true"*) wire vio_trdirection ; // 收发方向
|
||||
(*dont_touch = "true"*) wire [15:0] vio_frequency ; // 收发频率
|
||||
(*dont_touch = "true"*) wire [ 7:0] vio_emitMGC ; // 发送MGC
|
||||
(*dont_touch = "true"*) wire [ 3:0] vio_ch01MGC ; // 1通道校准MGC
|
||||
(*dont_touch = "true"*) wire [ 3:0] vio_ch02MGC ; // 2通道校准MGC
|
||||
(*dont_touch = "true"*) wire [ 3:0] vio_ch03MGC ; // 3通道校准MGC
|
||||
(*dont_touch = "true"*) wire [ 3:0] vio_ch04MGC ; // 4通道校准MGC
|
||||
(*dont_touch = "true"*) wire [ 7:0] vio_recvMGC ; // 接收MGC
|
||||
(*dont_touch = "true"*) wire [ 7:0] vio_AntMod ; // 天线工作模式
|
||||
(*dont_touch = "true"*) wire [15:0] vio_AntOffAxis ; // 天线离轴角
|
||||
(*dont_touch = "true"*) wire [15:0] vio_AntYaw ; // 天线偏航角
|
||||
(*dont_touch = "true"*) wire [15:0] vio_PrecessTime ; // 处理时间,从EN拉低到DARY拉低
|
||||
|
||||
(*dont_touch = "true"*)wire vio_mode_ant ; // 0定频手动,1扫频模式
|
||||
(*dont_touch = "true"*)wire vio_hop_start ; // 0跳频终止,1重新跳频
|
||||
(*dont_touch = "true"*)wire vio_standby ; // 0待机模式,1工作模式
|
||||
(*dont_touch = "true"*)wire [15:0] vio_hoptime ; // 单跳时间计数器
|
||||
|
||||
reg Ant_switch_D1 = 0;
|
||||
reg data_valid = 0;
|
||||
reg switch_valid = 0;
|
||||
reg [95:0] RF_CtrlWord = 0;
|
||||
reg [127:0] Ant_CtrlWord = 0;
|
||||
reg [15:0] data_valid_countdown = 0;
|
||||
reg [15:0] rst_countdown = 100;
|
||||
reg [95:0] RF_CtrlWord_running = 0;
|
||||
reg [127:0] Ant_CtrlWord_running = 0;
|
||||
reg rst_n = 0;
|
||||
reg SPI_SYN_F = 1;
|
||||
reg SPI_MOSI_F = 1;
|
||||
reg TP_EN_F = 0;
|
||||
reg TR_MGC_F = 0;
|
||||
reg CAL_F = 0;
|
||||
reg PRF = 0;
|
||||
wire SPI_MISO_F;
|
||||
reg Ant_DATA = 0;
|
||||
reg Ant_EN = 0;
|
||||
reg Ant_DARY = 0;
|
||||
reg Ant_TR = 0;
|
||||
|
||||
|
||||
|
||||
//相控阵测试程序
|
||||
reg [15:0] cnt_freq_change = 16'd0;
|
||||
|
||||
reg Ant_switch ; // 键控开关,沿有效
|
||||
reg [15:0] Ant_frequency; // 收发频率
|
||||
reg [ 7:0] Ant_mode ; // 相控阵模式
|
||||
reg [ 7:0] RF_mode ; // 射频模式
|
||||
|
||||
always @ (posedge clk_48m) begin
|
||||
if(sys_rst) begin
|
||||
Ant_switch <= 1'b0;
|
||||
cnt_freq_change[15:0] <= 16'd0;
|
||||
Ant_frequency[15:0] <= 16'd0;
|
||||
RF_mode[7:0] <= 8'h10;
|
||||
Ant_mode[7:0] <= 8'h0f;
|
||||
end
|
||||
else begin
|
||||
if(vio_mode_ant) begin
|
||||
if(vio_hop_start) begin
|
||||
if(cnt_freq_change[15:0] == (vio_hoptime[15:0] - 16'd1)) begin
|
||||
Ant_switch <= ~Ant_switch;
|
||||
if(Ant_frequency[15:0] == 16'd3500) begin
|
||||
Ant_frequency[15:0] <= 16'd0;
|
||||
end
|
||||
else begin
|
||||
Ant_frequency[15:0] <= Ant_frequency[15:0] + 16'd1;
|
||||
end
|
||||
cnt_freq_change[15:0] <= 16'd0;
|
||||
end
|
||||
else begin
|
||||
Ant_switch <= Ant_switch;
|
||||
Ant_frequency[15:0] <= Ant_frequency[15:0];
|
||||
cnt_freq_change[15:0] <= cnt_freq_change[15:0] + 16'd1;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
Ant_switch <= Ant_switch;
|
||||
Ant_frequency[15:0] <= 16'd0;
|
||||
cnt_freq_change[15:0] <= 16'd0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
Ant_switch <= vio_switch;
|
||||
Ant_frequency[15:0] <= vio_frequency[15:0];
|
||||
cnt_freq_change[15:0] <= 16'd0;
|
||||
end
|
||||
|
||||
if(vio_standby) begin
|
||||
RF_mode[7:0] <= 8'h10;
|
||||
Ant_mode[7:0] <= 8'h0f;
|
||||
end
|
||||
else begin
|
||||
RF_mode[7:0] <= 8'h00;
|
||||
Ant_mode[7:0] <= vio_AntMod[7:0];
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
always @(posedge clk_48m)
|
||||
begin
|
||||
Ant_switch_D1 <= Ant_switch;
|
||||
if(Ant_switch_D1 != Ant_switch)
|
||||
switch_valid <= 1'b1;
|
||||
else
|
||||
switch_valid <= 1'b0;
|
||||
|
||||
if(switch_valid)
|
||||
begin
|
||||
RF_CtrlWord[95:88] <= 8'hAA;
|
||||
RF_CtrlWord[87:80] <= RF_mode[7:0];
|
||||
RF_CtrlWord[79:64] <= Ant_frequency[15:0];
|
||||
RF_CtrlWord[63:56] <= vio_emitMGC[7:0];
|
||||
RF_CtrlWord[55:52] <= vio_ch01MGC[3:0];
|
||||
RF_CtrlWord[51:48] <= vio_ch02MGC[3:0];
|
||||
RF_CtrlWord[47:44] <= vio_ch03MGC[3:0];
|
||||
RF_CtrlWord[43:40] <= vio_ch04MGC[3:0];
|
||||
RF_CtrlWord[39:32] <= vio_recvMGC[7:0];
|
||||
RF_CtrlWord[31:8] <= 24'h00_0000;
|
||||
RF_CtrlWord[7:0] <= 8'hCC;
|
||||
|
||||
Ant_CtrlWord[127:120] <= 8'hAA;
|
||||
Ant_CtrlWord[119:112] <= 8'h00;
|
||||
Ant_CtrlWord[111:104] <= Ant_mode[7:0];
|
||||
Ant_CtrlWord[103: 88] <= vio_AntOffAxis[15:0];
|
||||
Ant_CtrlWord[ 87: 72] <= vio_AntYaw[15:0];
|
||||
Ant_CtrlWord[ 71: 56] <= Ant_frequency[15:0];
|
||||
Ant_CtrlWord[ 55: 8] <= 48'h00_00_00_00_00_00;
|
||||
Ant_CtrlWord[ 7: 0] <= 8'hCC;
|
||||
end
|
||||
else
|
||||
begin
|
||||
RF_CtrlWord[95:0] <= RF_CtrlWord[95:0];
|
||||
Ant_CtrlWord[127:0] <= Ant_CtrlWord[127:0];
|
||||
end
|
||||
|
||||
if(switch_valid)
|
||||
data_valid_countdown[15:0] <= vio_PrecessTime[15:0];
|
||||
else if(data_valid_countdown[15:0] != 16'd0)
|
||||
data_valid_countdown[15:0] <= data_valid_countdown[15:0] - 16'd1;
|
||||
|
||||
|
||||
// RF控制
|
||||
if(data_valid_countdown[15:0] == vio_PrecessTime[15:0])
|
||||
RF_CtrlWord_running[95:0] <= RF_CtrlWord[95:0];
|
||||
else
|
||||
RF_CtrlWord_running[95:0] <= {RF_CtrlWord_running[94:0],1'b0};
|
||||
|
||||
if(data_valid_countdown[15:0] >= vio_PrecessTime[15:0]-16'd96 && data_valid_countdown[15:0] < vio_PrecessTime[15:0])
|
||||
begin
|
||||
SPI_SYN_F <= 1'b0;
|
||||
SPI_MOSI_F <= RF_CtrlWord_running[95];
|
||||
end
|
||||
else
|
||||
begin
|
||||
SPI_SYN_F <= 1'b1;
|
||||
SPI_MOSI_F <= 1'b0;
|
||||
end
|
||||
|
||||
|
||||
if(data_valid_countdown[15:0] <= 16'd128 && data_valid_countdown[15:0] > 16'd80)
|
||||
CAL_F <= 1'b1;
|
||||
else
|
||||
CAL_F <= 1'b0;
|
||||
|
||||
if(data_valid_countdown[15:0] <= 16'd48 && data_valid_countdown[15:0] > 16'd0)
|
||||
begin
|
||||
TP_EN_F <= 1'b1;
|
||||
TR_MGC_F <= 1'b1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
TP_EN_F <= 1'b0;
|
||||
TR_MGC_F <= 1'b0;
|
||||
end
|
||||
|
||||
if(data_valid_countdown[15:0] == 16'd48)
|
||||
PRF <= vio_trdirection;
|
||||
else
|
||||
PRF <= PRF;
|
||||
|
||||
if(sys_rst)
|
||||
rst_countdown[15:0] <= 16'd100;
|
||||
else if(rst_countdown[15:0] != 0)
|
||||
begin
|
||||
rst_countdown[15:0] <= rst_countdown[15:0] - 16'd1;
|
||||
rst_n <= 1'b0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
rst_countdown[15:0] <= rst_countdown[15:0];
|
||||
rst_n <= 1'b1;
|
||||
end
|
||||
|
||||
// 天线控制
|
||||
if(data_valid_countdown[15:0] == vio_PrecessTime[15:0])
|
||||
Ant_CtrlWord_running[127:0] <= Ant_CtrlWord[127:0];
|
||||
else
|
||||
Ant_CtrlWord_running[127:0] <= {Ant_CtrlWord_running[126:0],1'b0};
|
||||
|
||||
if(data_valid_countdown[15:0] >= vio_PrecessTime[15:0]-16'd128 && data_valid_countdown[15:0] < vio_PrecessTime[15:0])
|
||||
begin
|
||||
Ant_EN <= 1'b0;
|
||||
Ant_DATA <= Ant_CtrlWord_running[127];
|
||||
end
|
||||
else
|
||||
begin
|
||||
Ant_EN <= 1'b1;
|
||||
Ant_DATA <= 1'b0;
|
||||
end
|
||||
|
||||
if(data_valid_countdown[15:0] <= 16'd48 && data_valid_countdown[15:0] > 16'd0)
|
||||
Ant_DARY <= 1'b0;
|
||||
else
|
||||
Ant_DARY <= 1'b1;
|
||||
|
||||
if(data_valid_countdown[15:0] == 16'd48)
|
||||
Ant_TR <= vio_trdirection;
|
||||
else
|
||||
Ant_TR <= Ant_TR;
|
||||
end
|
||||
|
||||
|
||||
//RF recv_data
|
||||
reg [1:0] state_rfdata;
|
||||
reg SPI_SYN_F_d1 = 1'b0;
|
||||
reg [15:0] cnt_rfdata = 16'd0;
|
||||
reg [95:0] RF_RecvWord = 96'd0;
|
||||
reg [95:0] RF_RecvWord_last = 96'd0;
|
||||
|
||||
reg [7:0] RF_temperature = 8'd0 ;
|
||||
reg [7:0] RF_IFlocked = 8'd0 ;
|
||||
reg [7:0] RF_RFAlocked = 8'd0 ;
|
||||
reg [7:0] RF_RFBlocked = 8'd0 ;
|
||||
reg [3:0] RF_ch1mgc = 4'd0 ;
|
||||
reg [3:0] RF_ch2mgc = 4'd0 ;
|
||||
reg [3:0] RF_ch3mgc = 4'd0 ;
|
||||
reg [3:0] RF_ch4mgc = 4'd0 ;
|
||||
reg [31:0] RF_Framecount = 32'd0 ;
|
||||
|
||||
always @ (posedge clk_48m) begin
|
||||
if(sys_rst) begin
|
||||
state_rfdata[1:0] <= 2'd0;
|
||||
SPI_SYN_F_d1 <= 1'b0;
|
||||
RF_RecvWord[95:0] <= 96'd0;
|
||||
cnt_rfdata[15:0] <= 16'd0;
|
||||
RF_temperature[7:0] <= 8'd0 ;
|
||||
RF_IFlocked[7:0] <= 8'd0 ;
|
||||
RF_RFAlocked[7:0] <= 8'd0 ;
|
||||
RF_RFBlocked[7:0] <= 8'd0 ;
|
||||
RF_ch1mgc[3:0] <= 4'd0 ;
|
||||
RF_ch2mgc[3:0] <= 4'd0 ;
|
||||
RF_ch3mgc[3:0] <= 4'd0 ;
|
||||
RF_ch4mgc[3:0] <= 4'd0 ;
|
||||
RF_Framecount[31:0] <= 32'd0;
|
||||
end
|
||||
else begin
|
||||
RF_RecvWord[95:0] <= {RF_RecvWord[94:0],SPI_MISO_F};
|
||||
|
||||
if (RF_RecvWord[95:88] == 8'hAA && RF_RecvWord[7:0] == 8'hCC) begin//校验帧头帧尾
|
||||
RF_temperature[7:0] <= RF_RecvWord[87:80];
|
||||
RF_IFlocked[7:0] <= RF_RecvWord[79:72];
|
||||
RF_RFAlocked[7:0] <= RF_RecvWord[71:64];
|
||||
RF_RFBlocked[7:0] <= RF_RecvWord[63:56];
|
||||
RF_ch1mgc[3:0] <= RF_RecvWord[55:52];
|
||||
RF_ch2mgc[3:0] <= RF_RecvWord[51:48];
|
||||
RF_ch3mgc[3:0] <= RF_RecvWord[47:44];
|
||||
RF_ch4mgc[3:0] <= RF_RecvWord[43:40];
|
||||
RF_Framecount[31:0] <= RF_RecvWord[39:8];
|
||||
RF_RecvWord_last <= RF_RecvWord;
|
||||
end
|
||||
else begin // hold otherwise
|
||||
RF_temperature[7:0] <= RF_temperature[7:0];
|
||||
RF_IFlocked[7:0] <= RF_IFlocked[7:0] ;
|
||||
RF_RFAlocked[7:0] <= RF_RFAlocked[7:0] ;
|
||||
RF_RFBlocked[7:0] <= RF_RFBlocked[7:0] ;
|
||||
RF_ch1mgc[3:0] <= RF_ch1mgc[3:0] ;
|
||||
RF_ch2mgc[3:0] <= RF_ch2mgc[3:0] ;
|
||||
RF_ch3mgc[3:0] <= RF_ch3mgc[3:0] ;
|
||||
RF_ch4mgc[3:0] <= RF_ch4mgc[3:0] ;
|
||||
RF_Framecount[31:0] <= RF_Framecount[31:0];
|
||||
RF_RecvWord_last <= RF_RecvWord_last;
|
||||
end
|
||||
end
|
||||
end
|
||||
// 天线的输出时钟转换
|
||||
reg Ant_dclk_96m = 1;
|
||||
wire [3:0] fifo_wr_din, fifo_rd_dout;
|
||||
wire fifo_full, fifo_empty;
|
||||
reg Ant_EN_96m = 0;
|
||||
reg Ant_DATA_96m = 0;
|
||||
reg Ant_DARY_96m = 1;
|
||||
reg Ant_TR_96m = 0;
|
||||
assign fifo_wr_din[3] = Ant_EN;
|
||||
assign fifo_wr_din[2] = Ant_DATA;
|
||||
assign fifo_wr_din[1] = Ant_DARY;
|
||||
assign fifo_wr_din[0] = Ant_TR;
|
||||
reg fifo_rd_en = 0;
|
||||
reg fifo_rst = 0;
|
||||
reg [8:0] Ant_clk_countdown = 0;
|
||||
always @(posedge clk_96m)
|
||||
begin
|
||||
fifo_rst <= sys_rst;
|
||||
|
||||
fifo_rd_en <= (fifo_rst == 1'b1)? 1'b0:!fifo_rd_en;
|
||||
|
||||
if(fifo_rd_en)
|
||||
{Ant_EN_96m,Ant_DATA_96m,Ant_DARY_96m,Ant_TR_96m} <= fifo_rd_dout[3:0];
|
||||
else
|
||||
{Ant_EN_96m,Ant_DATA_96m,Ant_DARY_96m,Ant_TR_96m} <= {Ant_EN_96m,Ant_DATA_96m,Ant_DARY_96m,Ant_TR_96m};
|
||||
|
||||
if(fifo_rd_en && Ant_EN_96m && !fifo_rd_dout[3])
|
||||
Ant_clk_countdown[8:0] <= 9'd276;
|
||||
else if(Ant_clk_countdown[8:0] != 9'd0)
|
||||
Ant_clk_countdown[8:0] <= Ant_clk_countdown[8:0] - 9'd1;
|
||||
else
|
||||
Ant_clk_countdown[8:0] <= Ant_clk_countdown[8:0];
|
||||
end
|
||||
assign ant_clk = !Ant_clk_countdown[0];
|
||||
assign ant_en = Ant_EN_96m;
|
||||
assign ant_data = Ant_DATA_96m;
|
||||
assign ant_tr = Ant_TR_96m;
|
||||
assign ant_dary = Ant_DARY_96m;
|
||||
|
||||
fifo_AntCtrl fifo_AntCtrl
|
||||
(
|
||||
.rst (fifo_rst ), // input wire rst
|
||||
.wr_clk (clk_48m ), // input wire wr_clk
|
||||
.rd_clk (clk_96m ), // input wire rd_clk
|
||||
.din (fifo_wr_din[3:0] ), // input wire [3 : 0] din
|
||||
.wr_en (!fifo_rst ), // input wire wr_en
|
||||
.rd_en (fifo_rd_en ), // input wire rd_en
|
||||
.dout (fifo_rd_dout[3:0] ), // output wire [3 : 0] dout
|
||||
.full (fifo_full ), // output wire full
|
||||
.empty (fifo_empty ) // output wire empty
|
||||
);
|
||||
//Ant recv_data
|
||||
reg [1:0] state_antdata;
|
||||
reg Ant_EN_96m_d1 = 1'b0;
|
||||
reg [15:0] cnt_antdata = 16'd0;
|
||||
reg [95:0] Ant_RecvWord = 'b0;
|
||||
reg [95:0] Ant_RecvWord_last = 'b0;
|
||||
|
||||
reg [7:0] Ant_Ant_Volt = 8'd0 ;
|
||||
reg [7:0] Ant_RF_Volt = 8'd0 ;
|
||||
reg [7:0] Ant_IF_Volt = 8'd0 ;
|
||||
reg [7:0] Ant_state = 8'd0 ;
|
||||
reg [31:0] Ant_Framecount = 32'd0 ;
|
||||
|
||||
always @ (posedge clk_96m) begin
|
||||
if(sys_rst) begin
|
||||
state_antdata[1:0] <= 2'd0;
|
||||
Ant_EN_96m_d1 <= 1'b0;
|
||||
Ant_RecvWord[95:0] <= 'd0;
|
||||
cnt_antdata[15:0] <= 16'd0;
|
||||
Ant_Ant_Volt[7:0] <= 8'd0 ;
|
||||
Ant_RF_Volt[7:0] <= 8'd0 ;
|
||||
Ant_IF_Volt[7:0] <= 8'd0 ;
|
||||
Ant_state[7:0] <= 8'd0 ;
|
||||
Ant_Framecount[31:0] <= 32'd0;
|
||||
end
|
||||
else begin
|
||||
Ant_RecvWord[95:0] <= {Ant_RecvWord[94:0],ant_dout};
|
||||
|
||||
if(Ant_RecvWord[95:88] == 8'hAA && Ant_RecvWord[7:0] == 8'hCC) begin//校验帧头帧尾
|
||||
Ant_Ant_Volt[7:0] <= Ant_RecvWord[87:80];
|
||||
Ant_RF_Volt[7:0] <= Ant_RecvWord[79:72];
|
||||
Ant_IF_Volt[7:0] <= Ant_RecvWord[71:64];
|
||||
Ant_state[7:0] <= Ant_RecvWord[47:40];
|
||||
Ant_Framecount[31:0] <= Ant_RecvWord[39:8] ;
|
||||
Ant_RecvWord_last <= Ant_RecvWord ;
|
||||
end
|
||||
else begin // hold otherwise
|
||||
Ant_Ant_Volt[7:0] <= Ant_Ant_Volt[7:0] ;
|
||||
Ant_RF_Volt[7:0] <= Ant_RF_Volt[7:0] ;
|
||||
Ant_IF_Volt[7:0] <= Ant_IF_Volt[7:0] ;
|
||||
Ant_state[7:0] <= Ant_state[7:0] ;
|
||||
Ant_Framecount[31:0] <= Ant_Framecount[31:0] ;
|
||||
Ant_RecvWord_last <= Ant_RecvWord_last ;
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Sisyif uut(
|
||||
.clk_40m(clk_32m),
|
||||
.clk_20m(clk_19p2m),
|
||||
.SPI_CLK_F(clk_48m),
|
||||
.rst_n(rst_n),
|
||||
.SPI_SYN_F(SPI_SYN_F),
|
||||
.SPI_MOSI_F(SPI_MOSI_F),
|
||||
.SPI_MISO_F(SPI_MISO_F),
|
||||
.TP_EN_F(TP_EN_F),
|
||||
.TR_MGC_F(TR_MGC_F),
|
||||
.CAL_F(CAL_F),
|
||||
.PRF(PRF),
|
||||
.standby(rf_standby),
|
||||
.SW_PLL(rf_sw_pll),
|
||||
.T(rf_t),
|
||||
.R(rf_r),
|
||||
.SW_BPF(rf_sw_bpf),
|
||||
.SCLK1(rf_sclk1),
|
||||
.SDIO1(rf_sdio1),
|
||||
.CS1(rf_cs1),
|
||||
.LD1(rf_ld1),
|
||||
.SCLK2(rf_sclk2),
|
||||
.SDIO2(rf_sdio2),
|
||||
.CS2(rf_cs2),
|
||||
.LD2(rf_ld2),
|
||||
.SCLK3(rf_sclk3),
|
||||
.SDIO3(rf_sdio3),
|
||||
.CS3(rf_cs3),
|
||||
.LD3(rf_ld3),
|
||||
.TMGC_16db(rf_tmgc_16),
|
||||
.TMGC_8db(rf_tmgc_8),
|
||||
.TMGC_4db(rf_tmgc_4),
|
||||
.TMGC_2db(rf_tmgc_2),
|
||||
.TMGC_1db(rf_tmgc_1),
|
||||
.RMGC_16db(rf_rmgc_16),
|
||||
.RMGC_8db(rf_rmgc_8),
|
||||
.RMGC_4db(rf_rmgc_4),
|
||||
.RMGC_2db(rf_rmgc_2),
|
||||
.RMGC_1db(rf_rmgc_1),
|
||||
.ENABLE(rf_enable),
|
||||
.SC(rf_sc),
|
||||
.SD(rf_sd),
|
||||
.END_SYN(rf_endsyn),
|
||||
.SDOUT(rf_sdout),
|
||||
.DQ_WD(rf_dq_wd),
|
||||
.SW_RX(rf_sw_rx)
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,133 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
// _ _ ____
|
||||
// | | ___ ___| |__ / ___| __ _ ___
|
||||
// _ | |/ _ \/ __| '_ \ | | _ / _` |/ _ \
|
||||
// | |_| | (_) \__ \ | | | | |_| | (_| | (_) |
|
||||
// \___/ \___/|___/_| |_| \____|\__,_|\___/
|
||||
//
|
||||
// Create Date: 2022/11/01 11:15:25
|
||||
// Design Name:
|
||||
// Module Name: clk_dist
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description: Clock distribution module
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module clk_dist
|
||||
(
|
||||
// input clocks
|
||||
input clk_250m_p , // generated by ad9516, 250mhz
|
||||
input clk_250m_n ,
|
||||
input ad9361_1_rx_data_clk, // ad9361 rx data clock, 83.3333mhz
|
||||
input ad9361_2_rx_data_clk, // ad9361 rx data clock, 83.3333mhz
|
||||
|
||||
// output clocks & reset
|
||||
// global reset
|
||||
output sys_rst , // global reset signal, active high
|
||||
output ant_rst , // phased-array & rf control reset signal, active high
|
||||
|
||||
// pl signal processing clock
|
||||
output sys_clk , // 41.6667mhz
|
||||
output sys_clk_2x , // 83.3333mhz
|
||||
output sys_clk_3x , // 125mhz
|
||||
output sys_clk_4x , // 166.6667mhz
|
||||
output sys_clk_ld , // system main clock locked indicator
|
||||
|
||||
// ad9361-1 clocks
|
||||
output ad9361_1_clk , // 41.6667mhz
|
||||
output ad9361_1_clk_2x , // 83.3333mhz
|
||||
output ad9361_1_clk_3x , // 125mhz
|
||||
output ad9361_1_clk_4x , // 166.6667mhz
|
||||
output ad9361_1_clk_ld , // ad9361-1 clock group locked indicator
|
||||
|
||||
// ad9361-2 clocks
|
||||
output ad9361_2_clk , // 41.6667mhz
|
||||
output ad9361_2_clk_2x , // 83.3333mhz
|
||||
output ad9361_2_clk_3x , // 125mhz
|
||||
output ad9361_2_clk_4x , // 166.6667mhz
|
||||
output ad9361_2_clk_ld , // ad9361-2 clock group locked indicator
|
||||
|
||||
// phased-array & rf control clocks
|
||||
output clk_96m ,
|
||||
output clk_48m ,
|
||||
output clk_32m ,
|
||||
output clk_19p2m
|
||||
);
|
||||
|
||||
assign sys_clk = ad9361_1_clk ;
|
||||
assign sys_clk_2x = ad9361_1_clk_2x;
|
||||
assign sys_clk_3x = ad9361_1_clk_3x;
|
||||
assign sys_clk_4x = ad9361_1_clk_4x;
|
||||
assign sys_clk_ld = ad9361_1_clk_ld;
|
||||
|
||||
assign sys_rst = ~sys_clk_ld;
|
||||
|
||||
ad9361_clk_gen_cmos_2t2r u_ad9361_1_clk_gen
|
||||
(
|
||||
// Clock out ports
|
||||
.clk_out1 (ad9361_1_clk ), // output clk_out1
|
||||
.clk_out2 (ad9361_1_clk_2x ), // output clk_out2
|
||||
.clk_out3 (ad9361_1_clk_3x ), // output clk_out3
|
||||
.clk_out4 (ad9361_1_clk_4x ), // output clk_out4
|
||||
// Status and control signals
|
||||
.locked (ad9361_1_clk_ld ), // output locked
|
||||
// Clock in ports
|
||||
.clk_in1 (ad9361_1_rx_data_clk ) // input clk_in1
|
||||
);
|
||||
|
||||
ad9361_clk_gen_cmos_2t2r u_ad9361_2_clk_gen
|
||||
(
|
||||
// Clock out ports
|
||||
.clk_out1 (ad9361_2_clk ), // output clk_out1
|
||||
.clk_out2 (ad9361_2_clk_2x ), // output clk_out2
|
||||
.clk_out3 (ad9361_2_clk_3x ), // output clk_out3
|
||||
.clk_out4 (ad9361_2_clk_4x ), // output clk_out4
|
||||
// Status and control signals
|
||||
.locked (ad9361_2_clk_ld ), // output locked
|
||||
// Clock in ports
|
||||
.clk_in1 (ad9361_2_rx_data_clk ) // input clk_in1
|
||||
);
|
||||
|
||||
wire ant_clk_stg1_96m;
|
||||
wire ant_clk_stg1_ld;
|
||||
wire ant_clk_stg2_ld;
|
||||
|
||||
assign ant_rst = ~ant_clk_stg2_ld;
|
||||
|
||||
ant_clk_gen_stg1 u_ant_clk_gen_stg1
|
||||
(
|
||||
// Clock out ports
|
||||
.clk_out1 (ant_clk_stg1_96m ), // output clk_out1
|
||||
// Status and control signals
|
||||
.locked (ant_clk_stg1_ld ), // output locked
|
||||
// Clock in ports
|
||||
.clk_in1_p (clk_250m_p ), // input clk_in1_p
|
||||
.clk_in1_n (clk_250m_n ) // input clk_in1_n
|
||||
);
|
||||
|
||||
ant_clk_gen_stg2 u_ant_clk_gen_stg2
|
||||
(
|
||||
// Clock out ports
|
||||
.clk_out1 (clk_96m ), // output clk_out1
|
||||
.clk_out2 (clk_48m ), // output clk_out2
|
||||
.clk_out3 (clk_32m ), // output clk_out3
|
||||
.clk_out4 (clk_19p2m ), // output clk_out4
|
||||
// Status and control signals
|
||||
.locked (ant_clk_stg2_ld ), // output locked
|
||||
// Clock in ports
|
||||
.clk_in1 (ant_clk_stg1_96m ) // input clk_in1
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,715 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 05/06/2023 02:33:07 PM
|
||||
// Design Name:
|
||||
// Module Name: freq_comp
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module freq_comp
|
||||
#(
|
||||
parameter DATA_I_WIDTH = 12,
|
||||
parameter DATA_O_WIDTH = 18,
|
||||
|
||||
parameter FREQ_WORD_WIDTH = 32,
|
||||
parameter FREQ_WORD_LOWER = -4194304,
|
||||
parameter FREQ_WORD_UPPER = 4194303,
|
||||
parameter FREQ_WORD_STEP = 1024,
|
||||
|
||||
parameter MAX_DMF_NUM = 64,
|
||||
parameter CHANNEL_NUM = 4,
|
||||
|
||||
// length of pseudorandom bit sequence, need to be a power of 2
|
||||
parameter PRBS_LEN = 128,
|
||||
// interpolation of input signal, need to be a power of 2
|
||||
parameter INTERP_RATE = 8,
|
||||
// signal processing interpolation, need to be a power of 2
|
||||
parameter PROCESS_INTERP = 2,
|
||||
// possible position of pn code
|
||||
parameter PRBS_POS = PRBS_LEN*PROCESS_INTERP
|
||||
)
|
||||
(
|
||||
// clock & reset
|
||||
input clk ,
|
||||
input rst ,
|
||||
|
||||
// module enable switch
|
||||
input freq_comp_start ,
|
||||
output freq_comp_busy ,
|
||||
|
||||
// input data
|
||||
input rx_data_valid ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch1_i ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch1_q ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch2_i ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch2_q ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch3_i ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch3_q ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch4_i ,
|
||||
input [DATA_I_WIDTH-1 : 0] rx_ch4_q ,
|
||||
|
||||
// configuration
|
||||
input [$clog2(MAX_DMF_NUM)-1 : 0] dmf_num_per_ch ,
|
||||
|
||||
input [FREQ_WORD_WIDTH-1 : 0] freq_manual ,
|
||||
input freq_manual_en ,
|
||||
|
||||
// output frequency result
|
||||
output [FREQ_WORD_WIDTH-1 : 0] freq_target ,
|
||||
output freq_target_valid ,
|
||||
|
||||
// output dmf result
|
||||
output ch_peak_valid ,
|
||||
|
||||
output [DATA_O_WIDTH-1 : 0] ch1_peak_value_abs ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch1_peak_value_i ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch1_peak_value_q ,
|
||||
output [$clog2(PRBS_POS)-1 : 0] ch1_peak_index ,
|
||||
|
||||
output [DATA_O_WIDTH-1 : 0] ch2_peak_value_abs ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch2_peak_value_i ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch2_peak_value_q ,
|
||||
output [$clog2(PRBS_POS)-1 : 0] ch2_peak_index ,
|
||||
|
||||
output [DATA_O_WIDTH-1 : 0] ch3_peak_value_abs ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch3_peak_value_i ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch3_peak_value_q ,
|
||||
output [$clog2(PRBS_POS)-1 : 0] ch3_peak_index ,
|
||||
|
||||
output [DATA_O_WIDTH-1 : 0] ch4_peak_value_abs ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch4_peak_value_i ,
|
||||
output [DATA_O_WIDTH-1 : 0] ch4_peak_value_q ,
|
||||
output [$clog2(PRBS_POS)-1 : 0] ch4_peak_index
|
||||
);
|
||||
|
||||
localparam STATE_NUM = 5;
|
||||
localparam [$clog2(STATE_NUM)-1:0]
|
||||
STATE_IDLE = 0,
|
||||
STATE_FREQ_SW = 1,
|
||||
STATE_FREQ_DMF = 2,
|
||||
STATE_CH_SW = 3,
|
||||
STATE_CH_DMF = 4;
|
||||
|
||||
localparam FREQ_WORD_LOWER_WIDTH = $clog2(FREQ_WORD_LOWER);
|
||||
localparam FREQ_WORD_UPPER_WIDTH = $clog2(FREQ_WORD_UPPER);
|
||||
localparam FREQ_WORD_STEP_WIDTH = $clog2(FREQ_WORD_STEP );
|
||||
|
||||
localparam DDS_DATA_WIDTH = 8;
|
||||
localparam STABLE_COUNT_MOD = 16;
|
||||
|
||||
localparam CMPY_A_WIDTH = DATA_I_WIDTH;
|
||||
localparam CMPY_B_WIDTH = DDS_DATA_WIDTH;
|
||||
localparam CMPY_P_WIDTH = CMPY_A_WIDTH+CMPY_B_WIDTH;
|
||||
localparam CMPY_P_FULL_WIDTH = CMPY_P_WIDTH+1;
|
||||
localparam CMPY_OUTPUT_WIDTH = DATA_I_WIDTH;
|
||||
|
||||
genvar m;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////// Center State Control /////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// current and next state
|
||||
reg [$clog2(STATE_NUM)-1 : 0] state_curr = STATE_IDLE;
|
||||
reg [$clog2(STATE_NUM)-1 : 0] state_next = STATE_IDLE;
|
||||
|
||||
// edge detection
|
||||
reg freq_comp_start_d1 = 'b0;
|
||||
reg freq_comp_start_d2 = 'b0;
|
||||
|
||||
// stable counter, for dds frequency and complex multiplier to be ready
|
||||
reg [$clog2(STABLE_COUNT_MOD)-1 : 0] cnt_stable = 'b0;
|
||||
|
||||
// dmf finish indicator
|
||||
wire dmf_freq_last_peak_valid;
|
||||
wire dmf_ch_last_peak_valid [0 : CHANNEL_NUM-1];
|
||||
|
||||
// current frequency word
|
||||
reg signed [FREQ_WORD_WIDTH-1 : 0] freq_word = 'b0;
|
||||
|
||||
// frequency scan finish indicator
|
||||
reg freq_end = 'b0;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 1st always block, sequential state transition
|
||||
// -----------------------------------------------------------------------------
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
state_curr <= STATE_IDLE;
|
||||
end
|
||||
else begin
|
||||
state_curr <= state_next;
|
||||
end
|
||||
end
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 2nd always block, combinational condition judgment
|
||||
// -----------------------------------------------------------------------------
|
||||
always @(*) begin
|
||||
case (state_curr)
|
||||
STATE_IDLE: begin
|
||||
if (rx_data_valid && (freq_comp_start_d2 != freq_comp_start_d1)) begin
|
||||
// when input data valid & either edge of start signal is detected
|
||||
state_next = STATE_FREQ_SW;
|
||||
end
|
||||
else begin
|
||||
state_next = STATE_IDLE;
|
||||
end
|
||||
end
|
||||
STATE_FREQ_SW: begin
|
||||
if (cnt_stable == STABLE_COUNT_MOD-1) begin
|
||||
// wait util dds frequency and complex multiplier is ready
|
||||
state_next = STATE_FREQ_DMF;
|
||||
end
|
||||
else begin
|
||||
state_next = STATE_FREQ_SW;
|
||||
end
|
||||
end
|
||||
STATE_FREQ_DMF: begin
|
||||
if (dmf_freq_last_peak_valid) begin
|
||||
// when dmf is done, check if frequency compensation is over
|
||||
state_next = freq_end ? STATE_CH_SW : STATE_FREQ_SW;
|
||||
end
|
||||
else begin
|
||||
state_next = STATE_FREQ_DMF;
|
||||
end
|
||||
end
|
||||
STATE_CH_SW : begin
|
||||
if (cnt_stable == STABLE_COUNT_MOD-1) begin
|
||||
// wait util dds frequency and complex multiplier is ready
|
||||
state_next = STATE_CH_DMF;
|
||||
end
|
||||
else begin
|
||||
state_next = STATE_CH_SW;
|
||||
end
|
||||
end
|
||||
STATE_CH_DMF : begin
|
||||
if (dmf_ch_last_peak_valid[0]) begin
|
||||
// wait until dmf is done
|
||||
state_next = STATE_IDLE;
|
||||
end
|
||||
else begin
|
||||
state_next = STATE_CH_DMF;
|
||||
end
|
||||
end
|
||||
default: begin
|
||||
// hold
|
||||
state_next = state_next;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 3rd always block, the sequential FSM output
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// edge detection
|
||||
// -----------------------------------------------------------------------------
|
||||
always @(posedge clk) begin
|
||||
freq_comp_start_d1 <= freq_comp_start;
|
||||
freq_comp_start_d2 <= freq_comp_start_d1;
|
||||
end
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// busy indicator
|
||||
// -----------------------------------------------------------------------------
|
||||
reg freq_comp_busy_buf = 'b0;
|
||||
|
||||
assign freq_comp_busy = freq_comp_busy_buf;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
freq_comp_busy_buf <= 'b0;
|
||||
end
|
||||
else begin
|
||||
case (state_next)
|
||||
// change between states
|
||||
STATE_IDLE : freq_comp_busy_buf <= 1'b0;
|
||||
STATE_FREQ_SW : freq_comp_busy_buf <= 1'b1;
|
||||
STATE_FREQ_DMF: freq_comp_busy_buf <= 1'b1;
|
||||
STATE_CH_SW : freq_comp_busy_buf <= 1'b1;
|
||||
STATE_CH_DMF : freq_comp_busy_buf <= 1'b1;
|
||||
default : freq_comp_busy_buf <= freq_comp_busy_buf;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// stable counter, for dds frequency and complex multiplier to be ready
|
||||
// -----------------------------------------------------------------------------
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
cnt_stable <= 'b0;
|
||||
end
|
||||
else case (state_curr)
|
||||
// change within one state
|
||||
STATE_FREQ_SW: cnt_stable <= cnt_stable + 1'b1;
|
||||
STATE_CH_SW : cnt_stable <= cnt_stable + 1'b1;
|
||||
default : cnt_stable <= 'b0;
|
||||
endcase
|
||||
end
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// frequency word control
|
||||
// -----------------------------------------------------------------------------
|
||||
// record the frequency word generating the maximum peak
|
||||
reg [FREQ_WORD_WIDTH-1 : 0] max_freq_peak_freq = 'b0;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
freq_word <= FREQ_WORD_LOWER;
|
||||
end
|
||||
else case (state_next)
|
||||
// change between states
|
||||
STATE_FREQ_SW: begin
|
||||
if (state_curr == STATE_IDLE) begin
|
||||
// initialization
|
||||
freq_word <= FREQ_WORD_LOWER;
|
||||
end
|
||||
else if (state_curr == STATE_FREQ_DMF) begin
|
||||
// switch frequency
|
||||
freq_word <= freq_word + FREQ_WORD_STEP;
|
||||
end
|
||||
end
|
||||
STATE_CH_SW: begin
|
||||
freq_word <= (freq_manual_en) ? freq_manual : max_freq_peak_freq;
|
||||
end
|
||||
default: begin
|
||||
freq_word <= freq_word;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// frequency scan finish indicator
|
||||
// -----------------------------------------------------------------------------
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
freq_end <= 'b0;
|
||||
end
|
||||
else if (freq_word > FREQ_WORD_UPPER) begin
|
||||
freq_end <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
freq_end <= 'b0;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////// DDS //////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
localparam AXIS_FREQ_WORD_WIDTH = 8*((FREQ_WORD_WIDTH-1)/8+1);
|
||||
localparam AXIS_DDS_DATA_WIDTH = 8*((DDS_DATA_WIDTH-1)/8+1);
|
||||
|
||||
wire [DDS_DATA_WIDTH-1:0] sin_dds, cos_dds;
|
||||
wire dds_valid;
|
||||
|
||||
wire dds_s_axis_config_tvalid;
|
||||
wire [AXIS_FREQ_WORD_WIDTH-1 : 0] dds_s_axis_config_ttdata;
|
||||
wire dds_m_axis_data_tvalid ;
|
||||
wire [2*AXIS_DDS_DATA_WIDTH-1 : 0] dds_m_axis_data_ttdata ;
|
||||
|
||||
assign dds_s_axis_config_tvalid = freq_comp_busy;
|
||||
assign dds_s_axis_config_ttdata = freq_word;
|
||||
assign dds_valid = dds_m_axis_data_tvalid;
|
||||
assign {sin_dds,cos_dds} = dds_m_axis_data_ttdata;
|
||||
|
||||
dds_32b_8b u_dds_bb_shift
|
||||
(
|
||||
.aclk (clk ), // input wire aclk
|
||||
.s_axis_config_tvalid (dds_s_axis_config_tvalid ), // input wire s_axis_config_tvalid
|
||||
.s_axis_config_tdata (dds_s_axis_config_ttdata ), // input wire [31 : 0] s_axis_config_tdata
|
||||
.m_axis_data_tvalid (dds_m_axis_data_tvalid ), // output wire m_axis_data_tvalid
|
||||
.m_axis_data_tdata (dds_m_axis_data_ttdata ) // output wire [15 : 0] m_axis_data_tdata
|
||||
);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///////////// Complex Multiplier for Frequency Shift Compensation //////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
localparam AXIS_CMPY_A_WIDTH = 8*((CMPY_A_WIDTH-1)/8+1);
|
||||
localparam AXIS_CMPY_B_WIDTH = 8*((CMPY_B_WIDTH-1)/8+1);
|
||||
localparam AXIS_CMPY_P_WIDTH = 8*((CMPY_P_FULL_WIDTH-1)/8+1);
|
||||
|
||||
// input data
|
||||
wire [DATA_I_WIDTH-1 : 0] din_freq_real;
|
||||
wire [DATA_I_WIDTH-1 : 0] din_freq_imag;
|
||||
|
||||
assign din_freq_real = rx_ch2_i;
|
||||
assign din_freq_imag = rx_ch2_q;
|
||||
|
||||
// cmpy
|
||||
wire [CMPY_OUTPUT_WIDTH-1 : 0] din_freq_cxr_real;
|
||||
wire [CMPY_OUTPUT_WIDTH-1 : 0] din_freq_cxr_imag;
|
||||
wire din_freq_cxr_valid; // declared ahead
|
||||
|
||||
wire cmpy_a_valid;
|
||||
wire [2*AXIS_CMPY_A_WIDTH-1 : 0] cmpy_a ;
|
||||
wire cmpy_b_valid;
|
||||
wire [2*AXIS_CMPY_B_WIDTH-1 : 0] cmpy_b ;
|
||||
wire cmpy_p_valid;
|
||||
wire [2*AXIS_CMPY_P_WIDTH-1 : 0] cmpy_p ;
|
||||
|
||||
assign cmpy_a_valid = freq_comp_busy;
|
||||
assign cmpy_b_valid = dds_valid;
|
||||
assign din_freq_cxr_valid = cmpy_p_valid;
|
||||
|
||||
// sign bit extension to fit axis 8-bit data format
|
||||
assign cmpy_a = {{(AXIS_CMPY_A_WIDTH-CMPY_A_WIDTH){din_freq_imag[DATA_I_WIDTH-1]}},din_freq_imag,
|
||||
{(AXIS_CMPY_A_WIDTH-CMPY_A_WIDTH){din_freq_real[DATA_I_WIDTH-1]}},din_freq_real};
|
||||
assign cmpy_b = {{(AXIS_CMPY_B_WIDTH-CMPY_B_WIDTH){sin_dds[DDS_DATA_WIDTH-1]}},sin_dds,
|
||||
{(AXIS_CMPY_B_WIDTH-CMPY_B_WIDTH){cos_dds[DDS_DATA_WIDTH-1]}},cos_dds};
|
||||
|
||||
if (CMPY_OUTPUT_WIDTH > CMPY_P_WIDTH) begin
|
||||
// append zeros
|
||||
assign din_freq_cxr_real = {cmpy_p[0 +: CMPY_P_WIDTH],{(CMPY_OUTPUT_WIDTH-CMPY_P_WIDTH){1'b0}}};
|
||||
assign din_freq_cxr_imag = {cmpy_p[AXIS_CMPY_P_WIDTH +: CMPY_P_WIDTH],{(CMPY_OUTPUT_WIDTH-CMPY_P_WIDTH){1'b0}}};
|
||||
end
|
||||
else begin
|
||||
// truncate valid msb
|
||||
assign din_freq_cxr_real = cmpy_p[CMPY_P_WIDTH-1 -: CMPY_OUTPUT_WIDTH];
|
||||
assign din_freq_cxr_imag = cmpy_p[AXIS_CMPY_P_WIDTH+CMPY_P_WIDTH-1 -: CMPY_OUTPUT_WIDTH];
|
||||
end
|
||||
|
||||
cmpy_12x8 u_cmpy_12x8_freq
|
||||
(
|
||||
.aclk (clk ), // input wire aclk
|
||||
.s_axis_a_tvalid (cmpy_a_valid ), // input wire s_axis_a_tvalid
|
||||
.s_axis_a_tdata (cmpy_a ), // input wire [31 : 0] s_axis_a_tdata
|
||||
.s_axis_b_tvalid (cmpy_b_valid ), // input wire s_axis_b_tvalid
|
||||
.s_axis_b_tdata (cmpy_b ), // input wire [15 : 0] s_axis_b_tdata
|
||||
.m_axis_dout_tvalid (cmpy_p_valid ), // output wire m_axis_dout_tvalid
|
||||
.m_axis_dout_tdata (cmpy_p ) // output wire [47 : 0] m_axis_dout_tdata
|
||||
);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/////////// Digital Matched Filter for Frequency Shift Compensation ////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
reg dmf_freq_start = 'b0;
|
||||
wire dmf_freq_busy;
|
||||
|
||||
wire dmf_freq_din_valid;
|
||||
wire [DATA_I_WIDTH-1 : 0] dmf_freq_din_real;
|
||||
wire [DATA_I_WIDTH-1 : 0] dmf_freq_din_imag;
|
||||
|
||||
wire dmf_freq_peak_valid;
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_freq_peak_value_abs;
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_freq_peak_value_i;
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_freq_peak_value_q;
|
||||
wire [$clog2(PRBS_POS)-1 : 0] dmf_freq_peak_index;
|
||||
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_freq_moduli_abs;
|
||||
|
||||
assign dmf_freq_din_valid = din_freq_cxr_valid;
|
||||
|
||||
if (DATA_I_WIDTH > CMPY_OUTPUT_WIDTH) begin
|
||||
// append zeros
|
||||
assign dmf_freq_din_real = {din_freq_cxr_real,{(DATA_I_WIDTH-CMPY_OUTPUT_WIDTH){1'b0}}};
|
||||
assign dmf_freq_din_imag = {din_freq_cxr_imag,{(DATA_I_WIDTH-CMPY_OUTPUT_WIDTH){1'b0}}};
|
||||
end
|
||||
else begin
|
||||
// truncate msb
|
||||
assign dmf_freq_din_real = din_freq_cxr_real[CMPY_OUTPUT_WIDTH-1 -: DATA_I_WIDTH];
|
||||
assign dmf_freq_din_imag = din_freq_cxr_imag[CMPY_OUTPUT_WIDTH-1 -: DATA_I_WIDTH];
|
||||
end
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// dmf start control
|
||||
// -----------------------------------------------------------------------------
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
dmf_freq_start <= 'b0;
|
||||
end
|
||||
else case (state_next)
|
||||
STATE_FREQ_DMF: dmf_freq_start <= (state_curr == STATE_FREQ_SW) ? ~dmf_freq_start : dmf_freq_start;
|
||||
default: dmf_freq_start <= dmf_freq_start;
|
||||
endcase
|
||||
end
|
||||
|
||||
// dmf instantiation
|
||||
rx_dmf #(
|
||||
.PRBS_LEN (PRBS_LEN ),
|
||||
.INTERP_RATE (INTERP_RATE ),
|
||||
.PROCESS_INTERP (PROCESS_INTERP ),
|
||||
.DATA_I_WIDTH (DATA_I_WIDTH ),
|
||||
.DATA_O_WIDTH (DATA_O_WIDTH )
|
||||
) u_rx_dmf_freq
|
||||
(
|
||||
.clk (clk ),
|
||||
.rst (rst ),
|
||||
|
||||
.dmf_start (dmf_freq_start ),
|
||||
.dmf_busy (dmf_freq_busy ),
|
||||
|
||||
.dmf_num (1 ),
|
||||
|
||||
.din_valid (dmf_freq_din_valid ),
|
||||
.din_real (dmf_freq_din_real ),
|
||||
.din_imag (dmf_freq_din_imag ),
|
||||
|
||||
.peak_valid (dmf_freq_peak_valid ),
|
||||
.last_peak_valid(dmf_freq_last_peak_valid ),
|
||||
.peak_value_abs (dmf_freq_peak_value_abs ),
|
||||
.peak_value_i (dmf_freq_peak_value_i ),
|
||||
.peak_value_q (dmf_freq_peak_value_q ),
|
||||
.peak_index (dmf_freq_peak_index )
|
||||
);
|
||||
|
||||
assign dmf_freq_moduli_abs = u_rx_dmf_freq.moduli_abs;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// peak finding at different frequencies
|
||||
// -----------------------------------------------------------------------------
|
||||
reg max_freq_peak_valid = 'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] max_freq_peak_value_abs = 'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] max_freq_peak_value_i = 'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] max_freq_peak_value_q = 'b0;
|
||||
reg [$clog2(PRBS_POS)-1 : 0] max_freq_peak_index = 'b0;
|
||||
|
||||
// output result to port
|
||||
assign freq_target_valid = max_freq_peak_valid;
|
||||
assign freq_target = max_freq_peak_freq;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
max_freq_peak_valid <= 'b0;
|
||||
max_freq_peak_value_abs <= 'b0;
|
||||
max_freq_peak_value_i <= 'b0;
|
||||
max_freq_peak_value_q <= 'b0;
|
||||
max_freq_peak_index <= 'b0;
|
||||
max_freq_peak_freq <= 'b0;
|
||||
end
|
||||
else case (state_next)
|
||||
STATE_IDLE: begin
|
||||
max_freq_peak_valid <= 'b0;
|
||||
max_freq_peak_value_abs <= 'b0;
|
||||
max_freq_peak_value_i <= 'b0;
|
||||
max_freq_peak_value_q <= 'b0;
|
||||
max_freq_peak_index <= 'b0;
|
||||
max_freq_peak_freq <= 'b0;
|
||||
end
|
||||
STATE_FREQ_SW: begin
|
||||
if ((state_curr == STATE_FREQ_DMF) && (dmf_freq_peak_value_abs > max_freq_peak_value_abs)) begin
|
||||
// at the end of [STATE_FREQ_DMF] state, check if peak is valid
|
||||
max_freq_peak_value_abs <= dmf_freq_peak_value_abs;
|
||||
max_freq_peak_value_i <= dmf_freq_peak_value_i ;
|
||||
max_freq_peak_value_q <= dmf_freq_peak_value_q ;
|
||||
max_freq_peak_index <= dmf_freq_peak_index ;
|
||||
max_freq_peak_freq <= freq_word ;
|
||||
end
|
||||
else begin
|
||||
// hold otherwise
|
||||
max_freq_peak_value_abs <= max_freq_peak_value_abs;
|
||||
max_freq_peak_value_i <= max_freq_peak_value_i ;
|
||||
max_freq_peak_value_q <= max_freq_peak_value_q ;
|
||||
max_freq_peak_index <= max_freq_peak_index ;
|
||||
max_freq_peak_freq <= max_freq_peak_freq ;
|
||||
end
|
||||
end
|
||||
STATE_CH_SW: begin
|
||||
if (state_curr == STATE_FREQ_DMF) begin
|
||||
// indicate the target frequency word is found
|
||||
max_freq_peak_valid <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
max_freq_peak_valid <= 'b0;
|
||||
end
|
||||
end
|
||||
default: begin
|
||||
max_freq_peak_valid <= 'b0;
|
||||
max_freq_peak_value_abs <= max_freq_peak_value_abs;
|
||||
max_freq_peak_value_i <= max_freq_peak_value_i ;
|
||||
max_freq_peak_value_q <= max_freq_peak_value_q ;
|
||||
max_freq_peak_index <= max_freq_peak_index ;
|
||||
max_freq_peak_freq <= max_freq_peak_freq ;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////// Complex Multiplier for Signal Channels ////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// cmpy input
|
||||
wire [CMPY_OUTPUT_WIDTH-1 : 0] din_ch_real [0 : CHANNEL_NUM-1];
|
||||
wire [CMPY_OUTPUT_WIDTH-1 : 0] din_ch_imag [0 : CHANNEL_NUM-1];
|
||||
|
||||
assign din_ch_real[0] = rx_ch1_i;
|
||||
assign din_ch_real[1] = rx_ch2_i;
|
||||
assign din_ch_real[2] = rx_ch3_i;
|
||||
assign din_ch_real[3] = rx_ch4_i;
|
||||
assign din_ch_imag[0] = rx_ch1_q;
|
||||
assign din_ch_imag[1] = rx_ch2_q;
|
||||
assign din_ch_imag[2] = rx_ch3_q;
|
||||
assign din_ch_imag[3] = rx_ch4_q;
|
||||
|
||||
// cmpy output
|
||||
wire [CMPY_OUTPUT_WIDTH-1 : 0] din_ch_cxr_real [0 : CHANNEL_NUM-1];
|
||||
wire [CMPY_OUTPUT_WIDTH-1 : 0] din_ch_cxr_imag [0 : CHANNEL_NUM-1];
|
||||
wire din_ch_cxr_valid [0 : CHANNEL_NUM-1];
|
||||
|
||||
generate
|
||||
for (m = 0; m < CHANNEL_NUM; m = m + 1) begin: cmpy_ch
|
||||
|
||||
wire cmpy_a_valid;
|
||||
wire [2*AXIS_CMPY_A_WIDTH-1 : 0] cmpy_a ;
|
||||
wire cmpy_b_valid;
|
||||
wire [2*AXIS_CMPY_B_WIDTH-1 : 0] cmpy_b ;
|
||||
wire cmpy_p_valid;
|
||||
wire [2*AXIS_CMPY_P_WIDTH-1 : 0] cmpy_p ;
|
||||
|
||||
assign cmpy_a_valid = freq_comp_busy;
|
||||
assign cmpy_b_valid = dds_valid;
|
||||
assign din_ch_cxr_valid[m] = cmpy_p_valid;
|
||||
|
||||
// sign bit extension to fit axis 8-bit data format
|
||||
assign cmpy_a = {{(AXIS_CMPY_A_WIDTH-CMPY_A_WIDTH){din_ch_imag[m][DATA_I_WIDTH-1]}},din_ch_imag[m],
|
||||
{(AXIS_CMPY_A_WIDTH-CMPY_A_WIDTH){din_ch_real[m][DATA_I_WIDTH-1]}},din_ch_real[m]};
|
||||
assign cmpy_b = {{(AXIS_CMPY_B_WIDTH-CMPY_B_WIDTH){sin_dds[DDS_DATA_WIDTH-1]}},sin_dds,
|
||||
{(AXIS_CMPY_B_WIDTH-CMPY_B_WIDTH){cos_dds[DDS_DATA_WIDTH-1]}},cos_dds};
|
||||
|
||||
if (CMPY_OUTPUT_WIDTH > CMPY_P_WIDTH) begin
|
||||
// append zeros
|
||||
assign din_ch_cxr_real[m] = {cmpy_p[0 +: CMPY_P_WIDTH],{(CMPY_OUTPUT_WIDTH-CMPY_P_WIDTH){1'b0}}};
|
||||
assign din_ch_cxr_imag[m] = {cmpy_p[AXIS_CMPY_P_WIDTH +: CMPY_P_WIDTH],{(CMPY_OUTPUT_WIDTH-CMPY_P_WIDTH){1'b0}}};
|
||||
end
|
||||
else begin
|
||||
// truncate valid msb
|
||||
assign din_ch_cxr_real[m] = cmpy_p[CMPY_P_WIDTH-1 -: CMPY_OUTPUT_WIDTH];
|
||||
assign din_ch_cxr_imag[m] = cmpy_p[AXIS_CMPY_P_WIDTH+CMPY_P_WIDTH-1 -: CMPY_OUTPUT_WIDTH];
|
||||
end
|
||||
|
||||
cmpy_12x8 u_cmpy_12x8_ch
|
||||
(
|
||||
.aclk (clk ), // input wire aclk
|
||||
.s_axis_a_tvalid (cmpy_a_valid ), // input wire s_axis_a_tvalid
|
||||
.s_axis_a_tdata (cmpy_a ), // input wire [31 : 0] s_axis_a_tdata
|
||||
.s_axis_b_tvalid (cmpy_b_valid ), // input wire s_axis_b_tvalid
|
||||
.s_axis_b_tdata (cmpy_b ), // input wire [15 : 0] s_axis_b_tdata
|
||||
.m_axis_dout_tvalid (cmpy_p_valid ), // output wire m_axis_dout_tvalid
|
||||
.m_axis_dout_tdata (cmpy_p ) // output wire [47 : 0] m_axis_dout_tdata
|
||||
);
|
||||
|
||||
end
|
||||
endgenerate
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////// Digital Matched Filter for Signal Channels //////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
reg dmf_ch_start = 'b0;
|
||||
wire dmf_ch_busy [0 : CHANNEL_NUM-1];
|
||||
|
||||
wire dmf_ch_din_valid [0 : CHANNEL_NUM-1];
|
||||
wire [DATA_I_WIDTH-1 : 0] dmf_ch_din_real [0 : CHANNEL_NUM-1];
|
||||
wire [DATA_I_WIDTH-1 : 0] dmf_ch_din_imag [0 : CHANNEL_NUM-1];
|
||||
|
||||
wire dmf_ch_peak_valid [0 : CHANNEL_NUM-1];
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_ch_peak_value_abs [0 : CHANNEL_NUM-1];
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_ch_peak_value_i [0 : CHANNEL_NUM-1];
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_ch_peak_value_q [0 : CHANNEL_NUM-1];
|
||||
wire [$clog2(PRBS_POS)-1 : 0] dmf_ch_peak_index [0 : CHANNEL_NUM-1];
|
||||
|
||||
wire [DATA_O_WIDTH-1 : 0] dmf_ch_moduli_abs [0 : CHANNEL_NUM-1];
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// dmf start control
|
||||
// -----------------------------------------------------------------------------
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
dmf_ch_start <= 'b0;
|
||||
end
|
||||
else case (state_next)
|
||||
STATE_CH_DMF: dmf_ch_start <= (state_curr == STATE_CH_SW) ? ~dmf_ch_start : dmf_ch_start;
|
||||
default: dmf_ch_start <= dmf_ch_start;
|
||||
endcase
|
||||
end
|
||||
|
||||
generate
|
||||
for (m = 0; m < CHANNEL_NUM; m = m + 1) begin: dmf_ch
|
||||
|
||||
assign dmf_ch_din_valid[m] = din_ch_cxr_valid[m];
|
||||
|
||||
if (DATA_I_WIDTH > CMPY_OUTPUT_WIDTH) begin
|
||||
// append zeros
|
||||
assign dmf_ch_din_real[m] = {din_ch_cxr_real[m],{(DATA_I_WIDTH-CMPY_OUTPUT_WIDTH){1'b0}}};
|
||||
assign dmf_ch_din_imag[m] = {din_ch_cxr_imag[m],{(DATA_I_WIDTH-CMPY_OUTPUT_WIDTH){1'b0}}};
|
||||
end
|
||||
else begin
|
||||
// truncate msb
|
||||
assign dmf_ch_din_real[m] = din_ch_cxr_real[m][CMPY_OUTPUT_WIDTH-1 -: DATA_I_WIDTH];
|
||||
assign dmf_ch_din_imag[m] = din_ch_cxr_imag[m][CMPY_OUTPUT_WIDTH-1 -: DATA_I_WIDTH];
|
||||
end
|
||||
|
||||
// dmf instantiation
|
||||
rx_dmf #(
|
||||
.PRBS_LEN (PRBS_LEN ),
|
||||
.INTERP_RATE (INTERP_RATE ),
|
||||
.PROCESS_INTERP (PROCESS_INTERP ),
|
||||
.DATA_I_WIDTH (DATA_I_WIDTH ),
|
||||
.DATA_O_WIDTH (DATA_O_WIDTH )
|
||||
) u_rx_dmf_ch
|
||||
(
|
||||
.clk (clk ),
|
||||
.rst (rst ),
|
||||
|
||||
.dmf_start (dmf_ch_start ),
|
||||
.dmf_busy (dmf_ch_busy[m] ),
|
||||
|
||||
.dmf_num (dmf_num_per_ch ),
|
||||
|
||||
.din_valid (dmf_ch_din_valid[m] ),
|
||||
.din_real (dmf_ch_din_real[m] ),
|
||||
.din_imag (dmf_ch_din_imag[m] ),
|
||||
|
||||
.peak_valid (dmf_ch_peak_valid[m] ),
|
||||
.last_peak_valid(dmf_ch_last_peak_valid[m] ),
|
||||
.peak_value_abs (dmf_ch_peak_value_abs[m] ),
|
||||
.peak_value_i (dmf_ch_peak_value_i[m] ),
|
||||
.peak_value_q (dmf_ch_peak_value_q[m] ),
|
||||
.peak_index (dmf_ch_peak_index[m] )
|
||||
);
|
||||
|
||||
assign dmf_ch_moduli_abs[m] = u_rx_dmf_ch.moduli_abs;
|
||||
|
||||
end
|
||||
endgenerate
|
||||
|
||||
assign ch_peak_valid = dmf_ch_peak_valid[0];
|
||||
|
||||
assign ch1_peak_value_abs = dmf_ch_peak_value_abs[0];
|
||||
assign ch1_peak_value_i = dmf_ch_peak_value_i[0] ;
|
||||
assign ch1_peak_value_q = dmf_ch_peak_value_q [0] ;
|
||||
assign ch1_peak_index = dmf_ch_peak_index[0] ;
|
||||
|
||||
assign ch2_peak_value_abs = dmf_ch_peak_value_abs[1];
|
||||
assign ch2_peak_value_i = dmf_ch_peak_value_i[1] ;
|
||||
assign ch2_peak_value_q = dmf_ch_peak_value_q [1] ;
|
||||
assign ch2_peak_index = dmf_ch_peak_index[1] ;
|
||||
|
||||
assign ch3_peak_value_abs = dmf_ch_peak_value_abs[2];
|
||||
assign ch3_peak_value_i = dmf_ch_peak_value_i[2] ;
|
||||
assign ch3_peak_value_q = dmf_ch_peak_value_q [2] ;
|
||||
assign ch3_peak_index = dmf_ch_peak_index[2] ;
|
||||
|
||||
assign ch4_peak_value_abs = dmf_ch_peak_value_abs[3];
|
||||
assign ch4_peak_value_i = dmf_ch_peak_value_i[3] ;
|
||||
assign ch4_peak_value_q = dmf_ch_peak_value_q [3] ;
|
||||
assign ch4_peak_index = dmf_ch_peak_index[3] ;
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,167 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 2023/05/06 15:37:29
|
||||
// Design Name:
|
||||
// Module Name: rf_auto_switch_freq
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module rf_auto_switch_freq(
|
||||
input clk ,
|
||||
input rst ,
|
||||
// vio control
|
||||
input start , // rise-edge active, if start, change freq word to the first
|
||||
input rf_ctrl_mode , // 1 : auto switch, 0 : manual switch
|
||||
input switch_next_freq , // rise-edge active
|
||||
input switch_last_freq , // rise-edge active
|
||||
input [15:0] cnt_valid_to_switch , // clock number from valid to switch
|
||||
// input
|
||||
input [15:0] freq_hop_words_vio ,
|
||||
input hop_words_valid_vio ,
|
||||
input freq_hop_switch_vio ,
|
||||
// output
|
||||
output reg [15:0] freq_hop_words_auto = 11'd0 ,
|
||||
output reg hop_words_valid_auto = 1'd0 ,
|
||||
output reg freq_hop_switch_auto = 1'd0
|
||||
);
|
||||
|
||||
//************************* rise-edge detect ***********************************
|
||||
reg start_d1 = 1'b0;
|
||||
reg start_d2 = 1'b0;
|
||||
reg start_pulse = 1'b0;
|
||||
reg switch_next_freq_d1 = 1'b0;
|
||||
reg switch_next_freq_d2 = 1'b0;
|
||||
reg [9:0] switch_next_freq_pulse = 10'd0;
|
||||
reg switch_last_freq_d1 = 1'b0;
|
||||
reg switch_last_freq_d2 = 1'b0;
|
||||
reg [9:0] switch_last_freq_pulse = 10'd0;
|
||||
always @ (posedge clk)
|
||||
if(rst) begin
|
||||
start_d1 <= 1'b0;
|
||||
start_d2 <= 1'b0;
|
||||
start_pulse <= 1'b0;
|
||||
switch_next_freq_d1 <= 1'b0;
|
||||
switch_next_freq_d2 <= 1'b0;
|
||||
switch_next_freq_pulse <= 10'd0;
|
||||
switch_last_freq_d1 <= 1'b0;
|
||||
switch_last_freq_d2 <= 1'b0;
|
||||
switch_last_freq_pulse <= 10'd0;
|
||||
end else begin
|
||||
start_d1 <= start;
|
||||
start_d2 <= start_d1;
|
||||
start_pulse <= start_d1 & ~start_d2;
|
||||
switch_next_freq_d1 <= switch_next_freq;
|
||||
switch_next_freq_d2 <= switch_next_freq_d1;
|
||||
switch_next_freq_pulse[0] <= switch_next_freq_d1 & ~switch_next_freq_d2;
|
||||
switch_next_freq_pulse[9:1] <= switch_next_freq_pulse[8:0];
|
||||
switch_last_freq_d1 <= switch_last_freq;
|
||||
switch_last_freq_d2 <= switch_last_freq_d1;
|
||||
switch_last_freq_pulse[0] <= switch_last_freq_d1 & ~switch_last_freq_d2;
|
||||
switch_last_freq_pulse[9:1] <= switch_last_freq_pulse[8:0];
|
||||
end
|
||||
|
||||
//******************** local freq word control *********************************
|
||||
reg [15:0] local_freq_word = 16'd0;
|
||||
reg local_freq_word_valid = 1'b0;
|
||||
reg local_freq_word_switch = 1'b0;
|
||||
reg [7:0] freq_word_cnt = 8'd0; // range 0 -> 80
|
||||
wire [15:0] rom_freq_word_dout;
|
||||
// 2 clock latency
|
||||
rom_freq_word rom_freq_word_inst(
|
||||
.clka (clk ),
|
||||
.addra (freq_word_cnt[6:0] ),
|
||||
.douta (rom_freq_word_dout )
|
||||
);
|
||||
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
freq_word_cnt <= 8'd0;
|
||||
else if(freq_word_cnt == 8'd80 && switch_next_freq_pulse[0])
|
||||
freq_word_cnt <= 8'd0;
|
||||
else if(freq_word_cnt == 8'd0 && switch_last_freq_pulse[0])
|
||||
freq_word_cnt <= 8'd80;
|
||||
else if(switch_next_freq_pulse[0])
|
||||
freq_word_cnt <= freq_word_cnt + 1'b1;
|
||||
else if(switch_last_freq_pulse[0])
|
||||
freq_word_cnt <= freq_word_cnt - 1'b1;
|
||||
else
|
||||
freq_word_cnt <= freq_word_cnt;
|
||||
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
local_freq_word_valid <= 1'b0;
|
||||
else if(switch_next_freq_pulse[4] | switch_last_freq_pulse[4])
|
||||
local_freq_word_valid <= 1'b1;
|
||||
else
|
||||
local_freq_word_valid <= 1'b0;
|
||||
|
||||
reg [15:0] freq_word_valid_cnt = 16'd0;
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
freq_word_valid_cnt <= 16'd0;
|
||||
else if(freq_word_valid_cnt == cnt_valid_to_switch)
|
||||
freq_word_valid_cnt <= 16'd0;
|
||||
else if(local_freq_word_valid)
|
||||
freq_word_valid_cnt <= freq_word_valid_cnt + 1'b1;
|
||||
else if(freq_word_valid_cnt != 16'd0)
|
||||
freq_word_valid_cnt <= freq_word_valid_cnt + 1'b1;
|
||||
else
|
||||
freq_word_valid_cnt <= freq_word_valid_cnt;
|
||||
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
local_freq_word_switch <= 1'b0;
|
||||
else if(freq_word_valid_cnt == cnt_valid_to_switch)
|
||||
local_freq_word_switch <= ~local_freq_word_switch;
|
||||
else
|
||||
local_freq_word_switch <= local_freq_word_switch;
|
||||
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
local_freq_word <= 16'd0;
|
||||
else
|
||||
local_freq_word <= rom_freq_word_dout;
|
||||
|
||||
//******************** output freq switch signal *******************************
|
||||
// freq_hop_words_auto
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
freq_hop_words_auto <= 11'd0;
|
||||
else if(rf_ctrl_mode)
|
||||
freq_hop_words_auto <= local_freq_word;
|
||||
else
|
||||
freq_hop_words_auto <= freq_hop_words_vio;
|
||||
|
||||
// hop_words_valid_auto
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
hop_words_valid_auto <= 1'b0;
|
||||
else if(rf_ctrl_mode)
|
||||
hop_words_valid_auto <= local_freq_word_valid;
|
||||
else
|
||||
hop_words_valid_auto <= hop_words_valid_vio;
|
||||
|
||||
// freq_hop_switch_auto
|
||||
always @ (posedge clk)
|
||||
if(rst | start_pulse)
|
||||
freq_hop_switch_auto <= 1'b0;
|
||||
else if(rf_ctrl_mode)
|
||||
freq_hop_switch_auto <= local_freq_word_switch;
|
||||
else
|
||||
freq_hop_switch_auto <= freq_hop_switch_vio;
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,471 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
// _ _ ____
|
||||
// | | ___ ___| |__ / ___| __ _ ___
|
||||
// _ | |/ _ \/ __| '_ \ | | _ / _` |/ _ \
|
||||
// | |_| | (_) \__ \ | | | | |_| | (_| | (_) |
|
||||
// \___/ \___/|___/_| |_| \____|\__,_|\___/
|
||||
//
|
||||
// Create Date: 04/25/2023 05:53:44 PM
|
||||
// Design Name:
|
||||
// Module Name: rx_dmf
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module rx_dmf
|
||||
#(
|
||||
// length of pseudorandom bit sequence, need to be a power of 2
|
||||
parameter PRBS_LEN = 128,
|
||||
// interpolation of input signal, need to be a power of 2
|
||||
parameter INTERP_RATE = 8,
|
||||
// signal processing interpolation, need to be a power of 2
|
||||
parameter PROCESS_INTERP = 2,
|
||||
// possible position of pn code
|
||||
parameter PRBS_POS = PRBS_LEN*PROCESS_INTERP,
|
||||
parameter MAX_DMF_NUM = 64,
|
||||
parameter DATA_I_WIDTH = 12,
|
||||
parameter DATA_O_WIDTH = 18
|
||||
)
|
||||
(
|
||||
input clk ,
|
||||
input rst ,
|
||||
|
||||
input dmf_start ,
|
||||
output dmf_busy ,
|
||||
|
||||
input din_valid ,
|
||||
input [DATA_I_WIDTH-1 : 0] din_real ,
|
||||
input [DATA_I_WIDTH-1 : 0] din_imag ,
|
||||
|
||||
input [$clog2(MAX_DMF_NUM+1)-1 : 0] dmf_num ,
|
||||
|
||||
output peak_valid ,
|
||||
output last_peak_valid ,
|
||||
output [DATA_O_WIDTH-1 : 0] peak_value_abs ,
|
||||
output [DATA_O_WIDTH-1 : 0] peak_value_i ,
|
||||
output [DATA_O_WIDTH-1 : 0] peak_value_q ,
|
||||
output [$clog2(PRBS_POS)-1 : 0] peak_index
|
||||
);
|
||||
|
||||
localparam CMPLX_DIM = 2;
|
||||
localparam APPROX_ABS_WIDTH = 29;
|
||||
localparam ABS_WIDTH = 18;
|
||||
|
||||
localparam DMF_I_WIDTH = 12;
|
||||
localparam DMF_O_WIDTH = DMF_I_WIDTH+$clog2(PRBS_POS);
|
||||
|
||||
localparam AXIS_DMF_I_WIDTH = 8*((DMF_I_WIDTH-1)/8+1);
|
||||
localparam AXIS_DMF_O_WIDTH = 8*((DMF_O_WIDTH-1)/8+1);
|
||||
|
||||
genvar m;
|
||||
integer i;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////// Center State Control /////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
reg dmf_busy_buf = 'b0;
|
||||
reg dmf_start_d1 = 'b0;
|
||||
reg dmf_start_d2 = 'b0;
|
||||
reg [$clog2(MAX_DMF_NUM)-1 : 0] cnt_dmf_num = 'b0;
|
||||
|
||||
reg moduli_max_valid = 'b0;
|
||||
|
||||
assign dmf_busy = dmf_busy_buf;
|
||||
|
||||
always @(posedge clk) begin
|
||||
dmf_start_d1 <= dmf_start;
|
||||
dmf_start_d2 <= dmf_start_d1;
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
cnt_dmf_num <= 'b0;
|
||||
end
|
||||
else if (dmf_busy) begin
|
||||
cnt_dmf_num <= (moduli_max_valid) ? cnt_dmf_num + 1'b1 : cnt_dmf_num;
|
||||
end
|
||||
else begin
|
||||
cnt_dmf_num <= 'b0;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
dmf_busy_buf <= 'b0;
|
||||
end
|
||||
else if (cnt_dmf_num == dmf_num+1) begin
|
||||
// clear when output is valid
|
||||
dmf_busy_buf <= 'b0;
|
||||
end
|
||||
else if (din_valid && (dmf_start_d2 != dmf_start_d1) && (dmf_num != 'b0)) begin
|
||||
// set when either edge is detected
|
||||
dmf_busy_buf <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
// otherwise keep
|
||||
dmf_busy_buf <= dmf_busy_buf;
|
||||
end
|
||||
end
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////// Decimation Counter //////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
reg [$clog2(INTERP_RATE/PROCESS_INTERP)-1 : 0] cnt_deci = 'b0;
|
||||
reg din_deci_valid = 'b0;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
cnt_deci <= 'b0;
|
||||
end
|
||||
else if (dmf_busy && din_valid) begin
|
||||
cnt_deci <= cnt_deci + 1'b1;
|
||||
end
|
||||
else begin
|
||||
cnt_deci <= 'b0;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
din_deci_valid <= 'b0;
|
||||
end
|
||||
else begin
|
||||
din_deci_valid <= (cnt_deci == INTERP_RATE/PROCESS_INTERP-1) ? 1'b1 : 'b0;
|
||||
end
|
||||
end
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Digital Matched Filter ////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// input & output signals
|
||||
wire [AXIS_DMF_I_WIDTH-1 : 0] dmf_axis_i_real;
|
||||
wire [AXIS_DMF_I_WIDTH-1 : 0] dmf_axis_i_imag;
|
||||
wire signed [AXIS_DMF_O_WIDTH-1 : 0] dmf_axis_o_real;
|
||||
wire signed [AXIS_DMF_O_WIDTH-1 : 0] dmf_axis_o_imag;
|
||||
wire signed [DMF_O_WIDTH-1 : 0] dmf_o_real;
|
||||
wire signed [DMF_O_WIDTH-1 : 0] dmf_o_imag;
|
||||
wire dmf_o_valid;
|
||||
|
||||
// dmf input data formatting
|
||||
if (AXIS_DMF_I_WIDTH > DATA_I_WIDTH) begin
|
||||
// sign extension to fit 8-bit axis data format
|
||||
assign dmf_axis_i_real = {{(AXIS_DMF_I_WIDTH-DATA_I_WIDTH){din_real[DATA_I_WIDTH-1]}},din_real};
|
||||
assign dmf_axis_i_imag = {{(AXIS_DMF_I_WIDTH-DATA_I_WIDTH){din_imag[DATA_I_WIDTH-1]}},din_imag};
|
||||
end
|
||||
else begin
|
||||
// truncate msb
|
||||
assign dmf_axis_i_real = din_real[DATA_I_WIDTH-1 -: AXIS_DMF_I_WIDTH];
|
||||
assign dmf_axis_i_imag = din_imag[DATA_I_WIDTH-1 -: AXIS_DMF_I_WIDTH];
|
||||
end
|
||||
|
||||
// dmf output data formatting, truncate valid bits
|
||||
assign dmf_o_real = dmf_axis_o_real[DMF_O_WIDTH-1 -: DMF_O_WIDTH];
|
||||
assign dmf_o_imag = dmf_axis_o_imag[DMF_O_WIDTH-1 -: DMF_O_WIDTH];
|
||||
|
||||
// fir port definition
|
||||
wire s_axis_data_tvalid_real;
|
||||
wire s_axis_data_tready_real;
|
||||
wire [AXIS_DMF_I_WIDTH-1 : 0] s_axis_data_ttdata_real;
|
||||
wire m_axis_data_tvalid_real;
|
||||
wire [AXIS_DMF_O_WIDTH-1 : 0] m_axis_data_ttdata_real;
|
||||
|
||||
wire s_axis_data_tvalid_imag;
|
||||
wire s_axis_data_tready_imag;
|
||||
wire [AXIS_DMF_I_WIDTH-1 : 0] s_axis_data_ttdata_imag;
|
||||
wire m_axis_data_tvalid_imag;
|
||||
wire [AXIS_DMF_O_WIDTH-1 : 0] m_axis_data_ttdata_imag;
|
||||
|
||||
// fir port connection
|
||||
assign s_axis_data_tvalid_real = din_deci_valid;
|
||||
assign s_axis_data_ttdata_real = dmf_axis_i_real;
|
||||
assign dmf_axis_o_real = m_axis_data_ttdata_real;
|
||||
|
||||
assign s_axis_data_tvalid_imag = din_deci_valid;
|
||||
assign s_axis_data_ttdata_imag = dmf_axis_i_imag;
|
||||
assign dmf_axis_o_imag = m_axis_data_ttdata_imag;
|
||||
|
||||
assign dmf_o_valid = m_axis_data_tvalid_real;
|
||||
|
||||
// fir ip core instantiation
|
||||
fir_prbs7_invert_rep2 u_dmf_real
|
||||
(
|
||||
.aclk (clk ), // input wire aclk
|
||||
.aresetn (dmf_busy ), // input aresetn
|
||||
.s_axis_data_tvalid (s_axis_data_tvalid_real), // input wire s_axis_data_tvalid
|
||||
.s_axis_data_tready (s_axis_data_tready_real), // output wire s_axis_data_tready
|
||||
.s_axis_data_tdata (s_axis_data_ttdata_real), // input wire [15 : 0] s_axis_data_tdata
|
||||
.m_axis_data_tvalid (m_axis_data_tvalid_real), // output wire m_axis_data_tvalid
|
||||
.m_axis_data_tdata (m_axis_data_ttdata_real) // output wire [23 : 0] m_axis_data_tdata
|
||||
);
|
||||
|
||||
fir_prbs7_invert_rep2 u_dmf_imag
|
||||
(
|
||||
.aclk (clk ), // input wire aclk
|
||||
.aresetn (dmf_busy ), // input aresetn
|
||||
.s_axis_data_tvalid (s_axis_data_tvalid_imag), // input wire s_axis_data_tvalid
|
||||
.s_axis_data_tready (s_axis_data_tready_imag), // output wire s_axis_data_tready
|
||||
.s_axis_data_tdata (s_axis_data_ttdata_imag), // input wire [15 : 0] s_axis_data_tdata
|
||||
.m_axis_data_tvalid (m_axis_data_tvalid_imag), // output wire m_axis_data_tvalid
|
||||
.m_axis_data_tdata (m_axis_data_ttdata_imag) // output wire [23 : 0] m_axis_data_tdata
|
||||
);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////// Chip Counter /////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
localparam PEAK_ABS_DELAY = 6; // 5 for multiplier, 1 for adder
|
||||
|
||||
reg [$clog2(PRBS_POS)-1 : 0] cnt_chip = 'b0;
|
||||
reg [$clog2(PRBS_POS)-1 : 0] cnt_chip_delay [0 : PEAK_ABS_DELAY-1];
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
cnt_chip <= 'b0;
|
||||
end
|
||||
else if (dmf_busy) begin
|
||||
cnt_chip <= (dmf_o_valid) ? cnt_chip + 1'b1 : cnt_chip;
|
||||
end
|
||||
else begin
|
||||
cnt_chip <= 'b0;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
|
||||
for (i = 1; i < PEAK_ABS_DELAY; i = i + 1) begin
|
||||
cnt_chip_delay[i] <= cnt_chip_delay[i-1];
|
||||
end
|
||||
|
||||
cnt_chip_delay[0] <= cnt_chip;
|
||||
end
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////// Accumulation & Peak Search //////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// moduli
|
||||
wire moduli_valid;
|
||||
reg moduli_valid_delay [0 : PEAK_ABS_DELAY-1];
|
||||
wire [ABS_WIDTH-1 : 0] moduli_real;
|
||||
wire [ABS_WIDTH-1 : 0] moduli_imag;
|
||||
reg [ABS_WIDTH-1 : 0] moduli_real_delay [0 : PEAK_ABS_DELAY-1];
|
||||
reg [ABS_WIDTH-1 : 0] moduli_imag_delay [0 : PEAK_ABS_DELAY-1];
|
||||
|
||||
assign moduli_valid = dmf_o_valid;
|
||||
|
||||
if (ABS_WIDTH > DMF_O_WIDTH) begin
|
||||
// append zeros
|
||||
assign moduli_real = {dmf_o_real,{(ABS_WIDTH-DMF_O_WIDTH){1'b0}}};
|
||||
assign moduli_imag = {dmf_o_imag,{(ABS_WIDTH-DMF_O_WIDTH){1'b0}}};
|
||||
end
|
||||
else begin
|
||||
// truncate msb
|
||||
assign moduli_real = dmf_o_real[DMF_O_WIDTH-1 -: ABS_WIDTH];
|
||||
assign moduli_imag = dmf_o_imag[DMF_O_WIDTH-1 -: ABS_WIDTH];
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
|
||||
for (i = 1; i < PEAK_ABS_DELAY; i = i + 1) begin
|
||||
moduli_valid_delay[i] <= moduli_valid_delay[i-1];
|
||||
moduli_real_delay[i] <= moduli_real_delay[i-1];
|
||||
moduli_imag_delay[i] <= moduli_imag_delay[i-1];
|
||||
end
|
||||
|
||||
moduli_valid_delay[0] <= moduli_valid;
|
||||
moduli_real_delay[0] <= moduli_real;
|
||||
moduli_imag_delay[0] <= moduli_imag;
|
||||
end
|
||||
|
||||
wire [2*ABS_WIDTH-1 : 0] moduli_real_square;
|
||||
wire [2*ABS_WIDTH-1 : 0] moduli_imag_square;
|
||||
reg [ABS_WIDTH-1 : 0] moduli_abs_square = 'b0;
|
||||
wire [DATA_O_WIDTH-1 : 0] moduli_abs;
|
||||
wire moduli_abs_valid;
|
||||
|
||||
assign moduli_abs_valid = moduli_valid_delay[PEAK_ABS_DELAY-1];
|
||||
|
||||
if (DATA_O_WIDTH > ABS_WIDTH) begin
|
||||
// append zeros
|
||||
assign moduli_abs = {moduli_abs_square,{(DATA_O_WIDTH-ABS_WIDTH){1'b0}}};
|
||||
end
|
||||
else begin
|
||||
// truncate msb
|
||||
assign moduli_abs = moduli_abs_square[ABS_WIDTH-1 -: DATA_O_WIDTH];
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
moduli_abs_square <= 'b0;
|
||||
end
|
||||
else begin
|
||||
moduli_abs_square <= moduli_real_square[(2*ABS_WIDTH-1) -: (ABS_WIDTH-1)] + moduli_imag_square[(2*ABS_WIDTH-1) -: (ABS_WIDTH-1)];
|
||||
end
|
||||
end
|
||||
|
||||
mult_18x18 u_mult_real
|
||||
(
|
||||
.CLK(clk ), // input wire CLK
|
||||
.A (moduli_real ), // input wire [17 : 0] A
|
||||
.B (moduli_real ), // input wire [17 : 0] B
|
||||
.P (moduli_real_square ) // output wire [17 : 0] P
|
||||
);
|
||||
|
||||
mult_18x18 u_mult_imag
|
||||
(
|
||||
.CLK(clk ), // input wire CLK
|
||||
.A (moduli_imag ), // input wire [17 : 0] A
|
||||
.B (moduli_imag ), // input wire [17 : 0] B
|
||||
.P (moduli_imag_square ) // output wire [17 : 0] P
|
||||
);
|
||||
|
||||
// wire accum_current_valid;
|
||||
|
||||
// assign accum_current_valid = dmf_o_valid;
|
||||
|
||||
// wire [APPROX_ABS_WIDTH-2 : 0] accum_moduli_real;
|
||||
// wire [APPROX_ABS_WIDTH-2 : 0] accum_moduli_imag;
|
||||
// wire [APPROX_ABS_WIDTH-1 : 0] accum_moduli_abs ;
|
||||
// wire accum_current_abs_valid;
|
||||
// wire [DATA_O_WIDTH-1 : 0] accum_current_abs;
|
||||
|
||||
// if (APPROX_ABS_WIDTH-1 > DMF_O_WIDTH) begin
|
||||
// // append zeros
|
||||
// assign accum_moduli_real = {dmf_o_real,{(APPROX_ABS_WIDTH-1-DMF_O_WIDTH){1'b0}}};
|
||||
// assign accum_moduli_imag = {dmf_o_imag,{(APPROX_ABS_WIDTH-1-DMF_O_WIDTH){1'b0}}};
|
||||
// end
|
||||
// else begin
|
||||
// // truncate msb
|
||||
// assign accum_moduli_real = dmf_o_real[DMF_O_WIDTH-1 -: (APPROX_ABS_WIDTH-1)];
|
||||
// assign accum_moduli_imag = dmf_o_imag[DMF_O_WIDTH-1 -: (APPROX_ABS_WIDTH-1)];
|
||||
// end
|
||||
|
||||
// if (DATA_O_WIDTH > APPROX_ABS_WIDTH) begin
|
||||
// // append zeros
|
||||
// assign accum_current_abs = {accum_moduli_abs,{(DATA_O_WIDTH-APPROX_ABS_WIDTH){1'b0}}};
|
||||
// end
|
||||
// else begin
|
||||
// // truncate msb
|
||||
// assign accum_current_abs = accum_moduli_abs[APPROX_ABS_WIDTH-1 -: DATA_O_WIDTH];
|
||||
// end
|
||||
|
||||
// ApproxAbs u_accum_abs
|
||||
// (
|
||||
// .clk (clk ),
|
||||
// .Nd (accum_current_valid ),
|
||||
// .Dini (accum_moduli_real ),
|
||||
// .Dinq (accum_moduli_imag ),
|
||||
// .Abs_Rdy (accum_current_abs_valid),
|
||||
// .Abs_Dout (accum_moduli_abs )
|
||||
// );
|
||||
|
||||
// peak record
|
||||
reg [DATA_O_WIDTH-1 : 0] moduli_max_abs = 'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] moduli_max_real = 'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] moduli_max_imag = 'b0;
|
||||
reg [$clog2(PRBS_POS)-1 : 0] moduli_max_index = 'b0;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
moduli_max_valid <= 'b0;
|
||||
moduli_max_abs <= 'b0;
|
||||
moduli_max_real <= 'b0;
|
||||
moduli_max_imag <= 'b0;
|
||||
moduli_max_index <= 'b0;
|
||||
end
|
||||
else if (dmf_busy) begin
|
||||
if (moduli_abs_valid) begin
|
||||
if ((cnt_chip_delay[PEAK_ABS_DELAY-1] == 0) || (moduli_abs > moduli_max_abs)) begin
|
||||
// reset when chip counter reaches zero or record peak
|
||||
moduli_max_abs <= moduli_abs ;
|
||||
moduli_max_real <= moduli_real_delay[PEAK_ABS_DELAY-1];
|
||||
moduli_max_imag <= moduli_imag_delay[PEAK_ABS_DELAY-1];
|
||||
moduli_max_index <= cnt_chip_delay[PEAK_ABS_DELAY-1] ;
|
||||
end
|
||||
else begin
|
||||
moduli_max_abs <= moduli_max_abs;
|
||||
moduli_max_real <= moduli_max_real;
|
||||
moduli_max_imag <= moduli_max_imag;
|
||||
moduli_max_index <= moduli_max_index;
|
||||
end
|
||||
|
||||
if (cnt_chip_delay[PEAK_ABS_DELAY-1] == PRBS_POS-1) begin
|
||||
// peak record valid when chip counter reaches maximum value
|
||||
moduli_max_valid <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
moduli_max_valid <= 'b0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
moduli_max_valid <= 'b0;
|
||||
moduli_max_abs <= moduli_max_abs;
|
||||
moduli_max_real <= moduli_max_real;
|
||||
moduli_max_imag <= moduli_max_imag;
|
||||
moduli_max_index <= moduli_max_index;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
moduli_max_valid <= 'b0;
|
||||
moduli_max_abs <= 'b0;
|
||||
moduli_max_real <= 'b0;
|
||||
moduli_max_imag <= 'b0;
|
||||
moduli_max_index <= 'b0;
|
||||
end
|
||||
end
|
||||
|
||||
// register output
|
||||
reg peak_valid_buf = 1'b0;
|
||||
reg last_peak_valid_buf = 1'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] peak_value_abs_buf = 'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] peak_value_i_buf = 'b0;
|
||||
reg [DATA_O_WIDTH-1 : 0] peak_value_q_buf = 'b0;
|
||||
reg [$clog2(PRBS_POS)-1 : 0] peak_index_buf = 'b0;
|
||||
|
||||
assign peak_valid = peak_valid_buf ;
|
||||
assign last_peak_valid = last_peak_valid_buf;
|
||||
assign peak_value_abs = peak_value_abs_buf ;
|
||||
assign peak_value_i = peak_value_i_buf ;
|
||||
assign peak_value_q = peak_value_q_buf ;
|
||||
assign peak_index = peak_index_buf ;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
peak_valid_buf <= 'b0;
|
||||
last_peak_valid_buf <= 'b0;
|
||||
peak_value_abs_buf <= 'b0;
|
||||
peak_value_i_buf <= 'b0;
|
||||
peak_value_q_buf <= 'b0;
|
||||
peak_index_buf <= 'b0;
|
||||
end
|
||||
else if (moduli_max_valid && (cnt_dmf_num != 'b0)) begin
|
||||
peak_valid_buf <= 1'b1;
|
||||
peak_value_abs_buf <= moduli_max_abs ;
|
||||
peak_value_i_buf <= moduli_max_real ;
|
||||
peak_value_q_buf <= moduli_max_imag ;
|
||||
peak_index_buf <= moduli_max_index;
|
||||
|
||||
last_peak_valid_buf<= (cnt_dmf_num == dmf_num) ? 1'b1 : 'b0;
|
||||
end
|
||||
else begin
|
||||
peak_valid_buf <= 1'b0;
|
||||
last_peak_valid_buf <= 1'b0;
|
||||
peak_value_abs_buf <= peak_value_abs_buf;
|
||||
peak_value_i_buf <= peak_value_i_buf ;
|
||||
peak_value_q_buf <= peak_value_q_buf ;
|
||||
peak_index_buf <= peak_index_buf ;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,443 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
// _ _ ____
|
||||
// | | ___ ___| |__ / ___| __ _ ___
|
||||
// _ | |/ _ \/ __| '_ \ | | _ / _` |/ _ \
|
||||
// | |_| | (_) \__ \ | | | | |_| | (_| | (_) |
|
||||
// \___/ \___/|___/_| |_| \____|\__,_|\___/
|
||||
//
|
||||
// Create Date: 2022/09/14 16:45:10
|
||||
// Last Modified Data: 2023/02/12 17:10
|
||||
// Design Name:
|
||||
// Module Name: ad9361_phase_cal_coarse
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// 2022/09/14 16:45:10 - File Created
|
||||
// 2023/02/12 17:10 - 修改:校准未完成时,将输入信号寄存输出。
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module ad9361_phase_cal_coarse
|
||||
#(
|
||||
parameter COUNTER_MOD = 48,
|
||||
parameter PEAK_POS = 12,
|
||||
parameter ADC_DATA_WIDTH = 12
|
||||
)
|
||||
(
|
||||
// clock & reset
|
||||
input clk ,
|
||||
input rst ,
|
||||
// control interface
|
||||
input ad9361_1_cal_start ,
|
||||
output ad9361_1_cal_done ,
|
||||
input ad9361_2_cal_start ,
|
||||
output ad9361_2_cal_done ,
|
||||
output ad9361_cal_result ,
|
||||
output ad9361_cal_valid ,
|
||||
input ad9361_recal ,
|
||||
// input data interface
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch1_i ,
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch1_q ,
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch2_i ,
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch2_q ,
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch3_i ,
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch3_q ,
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch4_i ,
|
||||
input [ADC_DATA_WIDTH-1:0] rx_ch4_q ,
|
||||
// output data interface
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch1_i,
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch1_q,
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch2_i,
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch2_q,
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch3_i,
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch3_q,
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch4_i,
|
||||
output [ADC_DATA_WIDTH-1:0] rx_cal_ch4_q
|
||||
);
|
||||
|
||||
localparam STATE_IDLE = 2'd0;
|
||||
localparam STATE_CAL_1 = 2'd1;
|
||||
localparam STATE_CAL_2 = 2'd2;
|
||||
localparam STATE_DONE = 2'd3;
|
||||
|
||||
// buffer input control signals
|
||||
reg ad9361_1_cal_start_d1 = 'b0;
|
||||
reg ad9361_1_cal_start_d2 = 'b0;
|
||||
reg ad9361_2_cal_start_d1 = 'b0;
|
||||
reg ad9361_2_cal_start_d2 = 'b0;
|
||||
reg ad9361_recal_d1 = 'b0;
|
||||
reg ad9361_recal_d2 = 'b0;
|
||||
|
||||
always @(posedge clk) begin
|
||||
ad9361_1_cal_start_d1 <= ad9361_1_cal_start;
|
||||
ad9361_1_cal_start_d2 <= ad9361_1_cal_start_d1;
|
||||
|
||||
ad9361_2_cal_start_d1 <= ad9361_2_cal_start;
|
||||
ad9361_2_cal_start_d2 <= ad9361_2_cal_start_d1;
|
||||
|
||||
ad9361_recal_d1 <= ad9361_recal;
|
||||
ad9361_recal_d2 <= ad9361_recal_d1;
|
||||
end
|
||||
|
||||
// center state machine
|
||||
reg [ 1:0] curr_state = STATE_IDLE;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
curr_state <= STATE_IDLE;
|
||||
end
|
||||
else begin
|
||||
case (curr_state)
|
||||
STATE_IDLE: begin
|
||||
// move to next state when [ad9361_1_cal_start] asserts
|
||||
curr_state <= ad9361_1_cal_start_d2 ? STATE_CAL_1 : STATE_IDLE;
|
||||
end
|
||||
STATE_CAL_1: begin
|
||||
// move to next state when 1st cal finishes [ad9361_2_cal_start] asserts
|
||||
curr_state <= (ad9361_1_cal_done && ad9361_2_cal_start_d2) ? STATE_CAL_2 : STATE_CAL_1;
|
||||
end
|
||||
STATE_CAL_2: begin
|
||||
// move to next state when 2nd cal finishes
|
||||
curr_state <= ad9361_2_cal_done ? STATE_DONE : STATE_CAL_2;
|
||||
end
|
||||
STATE_DONE: begin
|
||||
// move to ILDA state when it needs to recal
|
||||
curr_state <= (ad9361_recal_d2) ? STATE_IDLE : STATE_DONE;
|
||||
end
|
||||
default: begin
|
||||
curr_state <= STATE_IDLE;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
//
|
||||
reg rx_ch2_i_msb_d1 = 'b0;
|
||||
reg cnt_start = 'b0;
|
||||
reg cnt_start_flag = 'b0;
|
||||
reg [$clog2(COUNTER_MOD)-1:0] cnt = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_ch2_i_rec = 'b0;
|
||||
reg rx_ch2_i_rec_flag = 'b0;
|
||||
|
||||
assign ad9361_1_cal_done = rx_ch2_i_rec_flag;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
rx_ch2_i_msb_d1 <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_IDLE) begin
|
||||
// reset at IDLE state
|
||||
rx_ch2_i_msb_d1 <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_CAL_1) begin
|
||||
rx_ch2_i_msb_d1 <= rx_ch2_i[ADC_DATA_WIDTH-1];
|
||||
end
|
||||
else begin
|
||||
rx_ch2_i_msb_d1 <= rx_ch2_i_msb_d1;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
cnt_start <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_IDLE) begin
|
||||
// reset at IDLE state
|
||||
cnt_start <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_CAL_1 && ~cnt_start) begin
|
||||
// assert when the 1st falling edge of msb of rx_ch2_i is detected
|
||||
cnt_start <= (rx_ch2_i_msb_d1 & ~rx_ch2_i[ADC_DATA_WIDTH-1]) ? 1'b1 : 1'b0;
|
||||
end
|
||||
else begin
|
||||
cnt_start <= cnt_start;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
cnt <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_IDLE) begin
|
||||
// reset at IDLE state
|
||||
cnt <= 'b0;
|
||||
end
|
||||
else if (cnt_start) begin
|
||||
cnt <= (cnt == COUNTER_MOD - 1) ? 'b0 : cnt + 1'b1;
|
||||
end
|
||||
else begin
|
||||
cnt <= cnt;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
rx_ch2_i_rec <= 'b0;
|
||||
rx_ch2_i_rec_flag <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_IDLE) begin
|
||||
// reset at IDLE state
|
||||
rx_ch2_i_rec <= 'b0;
|
||||
rx_ch2_i_rec_flag <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_CAL_1 && cnt == PEAK_POS && ~rx_ch2_i_rec_flag) begin
|
||||
rx_ch2_i_rec <= rx_ch2_i;
|
||||
rx_ch2_i_rec_flag <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
rx_ch2_i_rec <= rx_ch2_i_rec;
|
||||
rx_ch2_i_rec_flag <= rx_ch2_i_rec_flag;
|
||||
end
|
||||
end
|
||||
|
||||
//
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_ch4_i_rec = 'b0;
|
||||
reg rx_ch4_i_rec_flag = 'b0;
|
||||
|
||||
assign ad9361_2_cal_done = rx_ch4_i_rec_flag;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
rx_ch4_i_rec <= 'b0;
|
||||
rx_ch4_i_rec_flag <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_IDLE) begin
|
||||
// reset at IDLE state
|
||||
rx_ch4_i_rec <= 'b0;
|
||||
rx_ch4_i_rec_flag <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_CAL_2 && cnt == COUNTER_MOD/4 && ~rx_ch4_i_rec_flag) begin
|
||||
rx_ch4_i_rec <= rx_ch4_i;
|
||||
rx_ch4_i_rec_flag <= 1'b1;
|
||||
end
|
||||
else begin
|
||||
rx_ch4_i_rec <= rx_ch4_i_rec;
|
||||
rx_ch4_i_rec_flag <= rx_ch4_i_rec_flag;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
reg ad9361_cal_valid_buf = 'b0;
|
||||
reg ad9361_cal_result_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch1_i_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch2_i_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch3_i_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch4_i_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch1_q_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch2_q_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch3_q_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1:0] rx_cal_ch4_q_buf = 'b0;
|
||||
|
||||
assign ad9361_cal_valid = ad9361_cal_valid_buf;
|
||||
assign ad9361_cal_result = ad9361_cal_result_buf;
|
||||
assign rx_cal_ch1_i = rx_cal_ch1_i_buf;
|
||||
assign rx_cal_ch2_i = rx_cal_ch2_i_buf;
|
||||
assign rx_cal_ch3_i = rx_cal_ch3_i_buf;
|
||||
assign rx_cal_ch4_i = rx_cal_ch4_i_buf;
|
||||
assign rx_cal_ch1_q = rx_cal_ch1_q_buf;
|
||||
assign rx_cal_ch2_q = rx_cal_ch2_q_buf;
|
||||
assign rx_cal_ch3_q = rx_cal_ch3_q_buf;
|
||||
assign rx_cal_ch4_q = rx_cal_ch4_q_buf;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
ad9361_cal_valid_buf <= 'b0;
|
||||
ad9361_cal_result_buf <= 'b0;
|
||||
rx_cal_ch1_i_buf <= 'b0;
|
||||
rx_cal_ch2_i_buf <= 'b0;
|
||||
rx_cal_ch3_i_buf <= 'b0;
|
||||
rx_cal_ch4_i_buf <= 'b0;
|
||||
rx_cal_ch1_q_buf <= 'b0;
|
||||
rx_cal_ch2_q_buf <= 'b0;
|
||||
rx_cal_ch3_q_buf <= 'b0;
|
||||
rx_cal_ch4_q_buf <= 'b0;
|
||||
end
|
||||
else if (curr_state == STATE_DONE) begin
|
||||
ad9361_cal_valid_buf <= 1'b1;
|
||||
|
||||
if (rx_ch2_i_rec[ADC_DATA_WIDTH-1] == rx_ch4_i_rec[ADC_DATA_WIDTH-1]) begin
|
||||
ad9361_cal_result_buf <= 'b0;
|
||||
rx_cal_ch1_i_buf <= rx_ch1_i;
|
||||
rx_cal_ch2_i_buf <= -rx_ch2_i;
|
||||
rx_cal_ch3_i_buf <= rx_ch3_i;
|
||||
rx_cal_ch4_i_buf <= -rx_ch4_i;
|
||||
rx_cal_ch1_q_buf <= rx_ch1_q;
|
||||
rx_cal_ch2_q_buf <= -rx_ch2_q;
|
||||
rx_cal_ch3_q_buf <= rx_ch3_q;
|
||||
rx_cal_ch4_q_buf <= -rx_ch4_q;
|
||||
end
|
||||
else begin
|
||||
ad9361_cal_result_buf <= 'b1;
|
||||
rx_cal_ch1_i_buf <= rx_ch1_i;
|
||||
rx_cal_ch2_i_buf <= -rx_ch2_i;
|
||||
rx_cal_ch3_i_buf <= -rx_ch3_i;
|
||||
rx_cal_ch4_i_buf <= rx_ch4_i;
|
||||
rx_cal_ch1_q_buf <= rx_ch1_q;
|
||||
rx_cal_ch2_q_buf <= -rx_ch2_q;
|
||||
rx_cal_ch3_q_buf <= -rx_ch3_q;
|
||||
rx_cal_ch4_q_buf <= rx_ch4_q;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
ad9361_cal_valid_buf <= 1'b0;
|
||||
ad9361_cal_result_buf <= ad9361_cal_result_buf;
|
||||
rx_cal_ch1_i_buf <= rx_ch1_i;
|
||||
rx_cal_ch2_i_buf <= rx_ch2_i;
|
||||
rx_cal_ch3_i_buf <= rx_ch3_i;
|
||||
rx_cal_ch4_i_buf <= rx_ch4_i;
|
||||
rx_cal_ch1_q_buf <= rx_ch1_q;
|
||||
rx_cal_ch2_q_buf <= rx_ch2_q;
|
||||
rx_cal_ch3_q_buf <= rx_ch3_q;
|
||||
rx_cal_ch4_q_buf <= rx_ch4_q;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
// _ _ ____
|
||||
// | | ___ ___| |__ / ___| __ _ ___
|
||||
// _ | |/ _ \/ __| '_ \ | | _ / _` |/ _ \
|
||||
// | |_| | (_) \__ \ | | | | |_| | (_| | (_) |
|
||||
// \___/ \___/|___/_| |_| \____|\__,_|\___/
|
||||
//
|
||||
// Create Date: 2022/09/15 11:12:45
|
||||
// Last Modified Data: 2022/11/02
|
||||
// Design Name:
|
||||
// Module Name: tb_ad9361_cal_coarse
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description: testbench for [ad9361_phase_cal_coarse]
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// module tb_ad9361_cal_coarse;
|
||||
|
||||
// reg clk = 'b0;
|
||||
// reg rst = 1'b1;
|
||||
|
||||
// reg ad9361_1_cal_start = 'b0;
|
||||
// wire ad9361_1_cal_done ;
|
||||
// reg ad9361_2_cal_start = 'b0;
|
||||
// wire ad9361_2_cal_done ;
|
||||
// wire ad9361_cal_result ;
|
||||
// wire ad9361_cal_valid;
|
||||
// reg ad9361_recal = 'b0;
|
||||
|
||||
// // phase difference of 180 degree
|
||||
// reg [11:0] rx_ch1_i = 12'd2047;
|
||||
// reg [11:0] rx_ch1_q = 12'd2047;
|
||||
// reg [11:0] rx_ch2_i = -12'd2047;
|
||||
// reg [11:0] rx_ch2_q = -12'd2047;
|
||||
// reg [11:0] rx_ch3_q = -12'd2047;
|
||||
// reg [11:0] rx_ch3_i = -12'd2047;
|
||||
// reg [11:0] rx_ch4_i = 12'd2047;
|
||||
// reg [11:0] rx_ch4_q = 12'd2047;
|
||||
|
||||
// wire [11:0] rx_cal_ch1_i;
|
||||
// wire [11:0] rx_cal_ch2_i;
|
||||
// wire [11:0] rx_cal_ch3_i;
|
||||
// wire [11:0] rx_cal_ch4_i;
|
||||
// wire [11:0] rx_cal_ch1_q;
|
||||
// wire [11:0] rx_cal_ch2_q;
|
||||
// wire [11:0] rx_cal_ch3_q;
|
||||
// wire [11:0] rx_cal_ch4_q;
|
||||
|
||||
// ad9361_phase_cal #(
|
||||
// .COUNTER_MOD (48),
|
||||
// .PEAK_POS (12)
|
||||
// ) u_ad9361_phase_cal
|
||||
// (
|
||||
// // clock & reset
|
||||
// .clk (clk ), // input clk
|
||||
// .rst (rst ), // input rst
|
||||
// // control interface
|
||||
// .ad9361_1_cal_start (ad9361_1_cal_start ), // input ad9361_1_cal_start
|
||||
// .ad9361_1_cal_done (ad9361_1_cal_done ), // output ad9361_1_cal_done
|
||||
// .ad9361_2_cal_start (ad9361_2_cal_start ), // input ad9361_2_cal_start
|
||||
// .ad9361_2_cal_done (ad9361_2_cal_done ), // output ad9361_2_cal_done
|
||||
// .ad9361_cal_result (ad9361_cal_result ), // output ad9361_cal_result
|
||||
// .ad9361_cal_valid (ad9361_cal_valid ), // output ad9361_cal_valid
|
||||
// .ad9361_recal (ad9361_recal ), // input ad9361_recal
|
||||
// // input data interface
|
||||
// .rx_ch1_i (rx_ch1_i ), // input [11:0] rx_ch1_i
|
||||
// .rx_ch2_i (rx_ch2_i ), // input [11:0] rx_ch2_i
|
||||
// .rx_ch3_i (rx_ch3_i ), // input [11:0] rx_ch3_i
|
||||
// .rx_ch4_i (rx_ch4_i ), // input [11:0] rx_ch4_i
|
||||
// .rx_ch1_q (rx_ch1_q ), // input [11:0] rx_ch1_q
|
||||
// .rx_ch2_q (rx_ch2_q ), // input [11:0] rx_ch2_q
|
||||
// .rx_ch3_q (rx_ch3_q ), // input [11:0] rx_ch3_q
|
||||
// .rx_ch4_q (rx_ch4_q ), // input [11:0] rx_ch4_q
|
||||
// // output data interface
|
||||
// .rx_cal_ch1_i (rx_cal_ch1_i ), // output [11:0] rx_cal_ch1_i
|
||||
// .rx_cal_ch2_i (rx_cal_ch2_i ), // output [11:0] rx_cal_ch2_i
|
||||
// .rx_cal_ch3_i (rx_cal_ch3_i ), // output [11:0] rx_cal_ch3_i
|
||||
// .rx_cal_ch4_i (rx_cal_ch4_i ), // output [11:0] rx_cal_ch4_i
|
||||
// .rx_cal_ch1_q (rx_cal_ch1_q ), // output [11:0] rx_cal_ch1_q
|
||||
// .rx_cal_ch2_q (rx_cal_ch2_q ), // output [11:0] rx_cal_ch2_q
|
||||
// .rx_cal_ch3_q (rx_cal_ch3_q ), // output [11:0] rx_cal_ch3_q
|
||||
// .rx_cal_ch4_q (rx_cal_ch4_q ) // output [11:0] rx_cal_ch4_q
|
||||
// );
|
||||
|
||||
// initial begin
|
||||
// #102
|
||||
// rst = 1'b0;
|
||||
// #100
|
||||
// ad9361_1_cal_start = 1'b1;
|
||||
// end
|
||||
|
||||
// initial begin
|
||||
// #10000
|
||||
// ad9361_recal = 1'b1;
|
||||
// #20
|
||||
// ad9361_recal = 1'b0;
|
||||
// end
|
||||
|
||||
// always begin
|
||||
// #2 clk = ~clk;
|
||||
// end
|
||||
|
||||
// always begin
|
||||
// #72
|
||||
// rx_ch1_i = ~rx_ch1_i;
|
||||
// rx_ch2_i = ~rx_ch2_i;
|
||||
// rx_ch3_i = ~rx_ch3_i;
|
||||
// rx_ch4_i = ~rx_ch4_i;
|
||||
// #24
|
||||
// rx_ch1_q = ~rx_ch1_q;
|
||||
// rx_ch2_q = ~rx_ch2_q;
|
||||
// rx_ch3_q = ~rx_ch3_q;
|
||||
// rx_ch4_q = ~rx_ch4_q;
|
||||
// end
|
||||
|
||||
// always @(posedge clk) begin
|
||||
// if (ad9361_1_cal_done) begin
|
||||
// ad9361_2_cal_start <= 1'b1;
|
||||
// end
|
||||
// else begin
|
||||
// ad9361_2_cal_start <= 1'b0;
|
||||
// end
|
||||
// end
|
||||
|
||||
// endmodule
|
||||
@@ -0,0 +1,981 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
// _ _ ____
|
||||
// | | ___ ___| |__ / ___| __ _ ___
|
||||
// _ | |/ _ \/ __| '_ \ | | _ / _` |/ _ \
|
||||
// | |_| | (_) \__ \ | | | | |_| | (_| | (_) |
|
||||
// \___/ \___/|___/_| |_| \____|\__,_|\___/
|
||||
//
|
||||
// Create Date: 2021/12/14 15:54:11
|
||||
// Design Name:
|
||||
// Module Name: system_top
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module system_top
|
||||
(
|
||||
/***************************************************************************
|
||||
* Contents
|
||||
* 01. Clocks
|
||||
* 02. HMC7044 Interface
|
||||
* 03. AD9361-1 Interface
|
||||
* 04. AD9361-2 Interface
|
||||
* 05. Phased-Array Control
|
||||
* 06. RF Synthesizer Control
|
||||
* 07. Debug IO
|
||||
* 08. DDR and Fixed-io (Do NOT Modify)
|
||||
**************************************************************************/
|
||||
|
||||
// *************************************************************************
|
||||
// ******************************** Clocks *********************************
|
||||
// *************************************************************************
|
||||
// fpga logic clock
|
||||
input clk_250m_p , // generated by hmc7044, 250mhz
|
||||
input clk_250m_n ,
|
||||
// ad9361 buffered clock
|
||||
input ad9361_1_buffer_clk , // derived from ad9361 input clock
|
||||
input ad9361_2_buffer_clk , // derived from ad9361 input clock
|
||||
// *************************************************************************
|
||||
// *************************** HMC7044 Interface ***************************
|
||||
// *************************************************************************
|
||||
// spi interface
|
||||
output hmc7044_spi_clk ,
|
||||
output hmc7044_spi_csn ,
|
||||
inout hmc7044_spi_sdio ,
|
||||
// control signals
|
||||
output hmc7044_reset , // hmc7044 active-high reset signal, set to 0 in normal operation
|
||||
output hmc7044_sync , // hmc7044 multichip synchronization signal, set to 0 if not used
|
||||
// gpio
|
||||
inout [ 3:0] hmc7044_gpio ,
|
||||
// *************************************************************************
|
||||
// ************************** AD9361-1 Interface ***************************
|
||||
// *************************************************************************
|
||||
// rx data (rx channels are tied to ground physically)
|
||||
input ad9361_1_rx_data_clk, // ad9361 rx data clock, 96mhz
|
||||
input ad9361_1_rx_frame ,
|
||||
input [11:0] ad9361_1_rx_data ,
|
||||
// tx data
|
||||
output ad9361_1_tx_fb_clk ,
|
||||
output ad9361_1_tx_frame ,
|
||||
output [11:0] ad9361_1_tx_data ,
|
||||
// spi interface
|
||||
output ad9361_1_spi_clk ,
|
||||
output ad9361_1_spi_csn ,
|
||||
output ad9361_1_spi_mosi ,
|
||||
input ad9361_1_spi_miso ,
|
||||
// control signals
|
||||
output ad9361_1_reset_b , // ad9361 active-low reset control
|
||||
output ad9361_1_en_agc , // ad9361 manual agc control
|
||||
output ad9361_1_enable , // ad9361 enable state machine pin control (spi control is also allowed)
|
||||
output ad9361_1_txnrx , // ad9361 enable state machine pin control (spi control is also allowed)
|
||||
input [ 3:0] ad9361_1_ctrl_in ,
|
||||
output [ 7:0] ad9361_1_ctrl_out ,
|
||||
output ad9361_sync ,
|
||||
// *************************************************************************
|
||||
// ************************** AD9361-2 Interface ***************************
|
||||
// *************************************************************************
|
||||
// rx data (rx channels are tied to ground physically)
|
||||
input ad9361_2_rx_data_clk,
|
||||
input ad9361_2_rx_frame ,
|
||||
input [11:0] ad9361_2_rx_data ,
|
||||
// tx data
|
||||
output ad9361_2_tx_fb_clk ,
|
||||
output ad9361_2_tx_frame ,
|
||||
output [11:0] ad9361_2_tx_data ,
|
||||
// spi interface
|
||||
output ad9361_2_spi_clk ,
|
||||
output ad9361_2_spi_csn ,
|
||||
output ad9361_2_spi_mosi ,
|
||||
input ad9361_2_spi_miso ,
|
||||
// control signals
|
||||
output ad9361_2_reset_b , // ad9361 active-low reset control
|
||||
output ad9361_2_en_agc , // ad9361 manual agc control
|
||||
output ad9361_2_enable , // ad9361 enable state machine pin control (spi control is also allowed)
|
||||
output ad9361_2_txnrx , // ad9361 enable state machine pin control (spi control is also allowed)
|
||||
input [ 3:0] ad9361_2_ctrl_in ,
|
||||
output [ 7:0] ad9361_2_ctrl_out ,
|
||||
// *************************************************************************
|
||||
// ************************* Phased-Array Control **************************
|
||||
// *************************************************************************
|
||||
output ant_clk ,
|
||||
output ant_en ,
|
||||
output ant_data ,
|
||||
output ant_tr ,
|
||||
output ant_dary ,
|
||||
input ant_dout ,
|
||||
// *************************************************************************
|
||||
// ************************ RF Synthesizer Control *************************
|
||||
// *************************************************************************
|
||||
output rf_standby ,
|
||||
output rf_sw_pll ,
|
||||
output rf_t ,
|
||||
output rf_r ,
|
||||
output rf_sw_bpf ,
|
||||
output rf_sclk1 ,
|
||||
output rf_sdio1 ,
|
||||
output rf_cs1 ,
|
||||
input rf_ld1 ,
|
||||
output rf_sclk2 ,
|
||||
output rf_sdio2 ,
|
||||
output rf_cs2 ,
|
||||
input rf_ld2 ,
|
||||
output rf_sclk3 ,
|
||||
output rf_sdio3 ,
|
||||
output rf_cs3 ,
|
||||
input rf_ld3 ,
|
||||
output rf_tmgc_16 ,
|
||||
output rf_tmgc_8 ,
|
||||
output rf_tmgc_4 ,
|
||||
output rf_tmgc_2 ,
|
||||
output rf_tmgc_1 ,
|
||||
output rf_rmgc_16 ,
|
||||
output rf_rmgc_8 ,
|
||||
output rf_rmgc_4 ,
|
||||
output rf_rmgc_2 ,
|
||||
output rf_rmgc_1 ,
|
||||
output rf_enable ,
|
||||
output rf_sc ,
|
||||
output rf_sd ,
|
||||
output rf_endsyn ,
|
||||
input rf_sdout ,
|
||||
inout rf_dq_wd ,
|
||||
output rf_sw_rx ,
|
||||
// *************************************************************************
|
||||
// ******************************* Debug IO ********************************
|
||||
// *************************************************************************
|
||||
// 3.3v ports
|
||||
output uart1_txd ,
|
||||
input uart1_rxd ,
|
||||
output uart2_txd ,
|
||||
input uart2_rxd ,
|
||||
output uart3_txd ,
|
||||
input uart3_rxd ,
|
||||
// 1.8v ports
|
||||
inout debug_io_1 ,
|
||||
inout debug_io_2 ,
|
||||
// 3.3v ports
|
||||
inout debug_io_3 ,
|
||||
inout debug_io_4 ,
|
||||
inout debug_io_5 ,
|
||||
inout debug_io_6 ,
|
||||
inout debug_io_7 ,
|
||||
// *************************************************************************
|
||||
// ******************* DDR and Fixed-io (Do NOT Modify) ********************
|
||||
// *************************************************************************
|
||||
// ddr
|
||||
inout [14:0] ddr_addr ,
|
||||
inout [ 2:0] ddr_ba ,
|
||||
inout ddr_cas_n ,
|
||||
inout ddr_ck_n ,
|
||||
inout ddr_ck_p ,
|
||||
inout ddr_cke ,
|
||||
inout ddr_cs_n ,
|
||||
inout [ 3:0] ddr_dm ,
|
||||
inout [31:0] ddr_dq ,
|
||||
inout [ 3:0] ddr_dqs_n ,
|
||||
inout [ 3:0] ddr_dqs_p ,
|
||||
inout ddr_odt ,
|
||||
inout ddr_ras_n ,
|
||||
inout ddr_reset_n ,
|
||||
inout ddr_we_n ,
|
||||
// fixed-io
|
||||
inout fixed_io_ddr_vrn ,
|
||||
inout fixed_io_ddr_vrp ,
|
||||
inout [53:0] fixed_io_mio ,
|
||||
inout fixed_io_ps_clk ,
|
||||
inout fixed_io_ps_porb ,
|
||||
inout fixed_io_ps_srstb
|
||||
);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////// System Clock Generation ////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// global reset
|
||||
wire sys_rst ; // global reset signal, active high
|
||||
wire ant_rst ; // phased-array & rf control reset signal, active high
|
||||
|
||||
// pl signal processing clock
|
||||
wire sys_clk ; // 48MHz 41.6667MHz
|
||||
wire sys_clk_2x ; // 96MHz 83.3333MHz
|
||||
wire sys_clk_3x ; // 144MHz 125MHz
|
||||
wire sys_clk_4x ; // 192MHz 166.6667MHz
|
||||
wire sys_clk_ld ; // system main clock locked indicator
|
||||
|
||||
// ad9361-1 clocks
|
||||
wire ad9361_1_clk ; // 48MHz 41.6667MHz
|
||||
wire ad9361_1_clk_2x ; // 96MHz 83.3333MHz
|
||||
wire ad9361_1_clk_3x ; // 144MHz 125MHz
|
||||
wire ad9361_1_clk_4x ; // 192MHz 166.6667MHz
|
||||
wire ad9361_1_clk_ld ; // ad9361-1 clock group locked indicator
|
||||
|
||||
// ad9361-2 clocks
|
||||
wire ad9361_2_clk ; // 48MHz 41.6667MHz
|
||||
wire ad9361_2_clk_2x ; // 96MHz 83.3333MHz
|
||||
wire ad9361_2_clk_3x ; // 144MHz 125MHz
|
||||
wire ad9361_2_clk_4x ; // 192MHz 166.6667MHz
|
||||
wire ad9361_2_clk_ld ; // ad9361-2 clock group locked indicator
|
||||
|
||||
// phased-array & rf control clocks
|
||||
wire clk_96m ;
|
||||
wire clk_48m ;
|
||||
wire clk_32m ;
|
||||
wire clk_19p2m ;
|
||||
|
||||
clk_dist u_clk_dist
|
||||
(
|
||||
// input clocks
|
||||
.clk_250m_p (clk_250m_p ), // generated by ad9516, 250mhz
|
||||
.clk_250m_n (clk_250m_n ),
|
||||
.ad9361_1_rx_data_clk(ad9361_1_rx_data_clk), // ad9361 rx data clock, 83.3333mhz
|
||||
.ad9361_2_rx_data_clk(ad9361_2_rx_data_clk), // ad9361 rx data clock, 83.3333mhz
|
||||
|
||||
// output clocks & reset
|
||||
// global reset
|
||||
.sys_rst (sys_rst ), // global reset signal, active high
|
||||
.ant_rst (ant_rst ), // phased-array & rf control reset signal, active high
|
||||
|
||||
// pl signal processing clock
|
||||
.sys_clk (sys_clk ), // 48MHz 41.6667MHz
|
||||
.sys_clk_2x (sys_clk_2x ), // 96MHz 83.3333MHz
|
||||
.sys_clk_3x (sys_clk_3x ), // 144MHz 125MHz
|
||||
.sys_clk_4x (sys_clk_4x ), // 192MHz 166.6667MHz
|
||||
.sys_clk_ld (sys_clk_ld ), // system main clock locked indicator
|
||||
|
||||
// ad9361-1 clocks
|
||||
.ad9361_1_clk (ad9361_1_clk ), // 48MHz 41.6667MHz
|
||||
.ad9361_1_clk_2x (ad9361_1_clk_2x ), // 96MHz 83.3333MHz
|
||||
.ad9361_1_clk_3x (ad9361_1_clk_3x ), // 144MHz 125MHz
|
||||
.ad9361_1_clk_4x (ad9361_1_clk_4x ), // 192MHz 166.6667MHz
|
||||
.ad9361_1_clk_ld (ad9361_1_clk_ld ), // ad9361-1 clock group locked indicator
|
||||
|
||||
// ad9361-2 clocks
|
||||
.ad9361_2_clk (ad9361_2_clk ), // 48MHz 41.6667MHz
|
||||
.ad9361_2_clk_2x (ad9361_2_clk_2x ), // 96MHz 83.3333MHz
|
||||
.ad9361_2_clk_3x (ad9361_2_clk_3x ), // 144MHz 125MHz
|
||||
.ad9361_2_clk_4x (ad9361_2_clk_4x ), // 192MHz 166.6667MHz
|
||||
.ad9361_2_clk_ld (ad9361_2_clk_ld ), // ad9361-2 clock group locked indicator
|
||||
|
||||
// phased-array & rf control clocks
|
||||
.clk_96m (clk_96m ),
|
||||
.clk_48m (clk_48m ),
|
||||
.clk_32m (clk_32m ),
|
||||
.clk_19p2m (clk_19p2m )
|
||||
);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Block Design Interface ////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// gpio
|
||||
wire [47:0] gpio_i;
|
||||
wire [47:0] gpio_o;
|
||||
wire [47:0] gpio_t;
|
||||
wire ad9361_rx_fifo_rst;
|
||||
wire ad9361_1_cal_start;
|
||||
wire ad9361_1_cal_done;
|
||||
wire ad9361_2_cal_start;
|
||||
wire ad9361_2_cal_done;
|
||||
wire ad9361_cal_result;
|
||||
wire ad9361_recal;
|
||||
|
||||
assign gpio_i[47:47] = gpio_o[47:47];
|
||||
|
||||
// hmc7044
|
||||
assign hmc7044_reset = gpio_o[ 0]; // hmc7044 reset
|
||||
assign hmc7044_sync = gpio_o[ 1]; // hmc7044 multichip synchronization
|
||||
assign hmc7044_gpio[0] = gpio_t[ 2] ? gpio_i[ 2] : gpio_o[ 2];
|
||||
assign hmc7044_gpio[1] = gpio_t[ 3] ? gpio_i[ 3] : gpio_o[ 3];
|
||||
assign hmc7044_gpio[2] = gpio_t[ 4] ? gpio_i[ 4] : gpio_o[ 4];
|
||||
assign hmc7044_gpio[3] = gpio_t[ 5] ? gpio_i[ 5] : gpio_o[ 5];
|
||||
// ad9361-1
|
||||
assign ad9361_1_txnrx = gpio_o[ 6]; // ad9361 enable state machine control
|
||||
assign ad9361_1_enable = gpio_o[ 7]; // ad9361 enable state machine control
|
||||
assign ad9361_1_en_agc = gpio_o[ 8]; // ad9361 agc control
|
||||
assign ad9361_1_reset_b = gpio_o[ 9]; // ad9361 reset
|
||||
assign ad9361_1_ctrl_out = gpio_o[17:10];
|
||||
assign gpio_i[21:18] = ad9361_1_ctrl_in;
|
||||
// ad9361-2
|
||||
assign ad9361_2_txnrx = gpio_o[22]; // ad9361 enable state machine control
|
||||
assign ad9361_2_enable = gpio_o[23]; // ad9361 enable state machine control
|
||||
assign ad9361_2_en_agc = gpio_o[24]; // ad9361 agc control
|
||||
assign ad9361_2_reset_b = gpio_o[25]; // ad9361 reset
|
||||
assign ad9361_2_ctrl_out = gpio_o[33:26];
|
||||
assign gpio_i[37:34] = ad9361_2_ctrl_in;
|
||||
// ad9361 multichip sync
|
||||
assign ad9361_sync = gpio_o[38];
|
||||
assign ad9361_rx_fifo_rst = gpio_o[39];
|
||||
assign ad9361_1_cal_start = gpio_o[40];
|
||||
assign ad9361_2_cal_start = gpio_o[41];
|
||||
assign ad9361_recal = gpio_o[42];
|
||||
assign ad9361_tx_switch = gpio_o[43];
|
||||
assign gpio_i[44] = ad9361_1_cal_done;
|
||||
assign gpio_i[45] = ad9361_2_cal_done;
|
||||
assign gpio_i[46] = ad9361_cal_result;
|
||||
|
||||
// spi interface
|
||||
wire spi_sclk ;
|
||||
wire [ 2:0] spi_cs ;
|
||||
reg spi_sdi ;
|
||||
wire spi_sdo ;
|
||||
wire spi_sdo_t ;
|
||||
wire spi_three_wire;
|
||||
wire spi_active ;
|
||||
|
||||
// hmc7044 - three-wire spi
|
||||
assign hmc7044_spi_clk = spi_sclk;
|
||||
assign hmc7044_spi_csn = spi_cs[0];
|
||||
assign hmc7044_spi_sdio = spi_sdo_t ? 1'bz : spi_sdo;
|
||||
// ad9361-1 - three-wire spi or four-wire spi
|
||||
assign ad9361_1_spi_clk = spi_sclk;
|
||||
assign ad9361_1_spi_csn = spi_cs[1];
|
||||
assign ad9361_1_spi_mosi = spi_sdo_t ? 1'bz : spi_sdo;
|
||||
// ad9361-2 - three-wire spi or four-wire spi
|
||||
assign ad9361_2_spi_clk = spi_sclk;
|
||||
assign ad9361_2_spi_csn = spi_cs[2];
|
||||
assign ad9361_2_spi_mosi = spi_sdo_t ? 1'bz : spi_sdo;
|
||||
// select sdi signal
|
||||
always @(*) begin
|
||||
if (~hmc7044_spi_csn)
|
||||
spi_sdi = hmc7044_spi_sdio;
|
||||
else if (~ad9361_1_spi_csn)
|
||||
spi_sdi = spi_three_wire ? ad9361_1_spi_mosi : ad9361_1_spi_miso;
|
||||
else if (~ad9361_2_spi_csn)
|
||||
spi_sdi = spi_three_wire ? ad9361_2_spi_mosi : ad9361_2_spi_miso;
|
||||
else
|
||||
spi_sdi = 1'bz;
|
||||
end
|
||||
|
||||
// ps clock
|
||||
wire ps_clk_50M;
|
||||
wire ps_clk_200M;
|
||||
|
||||
system_bd_wrapper u_system_bd_wrapper
|
||||
(
|
||||
// ddr
|
||||
.ddr_addr (ddr_addr ), // inout [14:0]ddr_addr
|
||||
.ddr_ba (ddr_ba ), // inout [2:0]ddr_ba
|
||||
.ddr_cas_n (ddr_cas_n ), // inout ddr_cas_n
|
||||
.ddr_ck_n (ddr_ck_n ), // inout ddr_ck_n
|
||||
.ddr_ck_p (ddr_ck_p ), // inout ddr_ck_p
|
||||
.ddr_cke (ddr_cke ), // inout ddr_cke
|
||||
.ddr_cs_n (ddr_cs_n ), // inout ddr_cs_n
|
||||
.ddr_dm (ddr_dm ), // inout [3:0]ddr_dm
|
||||
.ddr_dq (ddr_dq ), // inout [31:0]ddr_dq
|
||||
.ddr_dqs_n (ddr_dqs_n ), // inout [3:0]ddr_dqs_n
|
||||
.ddr_dqs_p (ddr_dqs_p ), // inout [3:0]ddr_dqs_p
|
||||
.ddr_odt (ddr_odt ), // inout ddr_odt
|
||||
.ddr_ras_n (ddr_ras_n ), // inout ddr_ras_n
|
||||
.ddr_reset_n (ddr_reset_n ), // inout ddr_reset_n
|
||||
.ddr_we_n (ddr_we_n ), // inout ddr_we_n
|
||||
|
||||
// fixed-io
|
||||
.fixed_io_ddr_vrn (fixed_io_ddr_vrn ), // inout fixed_io_ddr_vrn
|
||||
.fixed_io_ddr_vrp (fixed_io_ddr_vrp ), // inout fixed_io_ddr_vrp
|
||||
.fixed_io_mio (fixed_io_mio ), // inout [53:0]fixed_io_mio
|
||||
.fixed_io_ps_clk (fixed_io_ps_clk ), // inout fixed_io_ps_clk
|
||||
.fixed_io_ps_porb (fixed_io_ps_porb ), // inout fixed_io_ps_porb
|
||||
.fixed_io_ps_srstb (fixed_io_ps_srstb ), // inout fixed_io_ps_srstb
|
||||
|
||||
// gpio, for control signals
|
||||
.gpio_i (gpio_i ), // input [47:0]gpio_i
|
||||
.gpio_o (gpio_o ), // output [47:0]gpio_o
|
||||
.gpio_t (gpio_t ), // output [47:0]gpio_t
|
||||
|
||||
// spi interface
|
||||
.spi_sclk (spi_sclk ), // output spi_sclk
|
||||
.spi_cs (spi_cs ), // output [2:0]spi_cs
|
||||
.spi_sdi (spi_sdi ), // input [0:0]spi_sdi
|
||||
.spi_sdo (spi_sdo ), // output spi_sdo
|
||||
.spi_sdo_t (spi_sdo_t ), // output spi_sdo_t
|
||||
.spi_three_wire (spi_three_wire ), // output spi_three_wire
|
||||
.spi_active (spi_active ), // output spi_active
|
||||
|
||||
// ps clock
|
||||
.ps_clk_50M (ps_clk_50M ), // output ps_clk_50M
|
||||
.ps_clk_200M (ps_clk_200M ) // output ps_clk_200M
|
||||
);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////// RF control //////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// rf auto switch frequency function
|
||||
wire rf_auto_start_vio ;
|
||||
wire rf_ctrl_mode_vio ;
|
||||
wire switch_next_freq_vio;
|
||||
wire switch_last_freq_vio;
|
||||
wire [15:0] cnt_valid_to_switch_vio;
|
||||
|
||||
(*dont_touch = "true"*) wire vio_switch;
|
||||
(*dont_touch = "true"*) wire vio_switch_auto;
|
||||
(*dont_touch = "true"*) wire [15:0] vio_frequency;
|
||||
(*dont_touch = "true"*) wire [15:0] vio_frequency_auto;
|
||||
wire hop_words_valid_auto;
|
||||
|
||||
rf_auto_switch_freq u_rf_auto_switch_freq(
|
||||
.clk (clk_48m ),
|
||||
.rst (sys_rst ),
|
||||
// vio control
|
||||
.start (rf_auto_start_vio ), // rise-edge active, if start, change freq word to the first
|
||||
.rf_ctrl_mode (rf_ctrl_mode_vio ), // 1 : auto switch, 0 : manual switch
|
||||
.switch_next_freq (switch_next_freq_vio ), // rise-edge active
|
||||
.switch_last_freq (switch_last_freq_vio ), // rise-edge active
|
||||
.cnt_valid_to_switch (cnt_valid_to_switch_vio ),
|
||||
// input
|
||||
.freq_hop_words_vio (vio_frequency[15:0] ),
|
||||
.hop_words_valid_vio (1'b0 ),
|
||||
.freq_hop_switch_vio (vio_switch ),
|
||||
// output
|
||||
.freq_hop_words_auto (vio_frequency_auto[15:0] ),
|
||||
.hop_words_valid_auto (hop_words_valid_auto ),
|
||||
.freq_hop_switch_auto (vio_switch_auto )
|
||||
);
|
||||
|
||||
ant_rf_ctrl u_ant_rf_ctrl
|
||||
(
|
||||
.clk_48m (clk_48m ), // input clk_48m
|
||||
.clk_96m (clk_96m ), // input clk_96m
|
||||
.clk_32m (clk_32m ), // input clk_32m
|
||||
.clk_19p2m (clk_19p2m ), // input clk_19p2m
|
||||
.sys_rst (ant_rst ), // input sys_rst
|
||||
|
||||
.ant_clk (ant_clk ), // output ant_clk
|
||||
.ant_en (ant_en ), // output ant_en
|
||||
.ant_data (ant_data ), // output ant_data
|
||||
.ant_tr (ant_tr ), // output ant_tr
|
||||
.ant_dary (ant_dary ), // output ant_dary
|
||||
.ant_dout (ant_dout ), // input ant_dout
|
||||
|
||||
.rf_standby (rf_standby ), // output rf_standby
|
||||
.rf_sw_pll (rf_sw_pll ), // output rf_sw_pll
|
||||
.rf_t (rf_t ), // output rf_t
|
||||
.rf_r (rf_r ), // output rf_r
|
||||
.rf_sw_bpf (rf_sw_bpf ), // output rf_sw_bpf
|
||||
.rf_sclk1 (rf_sclk1 ), // output rf_sclk1
|
||||
.rf_sdio1 (rf_sdio1 ), // output rf_sdio1
|
||||
.rf_cs1 (rf_cs1 ), // output rf_cs1
|
||||
.rf_ld1 (rf_ld1 ), // input rf_ld1
|
||||
.rf_sclk2 (rf_sclk2 ), // output rf_sclk2
|
||||
.rf_sdio2 (rf_sdio2 ), // output rf_sdio2
|
||||
.rf_cs2 (rf_cs2 ), // output rf_cs2
|
||||
.rf_ld2 (rf_ld2 ), // input rf_ld2
|
||||
.rf_sclk3 (rf_sclk3 ), // output rf_sclk3
|
||||
.rf_sdio3 (rf_sdio3 ), // output rf_sdio3
|
||||
.rf_cs3 (rf_cs3 ), // output rf_cs3
|
||||
.rf_ld3 (rf_ld3 ), // input rf_ld3
|
||||
.rf_tmgc_16 (rf_tmgc_16 ), // output rf_tmgc_16
|
||||
.rf_tmgc_8 (rf_tmgc_8 ), // output rf_tmgc_8
|
||||
.rf_tmgc_4 (rf_tmgc_4 ), // output rf_tmgc_4
|
||||
.rf_tmgc_2 (rf_tmgc_2 ), // output rf_tmgc_2
|
||||
.rf_tmgc_1 (rf_tmgc_1 ), // output rf_tmgc_1
|
||||
.rf_rmgc_16 (rf_rmgc_16 ), // output rf_rmgc_16
|
||||
.rf_rmgc_8 (rf_rmgc_8 ), // output rf_rmgc_8
|
||||
.rf_rmgc_4 (rf_rmgc_4 ), // output rf_rmgc_4
|
||||
.rf_rmgc_2 (rf_rmgc_2 ), // output rf_rmgc_2
|
||||
.rf_rmgc_1 (rf_rmgc_1 ), // output rf_rmgc_1
|
||||
.rf_enable (rf_enable ), // output rf_enable
|
||||
.rf_sc (rf_sc ), // output rf_sc
|
||||
.rf_sd (rf_sd ), // output rf_sd
|
||||
.rf_endsyn (rf_endsyn ), // output rf_endsyn
|
||||
.rf_sdout (rf_sdout ), // input rf_sdout
|
||||
.rf_dq_wd (rf_dq_wd ), // inout rf_dq_wd
|
||||
.rf_sw_rx (rf_sw_rx ) // output rf_sw_rx
|
||||
);
|
||||
|
||||
assign u_ant_rf_ctrl.vio_switch = vio_switch_auto ;
|
||||
assign u_ant_rf_ctrl.vio_frequency = vio_frequency_auto;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////// Tx Signal ///////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// baseband signal
|
||||
wire [11:0] tx_data_i;
|
||||
wire [11:0] tx_data_q;
|
||||
wire [11:0] tx_ch1_i;
|
||||
wire [11:0] tx_ch1_q;
|
||||
wire [11:0] tx_ch2_i;
|
||||
wire [11:0] tx_ch2_q;
|
||||
|
||||
ad9361_tx_map_cmos_dual u_ad9361_tx_map
|
||||
(
|
||||
.clk_2x_in (ad9361_1_clk_2x ), // input clk_2x_in
|
||||
.clk_in_rst (~ad9361_1_clk_ld ), // input clk_in_rst
|
||||
|
||||
.tx_data_clk (sys_clk ), // input tx_data_clk
|
||||
.tx_data_clk_rst(sys_rst ), // input tx_data_clk_rst
|
||||
|
||||
.tx_ch1_i (tx_ch1_i ), // input [11:0] tx_ch1_i
|
||||
.tx_ch1_q (tx_ch1_q ), // input [11:0] tx_ch1_q
|
||||
.tx_ch2_i (tx_ch2_i ), // input [11:0] tx_ch2_i
|
||||
.tx_ch2_q (tx_ch2_q ), // input [11:0] tx_ch2_q
|
||||
.clk_out (ad9361_1_tx_fb_clk ), // output clk_out
|
||||
.tx_frame (ad9361_1_tx_frame ), // output tx_frame
|
||||
.tx_data (ad9361_1_tx_data ) // output [11:0] tx_data
|
||||
);
|
||||
|
||||
assign ad9361_2_tx_fb_clk = ad9361_1_tx_fb_clk;
|
||||
// assign ad9361_2_tx_frame = ad9361_1_tx_frame ;
|
||||
// assign ad9361_2_tx_data = ad9361_1_tx_data ;
|
||||
|
||||
tx_pre_process #(
|
||||
.CAL_MOD_FINE (0)
|
||||
) u_tx_pre_process
|
||||
(
|
||||
// clock & reset
|
||||
.clk (sys_clk ),
|
||||
.rst (sys_rst ),
|
||||
// input data
|
||||
.tx_data_ch1_i (tx_data_i ),
|
||||
.tx_data_ch1_q (tx_data_q ),
|
||||
.tx_data_ch2_i (tx_data_i ),
|
||||
.tx_data_ch2_q (tx_data_q ),
|
||||
// ad9361 calibration interface
|
||||
.ad9361_tx_switch (ad9361_tx_switch ),
|
||||
//
|
||||
.bb_rshift (1'b0 ),
|
||||
// output data
|
||||
.tx_ch1_i (tx_ch1_i ),
|
||||
.tx_ch1_q (tx_ch1_q ),
|
||||
.tx_ch2_i (tx_ch2_i ),
|
||||
.tx_ch2_q (tx_ch2_q )
|
||||
);
|
||||
|
||||
// <--------------------------------------------------------------------------->
|
||||
// <--------------------- insert transmitter logic below ---------------------->
|
||||
// <--------------------------------------------------------------------------->
|
||||
wire [ 1:0] waveform_sel;
|
||||
wire sweep_on ;
|
||||
wire [31:0] freq_set ;
|
||||
wire [ 1:0] iq_sel ;
|
||||
wire [ 3:0] bb_rshift ;
|
||||
|
||||
tx_qpsk u_tx_qpsk
|
||||
(
|
||||
.clk (sys_clk ), // input clk
|
||||
.rst (sys_rst ), // input rst
|
||||
.tx_data_i (tx_data_i ), // output [11:0] tx_data_i
|
||||
.tx_data_q (tx_data_q ), // output [11:0] tx_data_q
|
||||
// debug ports
|
||||
.waveform_sel (waveform_sel[1:0] ), // input [ 1:0] waveform_sel
|
||||
.sweep_on (sweep_on ), // input sweep_on
|
||||
.freq_set (freq_set ), // input [31:0] freq_set
|
||||
.iq_sel (iq_sel ), // input [ 1:0] iq_sel
|
||||
.bb_rshift (bb_rshift ) // input [ 3:0] bb_rshift
|
||||
);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////// Rx Signals //////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
wire [11:0] rx_ch1_i, rx_ch1_q;
|
||||
wire [11:0] rx_ch2_i, rx_ch2_q;
|
||||
wire [11:0] rx_ch3_i, rx_ch3_q;
|
||||
wire [11:0] rx_ch4_i, rx_ch4_q;
|
||||
|
||||
wire [11:0] rx_cal_ch1_i, rx_cal_ch1_q;
|
||||
wire [11:0] rx_cal_ch2_i, rx_cal_ch2_q;
|
||||
wire [11:0] rx_cal_ch3_i, rx_cal_ch3_q;
|
||||
wire [11:0] rx_cal_ch4_i, rx_cal_ch4_q;
|
||||
|
||||
ad9361_rx_map_cmos_dual u_ad9361_1_rx_map
|
||||
(
|
||||
.clk_2x_in (ad9361_1_clk_2x ), // input clk_2x_in
|
||||
.clk_in_rst (~ad9361_1_clk_ld ), // input clk_in_rst
|
||||
|
||||
.rx_data_clk (sys_clk ), // input rx_data_clk
|
||||
.rx_data_clk_rst(sys_rst ), // input rx_data_clk_rst
|
||||
|
||||
.rx_fifo_rst (ad9361_rx_fifo_rst ), // input rx_fifo_rst
|
||||
|
||||
.rx_frame (ad9361_1_rx_frame ), // input rx_frame
|
||||
.rx_data (ad9361_1_rx_data ), // input [11:0] rx_data
|
||||
.rx_ch1_i (rx_ch1_i ), // output [11:0] rx_ch1_i
|
||||
.rx_ch1_q (rx_ch1_q ), // output [11:0] rx_ch1_q
|
||||
.rx_ch2_i (rx_ch2_i ), // output [11:0] rx_ch2_i
|
||||
.rx_ch2_q (rx_ch2_q ) // output [11:0] rx_ch2_q
|
||||
);
|
||||
|
||||
ad9361_rx_map_cmos_dual u_ad9361_2_rx_map
|
||||
(
|
||||
.clk_2x_in (ad9361_2_clk_2x ), // input clk_2x_in
|
||||
.clk_in_rst (~ad9361_2_clk_ld ), // input clk_in_rst
|
||||
|
||||
.rx_data_clk (sys_clk ), // input rx_data_clk
|
||||
.rx_data_clk_rst(sys_rst ), // input rx_data_clk_rst
|
||||
|
||||
.rx_fifo_rst (ad9361_rx_fifo_rst ), // input rx_fifo_rst
|
||||
|
||||
.rx_frame (ad9361_2_rx_frame ), // input rx_frame
|
||||
.rx_data (ad9361_2_rx_data ), // input [11:0] rx_data
|
||||
.rx_ch1_i (rx_ch3_i ), // output [11:0] rx_ch1_i
|
||||
.rx_ch1_q (rx_ch3_q ), // output [11:0] rx_ch1_q
|
||||
.rx_ch2_i (rx_ch4_i ), // output [11:0] rx_ch2_i
|
||||
.rx_ch2_q (rx_ch4_q ) // output [11:0] rx_ch2_q
|
||||
);
|
||||
|
||||
ad9361_phase_cal_coarse u_ad9361_phase_cal
|
||||
(
|
||||
// clock & reset
|
||||
.clk (sys_clk ), // input clk
|
||||
.rst (sys_rst ), // input rst
|
||||
// control interface
|
||||
.ad9361_1_cal_start (ad9361_1_cal_start ), // input ad9361_1_cal_start
|
||||
.ad9361_1_cal_done (ad9361_1_cal_done ), // output ad9361_1_cal_done
|
||||
.ad9361_2_cal_start (ad9361_2_cal_start ), // input ad9361_2_cal_start
|
||||
.ad9361_2_cal_done (ad9361_2_cal_done ), // output ad9361_2_cal_done
|
||||
.ad9361_cal_result (ad9361_cal_result ), // output ad9361_cal_result
|
||||
.ad9361_cal_valid (ad9361_cal_valid ), // output ad9361_cal_valid
|
||||
.ad9361_recal (ad9361_recal ), // input ad9361_recal
|
||||
// input data interface
|
||||
.rx_ch1_i (rx_ch1_i ), // input [ADC_DATA_WIDTH-1:0] rx_ch1_i
|
||||
.rx_ch1_q (rx_ch1_q ), // input [ADC_DATA_WIDTH-1:0] rx_ch1_q
|
||||
.rx_ch2_i (rx_ch2_i ), // input [ADC_DATA_WIDTH-1:0] rx_ch2_i
|
||||
.rx_ch2_q (rx_ch2_q ), // input [ADC_DATA_WIDTH-1:0] rx_ch2_q
|
||||
.rx_ch3_i (rx_ch3_i ), // input [ADC_DATA_WIDTH-1:0] rx_ch3_i
|
||||
.rx_ch3_q (rx_ch3_q ), // input [ADC_DATA_WIDTH-1:0] rx_ch3_q
|
||||
.rx_ch4_i (rx_ch4_i ), // input [ADC_DATA_WIDTH-1:0] rx_ch4_i
|
||||
.rx_ch4_q (rx_ch4_q ), // input [ADC_DATA_WIDTH-1:0] rx_ch4_q
|
||||
// output data interface
|
||||
.rx_cal_ch1_i (rx_cal_ch1_i ), // output [ADC_DATA_WIDTH-1:0] rx_cal_ch1_i
|
||||
.rx_cal_ch1_q (rx_cal_ch1_q ), // output [ADC_DATA_WIDTH-1:0] rx_cal_ch1_q
|
||||
.rx_cal_ch2_i (rx_cal_ch2_i ), // output [ADC_DATA_WIDTH-1:0] rx_cal_ch2_i
|
||||
.rx_cal_ch2_q (rx_cal_ch2_q ), // output [ADC_DATA_WIDTH-1:0] rx_cal_ch2_q
|
||||
.rx_cal_ch3_i (rx_cal_ch3_i ), // output [ADC_DATA_WIDTH-1:0] rx_cal_ch3_i
|
||||
.rx_cal_ch3_q (rx_cal_ch3_q ), // output [ADC_DATA_WIDTH-1:0] rx_cal_ch3_q
|
||||
.rx_cal_ch4_i (rx_cal_ch4_i ), // output [ADC_DATA_WIDTH-1:0] rx_cal_ch4_i
|
||||
.rx_cal_ch4_q (rx_cal_ch4_q ) // output [ADC_DATA_WIDTH-1:0] rx_cal_ch4_q
|
||||
);
|
||||
|
||||
// <--------------------------------------------------------------------------->
|
||||
// <----------------------- insert receiver logic below ----------------------->
|
||||
// <--------------------------------------------------------------------------->
|
||||
wire freq_comp_start ;
|
||||
wire freq_comp_busy ;
|
||||
wire [7:0] dmf_num_per_ch ;
|
||||
wire [31:0] freq_manual ;
|
||||
wire freq_manual_en ;
|
||||
wire [31:0] freq_target ;
|
||||
wire freq_target_valid;
|
||||
|
||||
wire ch_peak_valid ;
|
||||
wire [17:0] ch1_peak_value_abs ;
|
||||
wire [17:0] ch1_peak_value_i ;
|
||||
wire [17:0] ch1_peak_value_q ;
|
||||
wire [ 9:0] ch1_peak_index ;
|
||||
wire [17:0] ch2_peak_value_abs ;
|
||||
wire [17:0] ch2_peak_value_i ;
|
||||
wire [17:0] ch2_peak_value_q ;
|
||||
wire [ 9:0] ch2_peak_index ;
|
||||
wire [17:0] ch3_peak_value_abs ;
|
||||
wire [17:0] ch3_peak_value_i ;
|
||||
wire [17:0] ch3_peak_value_q ;
|
||||
wire [ 9:0] ch3_peak_index ;
|
||||
wire [17:0] ch4_peak_value_abs ;
|
||||
wire [17:0] ch4_peak_value_i ;
|
||||
wire [17:0] ch4_peak_value_q ;
|
||||
wire [ 9:0] ch4_peak_index ;
|
||||
|
||||
freq_comp #(
|
||||
.FREQ_WORD_LOWER (-4194304 ),
|
||||
.FREQ_WORD_UPPER (4194303 ),
|
||||
.FREQ_WORD_STEP (1024 )
|
||||
) u_freq_comp
|
||||
(
|
||||
// clock & reset
|
||||
.clk (sys_clk ), // input clk
|
||||
.rst (sys_rst ), // input rst
|
||||
|
||||
// input data
|
||||
.freq_comp_start (freq_comp_start ), // input freq_comp_start
|
||||
.freq_comp_busy (freq_comp_busy ), // output freq_comp_busy
|
||||
|
||||
.rx_data_valid (ad9361_cal_valid ), // input rx_data_valid
|
||||
.rx_ch1_i (rx_cal_ch1_i ), // input [DATA_I_WIDTH-1 : 0] rx_ch1_i
|
||||
.rx_ch1_q (rx_cal_ch1_q ), // input [DATA_I_WIDTH-1 : 0] rx_ch1_q
|
||||
.rx_ch2_i (rx_cal_ch2_i ), // input [DATA_I_WIDTH-1 : 0] rx_ch2_i
|
||||
.rx_ch2_q (rx_cal_ch2_q ), // input [DATA_I_WIDTH-1 : 0] rx_ch2_q
|
||||
.rx_ch3_i (rx_cal_ch3_i ), // input [DATA_I_WIDTH-1 : 0] rx_ch3_i
|
||||
.rx_ch3_q (rx_cal_ch3_q ), // input [DATA_I_WIDTH-1 : 0] rx_ch3_q
|
||||
.rx_ch4_i (rx_cal_ch4_i ), // input [DATA_I_WIDTH-1 : 0] rx_ch4_i
|
||||
.rx_ch4_q (rx_cal_ch4_q ), // input [DATA_I_WIDTH-1 : 0] rx_ch4_q
|
||||
|
||||
// configuration
|
||||
.dmf_num_per_ch (dmf_num_per_ch ), // input [$clog2(MAX_DMF_NUM)-1 : 0] dmf_num_per_ch
|
||||
|
||||
.freq_manual (freq_manual ), // input [FREQ_WORD_WIDTH-1 : 0] freq_manual
|
||||
.freq_manual_en (freq_manual_en ), // input freq_manual_en
|
||||
|
||||
// output frequency result
|
||||
.freq_target (freq_target ), // output [FREQ_WORD_WIDTH-1 : 0] freq_target
|
||||
.freq_target_valid (freq_target_valid ), // output freq_target_valid
|
||||
|
||||
// output dmf result
|
||||
.ch_peak_valid (ch_peak_valid ), // output ch_peak_valid
|
||||
|
||||
.ch1_peak_value_abs (ch1_peak_value_abs ), // output reg [DATA_O_WIDTH-1 : 0] ch1_peak_value_abs
|
||||
.ch1_peak_value_i (ch1_peak_value_i ), // output reg [DATA_O_WIDTH-1 : 0] ch1_peak_value_i
|
||||
.ch1_peak_value_q (ch1_peak_value_q ), // output reg [DATA_O_WIDTH-1 : 0] ch1_peak_value_q
|
||||
.ch1_peak_index (ch1_peak_index ), // output reg [$clog2(PRBS_POS-1) : 0] ch1_peak_index
|
||||
|
||||
.ch2_peak_value_abs (ch2_peak_value_abs ), // output reg [DATA_O_WIDTH-1 : 0] ch2_peak_value_abs
|
||||
.ch2_peak_value_i (ch2_peak_value_i ), // output reg [DATA_O_WIDTH-1 : 0] ch2_peak_value_i
|
||||
.ch2_peak_value_q (ch2_peak_value_q ), // output reg [DATA_O_WIDTH-1 : 0] ch2_peak_value_q
|
||||
.ch2_peak_index (ch2_peak_index ), // output reg [$clog2(PRBS_POS-1) : 0] ch2_peak_index
|
||||
|
||||
.ch3_peak_value_abs (ch3_peak_value_abs ), // output reg [DATA_O_WIDTH-1 : 0] ch3_peak_value_abs
|
||||
.ch3_peak_value_i (ch3_peak_value_i ), // output reg [DATA_O_WIDTH-1 : 0] ch3_peak_value_i
|
||||
.ch3_peak_value_q (ch3_peak_value_q ), // output reg [DATA_O_WIDTH-1 : 0] ch3_peak_value_q
|
||||
.ch3_peak_index (ch3_peak_index ), // output reg [$clog2(PRBS_POS-1) : 0] ch3_peak_index
|
||||
|
||||
.ch4_peak_value_abs (ch4_peak_value_abs ), // output reg [DATA_O_WIDTH-1 : 0] ch4_peak_value_abs
|
||||
.ch4_peak_value_i (ch4_peak_value_i ), // output reg [DATA_O_WIDTH-1 : 0] ch4_peak_value_i
|
||||
.ch4_peak_value_q (ch4_peak_value_q ), // output reg [DATA_O_WIDTH-1 : 0] ch4_peak_value_q
|
||||
.ch4_peak_index (ch4_peak_index ) // output reg [$clog2(PRBS_POS-1) : 0] ch4_peak_index
|
||||
);
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////// ILAs and VIOs /////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
vio_clk_ld_rd u_vio_clk_ld_rd
|
||||
(
|
||||
.clk (sys_clk ),
|
||||
.probe_in0 (ad9361_1_clk_ld),
|
||||
.probe_in1 (ad9361_2_clk_ld)
|
||||
);
|
||||
|
||||
vio_rfcontrl u_vio_rfcontrl
|
||||
(
|
||||
.clk (clk_48m ), // input wire clk
|
||||
.probe_out0 (vio_switch ), // output wire [0 : 0] probe_out0
|
||||
.probe_out1 (u_ant_rf_ctrl.vio_trdirection ), // output wire [0 : 0] probe_out1
|
||||
.probe_out2 (vio_frequency[15:0] ), // output wire [15 : 0] probe_out2
|
||||
.probe_out3 (u_ant_rf_ctrl.vio_emitMGC[7:0] ), // output wire [7 : 0] probe_out3
|
||||
.probe_out4 (u_ant_rf_ctrl.vio_ch01MGC[3:0] ), // output wire [3 : 0] probe_out4
|
||||
.probe_out5 (u_ant_rf_ctrl.vio_ch02MGC[3:0] ), // output wire [3 : 0] probe_out5
|
||||
.probe_out6 (u_ant_rf_ctrl.vio_ch03MGC[3:0] ), // output wire [3 : 0] probe_out6
|
||||
.probe_out7 (u_ant_rf_ctrl.vio_ch04MGC[3:0] ), // output wire [3 : 0] probe_out7
|
||||
.probe_out8 (u_ant_rf_ctrl.vio_recvMGC[7:0] ), // output wire [7 : 0] probe_out8
|
||||
.probe_out9 (u_ant_rf_ctrl.vio_AntMod[7:0] ), // output wire [7 : 0] probe_out9
|
||||
.probe_out10(u_ant_rf_ctrl.vio_AntOffAxis[15:0] ), // output wire [15 : 0] probe_out10
|
||||
.probe_out11(u_ant_rf_ctrl.vio_AntYaw[15:0] ), // output wire [15 : 0] probe_out11
|
||||
.probe_out12(u_ant_rf_ctrl.vio_PrecessTime[15:0] ), // output wire [15 : 0] probe_out12
|
||||
.probe_out13(rf_auto_start_vio ), // output wire [0 : 0] probe_out13
|
||||
.probe_out14(rf_ctrl_mode_vio ), // output wire [0 : 0] probe_out14
|
||||
.probe_out15(switch_next_freq_vio ), // output wire [0 : 0] probe_out15
|
||||
.probe_out16(switch_last_freq_vio ), // output wire [0 : 0] probe_out16
|
||||
.probe_out17(cnt_valid_to_switch_vio[15:0] ), // output wire [15: 0] probe_out17
|
||||
.probe_in0 (vio_frequency_auto[15:0] ) // input wire [10: 0] probe_in0
|
||||
);
|
||||
|
||||
vio_ant_test u_vio_ant_test
|
||||
(
|
||||
.clk (clk_48m ),
|
||||
.probe_out0 (u_ant_rf_ctrl.vio_mode_ant ),
|
||||
.probe_out1 (u_ant_rf_ctrl.vio_hop_start ),
|
||||
.probe_out2 (u_ant_rf_ctrl.vio_standby ),
|
||||
.probe_out3 (u_ant_rf_ctrl.vio_hoptime[15:0] )
|
||||
);
|
||||
|
||||
ila_rfcontrl u_ila_rfcontrl
|
||||
(
|
||||
.clk (clk_48m ), // input wire clk
|
||||
.probe0 (u_ant_rf_ctrl.SPI_MOSI_F ), // input wire [0:0]
|
||||
.probe1 (u_ant_rf_ctrl.SPI_MISO_F ), // input wire [0:0]
|
||||
.probe2 (u_ant_rf_ctrl.SPI_SYN_F ), // input wire [0:0]
|
||||
.probe3 (u_ant_rf_ctrl.TP_EN_F ), // input wire [0:0]
|
||||
.probe4 (u_ant_rf_ctrl.TR_MGC_F ), // input wire [0:0]
|
||||
.probe5 (u_ant_rf_ctrl.CAL_F ), // input wire [0:0]
|
||||
.probe6 (u_ant_rf_ctrl.PRF ), // input wire [0:0]
|
||||
.probe7 (u_ant_rf_ctrl.rf_standby ), // input wire [0:0]
|
||||
.probe8 (u_ant_rf_ctrl.rf_sw_pll ), // input wire [0:0]
|
||||
.probe9 (u_ant_rf_ctrl.rf_t ), // input wire [0:0]
|
||||
.probe10(u_ant_rf_ctrl.rf_r ), // input wire [0:0]
|
||||
.probe11(u_ant_rf_ctrl.rf_sw_bpf ), // input wire [0:0]
|
||||
.probe12(u_ant_rf_ctrl.rf_sclk1 ), // input wire [0:0]
|
||||
.probe13(u_ant_rf_ctrl.rf_sdio1 ), // input wire [0:0]
|
||||
.probe14(u_ant_rf_ctrl.rf_cs1 ), // input wire [0:0]
|
||||
.probe15(u_ant_rf_ctrl.rf_ld1 ), // input wire [0:0]
|
||||
.probe16(u_ant_rf_ctrl.rf_sclk2 ), // input wire [0:0]
|
||||
.probe17(u_ant_rf_ctrl.rf_sdio2 ), // input wire [0:0]
|
||||
.probe18(u_ant_rf_ctrl.rf_cs2 ), // input wire [0:0]
|
||||
.probe19(u_ant_rf_ctrl.rf_ld2 ), // input wire [0:0]
|
||||
.probe20(u_ant_rf_ctrl.rf_sclk3 ), // input wire [0:0]
|
||||
.probe21(u_ant_rf_ctrl.rf_sdio3 ), // input wire [0:0]
|
||||
.probe22(u_ant_rf_ctrl.rf_cs3 ), // input wire [0:0]
|
||||
.probe23(u_ant_rf_ctrl.rf_ld3 ), // input wire [0:0]
|
||||
.probe24(u_ant_rf_ctrl.rf_tmgc_16 ), // input wire [0:0]
|
||||
.probe25(u_ant_rf_ctrl.rf_tmgc_8 ), // input wire [0:0]
|
||||
.probe26(u_ant_rf_ctrl.rf_tmgc_4 ), // input wire [0:0]
|
||||
.probe27(u_ant_rf_ctrl.rf_tmgc_2 ), // input wire [0:0]
|
||||
.probe28(u_ant_rf_ctrl.rf_tmgc_1 ), // input wire [0:0]
|
||||
.probe29(u_ant_rf_ctrl.rf_rmgc_16 ), // input wire [0:0]
|
||||
.probe30(u_ant_rf_ctrl.rf_rmgc_8 ), // input wire [0:0]
|
||||
.probe31(u_ant_rf_ctrl.rf_rmgc_4 ), // input wire [0:0]
|
||||
.probe32(u_ant_rf_ctrl.rf_rmgc_2 ), // input wire [0:0]
|
||||
.probe33(u_ant_rf_ctrl.rf_rmgc_1 ), // input wire [0:0]
|
||||
.probe34(u_ant_rf_ctrl.rf_enable ), // input wire [0:0]
|
||||
.probe35(u_ant_rf_ctrl.rf_sc ), // input wire [0:0]
|
||||
.probe36(u_ant_rf_ctrl.rf_sd ), // input wire [0:0]
|
||||
.probe37(u_ant_rf_ctrl.rf_endsyn ), // input wire [0:0]
|
||||
.probe38(u_ant_rf_ctrl.rf_sdout ), // input wire [0:0]
|
||||
.probe39(u_ant_rf_ctrl.state_rfdata[1:0] ), // input wire [0:0]
|
||||
.probe40(u_ant_rf_ctrl.RF_temperature[7:0] ), // input wire [0:0]
|
||||
.probe41(u_ant_rf_ctrl.RF_IFlocked[7:0] ), // input wire [0:0]
|
||||
.probe42(u_ant_rf_ctrl.RF_RFAlocked[7:0] ), // input wire [0:0]
|
||||
.probe43(u_ant_rf_ctrl.RF_RFBlocked[7:0] ), // input wire [0:0]
|
||||
.probe44(u_ant_rf_ctrl.RF_ch1mgc[3:0] ), // input wire [0:0]
|
||||
.probe45(u_ant_rf_ctrl.RF_ch2mgc[3:0] ), // input wire [0:0]
|
||||
.probe46(u_ant_rf_ctrl.RF_ch3mgc[3:0] ), // input wire [0:0]
|
||||
.probe47(u_ant_rf_ctrl.RF_ch4mgc[3:0] ), // input wire [0:0]
|
||||
.probe48(u_ant_rf_ctrl.RF_Framecount[31:0] ), // input wire [0:0]
|
||||
.probe49(u_ant_rf_ctrl.RF_RecvWord[95:0] ) // input wire [0:0]
|
||||
);
|
||||
|
||||
ila_AntCtrl u_ila_AntCtrl
|
||||
(
|
||||
.clk (clk_96m ), // input wire clk
|
||||
.probe0 (u_ant_rf_ctrl.ant_clk ), // input wire [0:0] probe0
|
||||
.probe1 (u_ant_rf_ctrl.ant_en ), // input wire [0:0] probe1
|
||||
.probe2 (u_ant_rf_ctrl.ant_data ), // input wire [0:0] probe2
|
||||
.probe3 (u_ant_rf_ctrl.ant_tr ), // input wire [0:0] probe3
|
||||
.probe4 (u_ant_rf_ctrl.ant_dary ), // input wire [0:0] probe4
|
||||
.probe5 (u_ant_rf_ctrl.ant_dout ), // input wire [0:0] probe5
|
||||
.probe6 (u_ant_rf_ctrl.state_antdata[1:0] ), // input wire [0:0] probe5
|
||||
.probe7 (u_ant_rf_ctrl.Ant_Ant_Volt[7:0] ), // input wire [0:0] probe5
|
||||
.probe8 (u_ant_rf_ctrl.Ant_RF_Volt[7:0] ), // input wire [0:0] probe5
|
||||
.probe9 (u_ant_rf_ctrl.Ant_IF_Volt[7:0] ), // input wire [0:0] probe5
|
||||
.probe10(u_ant_rf_ctrl.Ant_state[7:0] ), // input wire [0:0] probe5
|
||||
.probe11(u_ant_rf_ctrl.Ant_Framecount[31:0] ), // input wire [0:0] probe5
|
||||
.probe12(u_ant_rf_ctrl.Ant_RecvWord[95:0] ) // input wire [0:0] probe5
|
||||
);
|
||||
|
||||
vio_rf_rd u_vio_rf_rd (
|
||||
.clk (clk_96m ), // input wire clk
|
||||
.probe_in0 (u_ant_rf_ctrl.RF_temperature[7:0] ), // input wire [7 : 0] probe_in0
|
||||
.probe_in1 (u_ant_rf_ctrl.RF_IFlocked[7:0] ), // input wire [7 : 0] probe_in1
|
||||
.probe_in2 (u_ant_rf_ctrl.RF_RFAlocked[7:0] ), // input wire [7 : 0] probe_in2
|
||||
.probe_in3 (u_ant_rf_ctrl.RF_RFBlocked[7:0] ), // input wire [7 : 0] probe_in3
|
||||
.probe_in4 (u_ant_rf_ctrl.RF_ch1mgc[3:0] ), // input wire [3 : 0] probe_in4
|
||||
.probe_in5 (u_ant_rf_ctrl.RF_ch2mgc[3:0] ), // input wire [3 : 0] probe_in5
|
||||
.probe_in6 (u_ant_rf_ctrl.RF_ch3mgc[3:0] ), // input wire [3 : 0] probe_in6
|
||||
.probe_in7 (u_ant_rf_ctrl.RF_ch4mgc[3:0] ), // input wire [3 : 0] probe_in7
|
||||
.probe_in8 (u_ant_rf_ctrl.RF_Framecount[31:0] ), // input wire [31 : 0] probe_in8
|
||||
.probe_in9 (u_ant_rf_ctrl.RF_RecvWord_last ) // input wire [95 : 0] probe_in9
|
||||
);
|
||||
|
||||
vio_ant_rd u_vio_ant_rd (
|
||||
.clk (clk_96m ), // input wire clk
|
||||
.probe_in0 (u_ant_rf_ctrl.Ant_Ant_Volt[7:0] ), // input wire [7 : 0] probe_in0
|
||||
.probe_in1 (u_ant_rf_ctrl.Ant_RF_Volt[7:0] ), // input wire [7 : 0] probe_in1
|
||||
.probe_in2 (u_ant_rf_ctrl.Ant_IF_Volt[7:0] ), // input wire [7 : 0] probe_in2
|
||||
.probe_in3 (u_ant_rf_ctrl.Ant_state[7:0] ), // input wire [7 : 0] probe_in3
|
||||
.probe_in4 (u_ant_rf_ctrl.Ant_Framecount[31:0] ), // input wire [31 : 0] probe_in4
|
||||
.probe_in5 (u_ant_rf_ctrl.Ant_RecvWord_last ) // input wire [95 : 0] probe_in5
|
||||
);
|
||||
|
||||
ila_2x12x1024 u_ila_tx
|
||||
(
|
||||
.clk (sys_clk ), // input wire clk
|
||||
.probe0 (tx_ch1_i ), // input wire [11:0] probe0
|
||||
.probe1 (tx_ch1_q ) // input wire [11:0] probe1
|
||||
);
|
||||
|
||||
ila_8x12x8192 u_ila_rx
|
||||
(
|
||||
.clk (sys_clk ), // input wire clk
|
||||
.probe0 (rx_cal_ch1_i ), // input wire [11:0] probe0
|
||||
.probe1 (rx_cal_ch1_q ), // input wire [11:0] probe1
|
||||
.probe2 (rx_cal_ch2_i ), // input wire [11:0] probe2
|
||||
.probe3 (rx_cal_ch2_q ), // input wire [11:0] probe3
|
||||
.probe4 (rx_cal_ch3_i ), // input wire [11:0] probe4
|
||||
.probe5 (rx_cal_ch3_q ), // input wire [11:0] probe5
|
||||
.probe6 (rx_cal_ch4_i ), // input wire [11:0] probe6
|
||||
.probe7 (rx_cal_ch4_q ) // input wire [11:0] probe7
|
||||
);
|
||||
|
||||
ila_cal u_ila_cal
|
||||
(
|
||||
.clk (sys_clk ), // input wire clk
|
||||
.probe0 (u_ad9361_phase_cal.ad9361_1_cal_start_d2 ), // input wire [0:0] probe0
|
||||
.probe1 (u_ad9361_phase_cal.ad9361_1_cal_done ), // input wire [0:0] probe1
|
||||
.probe2 (u_ad9361_phase_cal.ad9361_2_cal_start_d2 ), // input wire [0:0] probe2
|
||||
.probe3 (u_ad9361_phase_cal.ad9361_2_cal_done ), // input wire [0:0] probe3
|
||||
.probe4 (u_ad9361_phase_cal.ad9361_cal_result ), // input wire [0:0] probe4
|
||||
.probe5 (u_ad9361_phase_cal.ad9361_recal_d2 ), // input wire [0:0] probe5
|
||||
.probe6 (u_ad9361_phase_cal.curr_state ), // input wire [1:0] probe6
|
||||
.probe7 (rx_ch2_i ), // input wire [11:0] probe7
|
||||
.probe8 (rx_ch2_q ), // input wire [11:0] probe8
|
||||
.probe9 (rx_ch4_i ), // input wire [11:0] probe9
|
||||
.probe10(rx_ch4_q ), // input wire [11:0] probe10
|
||||
.probe11(rx_cal_ch2_i ), // input wire [11:0] probe11
|
||||
.probe12(rx_cal_ch2_q ), // input wire [11:0] probe12
|
||||
.probe13(rx_cal_ch4_i ), // input wire [11:0] probe13
|
||||
.probe14(rx_cal_ch4_q ) // input wire [11:0] probe14
|
||||
);
|
||||
|
||||
vio_manual_ctrl u_vio_manual_ctrl
|
||||
(
|
||||
.clk (sys_clk ), // input wire clk
|
||||
.probe_out0 (waveform_sel[1:0] ), // output wire [1 : 0] probe_out0
|
||||
.probe_out1 (sweep_on ), // output wire [0 : 0] probe_out1
|
||||
.probe_out2 (freq_set[31:0] ), // output wire [31 : 0] probe_out2
|
||||
.probe_out3 (iq_sel[1:0] ), // output wire [1 : 0] probe_out3
|
||||
.probe_out4 (bb_rshift[3:0] ) // output wire [3 : 0] probe_out4
|
||||
);
|
||||
|
||||
vio_freq_comp u_vio_freq_comp
|
||||
(
|
||||
.clk (sys_clk ), // input wire clk
|
||||
.probe_in0 (freq_comp_busy ), // input wire [0 : 0] probe_in0
|
||||
.probe_out0 (freq_comp_start ), // output wire [0 : 0] probe_out0
|
||||
.probe_out1 (dmf_num_per_ch ), // output wire [7 : 0] probe_out1
|
||||
.probe_out2 (freq_manual_en ), // output wire [0 : 0] probe_out2
|
||||
.probe_out3 (freq_manual ) // output wire [31 : 0] probe_out3
|
||||
);
|
||||
|
||||
ila_freq_comp u_ila_freq_comp
|
||||
(
|
||||
.clk (sys_clk ), // input wire clk
|
||||
.probe0 (ch_peak_valid ), // input wire [0:0] probe0
|
||||
.probe1 (ch1_peak_value_i ), // input wire [17:0] probe1
|
||||
.probe2 (ch1_peak_value_q ), // input wire [17:0] probe2
|
||||
.probe3 (ch2_peak_value_i ), // input wire [17:0] probe3
|
||||
.probe4 (ch2_peak_value_q ), // input wire [17:0] probe4
|
||||
.probe5 (ch3_peak_value_i ), // input wire [17:0] probe5
|
||||
.probe6 (ch3_peak_value_q ), // input wire [17:0] probe6
|
||||
.probe7 (ch4_peak_value_i ), // input wire [17:0] probe7
|
||||
.probe8 (ch4_peak_value_q ), // input wire [17:0] probe8
|
||||
.probe9 (ch1_peak_index ), // input wire [7:0] probe9
|
||||
.probe10(ch2_peak_index ), // input wire [7:0] probe10
|
||||
.probe11(ch3_peak_index ), // input wire [7:0] probe11
|
||||
.probe12(ch4_peak_index ), // input wire [7:0] probe12
|
||||
.probe13(freq_comp_start ), // input wire [0:0] probe13
|
||||
.probe14(u_freq_comp.state_curr ), // input wire [2:0] probe14
|
||||
.probe15(u_freq_comp.din_freq_cxr_real ), // input wire [11:0] probe15
|
||||
.probe16(u_freq_comp.din_freq_cxr_imag ), // input wire [11:0] probe16
|
||||
.probe17(u_freq_comp.dmf_freq_moduli_abs ), // input wire [17:0] probe17
|
||||
.probe18(u_freq_comp.dmf_ch_moduli_abs[0] ), // input wire [17:0] probe18
|
||||
.probe19(u_freq_comp.dmf_ch_moduli_abs[1] ), // input wire [17:0] probe19
|
||||
.probe20(u_freq_comp.dmf_ch_moduli_abs[2] ), // input wire [17:0] probe20
|
||||
.probe21(u_freq_comp.dmf_ch_moduli_abs[3] ), // input wire [17:0] probe21
|
||||
.probe22(u_freq_comp.freq_word ), // input wire [31:0] probe22
|
||||
.probe23(vio_frequency_auto[11:0] ) // input wire [11:0] probe23
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,138 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
// _ _ ____
|
||||
// | | ___ ___| |__ / ___| __ _ ___
|
||||
// _ | |/ _ \/ __| '_ \ | | _ / _` |/ _ \
|
||||
// | |_| | (_) \__ \ | | | | |_| | (_| | (_) |
|
||||
// \___/ \___/|___/_| |_| \____|\__,_|\___/
|
||||
//
|
||||
// Create Date: 2023/02/25 15:20:22
|
||||
// Design Name:
|
||||
// Module Name: tx_pre_process
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module tx_pre_process
|
||||
#(
|
||||
parameter ADC_DATA_WIDTH = 12,
|
||||
parameter PRBS = 128'b00000011000010100011110010001011001110101001111101000011100010010011011010110111101100011010010111011100110010101011111110000001, // inverse pseudorandom bit sequence, [0,flip(PRSB7)]
|
||||
parameter PRBS_LEN = 128, // length of pseudorandom bit sequence
|
||||
parameter INTERP_FACTOR = 8, // interpolation factor, max inter-channel delay ranges in [-INTERP_FACTOR+1,INTERP_FACTOR-1]
|
||||
parameter CAL_MOD_FINE = 1
|
||||
)
|
||||
(
|
||||
// clock & reset
|
||||
input clk ,
|
||||
input rst ,
|
||||
// input data
|
||||
input [ADC_DATA_WIDTH-1:0] tx_data_ch1_i ,
|
||||
input [ADC_DATA_WIDTH-1:0] tx_data_ch1_q ,
|
||||
input [ADC_DATA_WIDTH-1:0] tx_data_ch2_i ,
|
||||
input [ADC_DATA_WIDTH-1:0] tx_data_ch2_q ,
|
||||
// ad9361 calibration interface
|
||||
input ad9361_tx_switch ,
|
||||
//
|
||||
input [$clog2(ADC_DATA_WIDTH)-1:0] bb_rshift,
|
||||
// output data
|
||||
output [ADC_DATA_WIDTH-1:0] tx_ch1_i ,
|
||||
output [ADC_DATA_WIDTH-1:0] tx_ch1_q ,
|
||||
output [ADC_DATA_WIDTH-1:0] tx_ch2_i ,
|
||||
output [ADC_DATA_WIDTH-1:0] tx_ch2_q
|
||||
);
|
||||
|
||||
integer i;
|
||||
|
||||
// square shaped bpsk signal
|
||||
reg [$clog2(PRBS_LEN*INTERP_FACTOR)-1 : 0] chip_interp_cnt = 'b0;
|
||||
reg signed [ADC_DATA_WIDTH-1:0] tx_pn_i = 'b0;
|
||||
reg signed [ADC_DATA_WIDTH-1:0] tx_pn_q = 'b0;
|
||||
|
||||
if (CAL_MOD_FINE == 1) begin
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
chip_interp_cnt <= 'b0;
|
||||
end
|
||||
else begin
|
||||
chip_interp_cnt <= chip_interp_cnt + 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
tx_pn_i <= 'b0;
|
||||
tx_pn_q <= 'b0;
|
||||
end
|
||||
else begin
|
||||
tx_pn_i <= PRBS[chip_interp_cnt[$clog2(PRBS_LEN*INTERP_FACTOR)-1 -: $clog2(PRBS_LEN)]] ? {1'b0,{(ADC_DATA_WIDTH-1){1'b1}}} : {1'b1,{(ADC_DATA_WIDTH-2){1'b0}},1'b1}; // (1 or 0) ? 4'b0111 : 4'b1001
|
||||
tx_pn_q <= PRBS[chip_interp_cnt[$clog2(PRBS_LEN*INTERP_FACTOR)-1 -: $clog2(PRBS_LEN)]] ? {1'b1,{(ADC_DATA_WIDTH-2){1'b0}},1'b1} : {1'b0,{(ADC_DATA_WIDTH-1){1'b1}}}; // (1 or 0) ? 4'b1001 : 4'b0111
|
||||
end
|
||||
end
|
||||
|
||||
end // if (CAL_MOD_FINE == 1)
|
||||
|
||||
// buffer input control signals (clock domain crossing from ps to pl clock domain)
|
||||
reg ad9361_tx_switch_d1 = 'b0;
|
||||
reg ad9361_tx_switch_d2 = 'b0;
|
||||
|
||||
wire signed [ADC_DATA_WIDTH-1:0] tx_dc_i = {1'b0,{(ADC_DATA_WIDTH-2){1'b1}},1'b1};
|
||||
wire signed [ADC_DATA_WIDTH-1:0] tx_dc_q = {1'b1,{(ADC_DATA_WIDTH-2){1'b0}},1'b1};
|
||||
|
||||
always @(posedge clk) begin
|
||||
ad9361_tx_switch_d1 <= ad9361_tx_switch;
|
||||
ad9361_tx_switch_d2 <= ad9361_tx_switch_d1;
|
||||
end
|
||||
|
||||
reg [ADC_DATA_WIDTH-1 : 0] tx_ch1_i_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1 : 0] tx_ch1_q_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1 : 0] tx_ch2_i_buf = 'b0;
|
||||
reg [ADC_DATA_WIDTH-1 : 0] tx_ch2_q_buf = 'b0;
|
||||
|
||||
assign tx_ch1_i = tx_ch1_i_buf;
|
||||
assign tx_ch1_q = tx_ch1_q_buf;
|
||||
assign tx_ch2_i = tx_ch2_i_buf;
|
||||
assign tx_ch2_q = tx_ch2_q_buf;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (rst) begin
|
||||
tx_ch1_i_buf <= 'b0;
|
||||
tx_ch1_q_buf <= 'b0;
|
||||
tx_ch2_i_buf <= 'b0;
|
||||
tx_ch2_q_buf <= 'b0;
|
||||
end
|
||||
else if (ad9361_tx_switch_d2) begin
|
||||
if (CAL_MOD_FINE == 1) begin
|
||||
tx_ch1_i_buf <= tx_pn_i >>> bb_rshift;
|
||||
tx_ch1_q_buf <= tx_pn_q >>> bb_rshift;
|
||||
tx_ch2_i_buf <= tx_pn_i >>> bb_rshift;
|
||||
tx_ch2_q_buf <= tx_pn_q >>> bb_rshift;
|
||||
end // CAL_MOD_FINE == 1
|
||||
else begin
|
||||
tx_ch1_i_buf <= tx_dc_i >>> bb_rshift;
|
||||
tx_ch1_q_buf <= tx_dc_q >>> bb_rshift;
|
||||
tx_ch2_i_buf <= tx_dc_i >>> bb_rshift;
|
||||
tx_ch2_q_buf <= tx_dc_q >>> bb_rshift;
|
||||
end // CAL_MOD_FINE != 1
|
||||
end
|
||||
else begin
|
||||
tx_ch1_i_buf <= tx_data_ch1_i;
|
||||
tx_ch1_q_buf <= tx_data_ch1_q;
|
||||
tx_ch2_i_buf <= tx_data_ch2_i;
|
||||
tx_ch2_q_buf <= tx_data_ch2_q;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user