DDS其实就是输出点,直接画出波形。
例子1,假设基带采样时钟是360M,如果每个完整的正弦波形用360个点画出来,构造出来的DDS波形是360M/360=1M。
例子2,在同样的采样时钟之下,如果我们要DDS出一个0.5M的波形怎么办呢:其实就是用360M/0.5M=720个点。就是说我们用720个点构造出一个完整正弦波。如果我们的sin表是由360个数值对应0-359度,那该怎么办呢。直接将每个点显示两遍不就得了。
例子3,在同样的采样时钟之下,如果我们要DDS出一个2M的波形怎么办呢:其实就是用360M/2M=180个点。就是说我们用180个点构造出一个完整正弦波。如果我们的sin表是由360个数值对应0-359度,那该怎么办呢,我直接跳着显示,之显示偶数度就可以,也就说每次显示的度数加2。
综合上述两种情况,我们可以考虑做成一个模块实现上述的功能。因此需要有两个输入,步进的度数差step,和每个度数重复的次数cnt。
直接上代码:
/*
my_dds my_dds(
.clk( ) ,
.rst( ) ,
.clr ( ) ,
.cnt( ) ,
.step( ) ,
.sin( ) ,
.cos( ) ,
);
*/
module my_dds(
input clk ,rst,clr ,
input [15:0] cnt,
input [7:0] step ,
output [11:0] sin ,cos
);
reg local_rst ;
always@(posedge clk) local_rst <= rst | clr ;
reg [8:0] degree = 0 , sin_degree,cos_degree,nxt_degree ;
always @(posedge clk) sin_degree<=degree;
always @(posedge clk) cos_degree<=degree + 90 ;
always @* nxt_degree=degree + step ;
reg [15:0] c =0 ;
wire c_of = (cnt==0) || ( c>=cnt ) ;
always @(posedge clk) if (local_rst) c <= 0 ; else if ( c_of ) c <= 0; else c <= c + 1 ;
always @(posedge clk) if (local_rst ) degree <= 0; else if ( c==0 )
begin if (nxt_degree>=360) degree <=0;else degree <= nxt_degree ; end
sin_lut_table sin_lut_table( .clk(clk ), .addr(sin_degree ) , .q(sin ) );
sin_lut_table cos_lut_table( .clk(clk ), .addr(cos_degree ) , .q(cos ) );
endmodule
代码我们看到degree随时时间的变化是由step和cnt这两个因素决定的。
step就是每次递增的差值。(cnt+1)就是在degree在某一个度数保持的次数(cnt=0时,保持次数为1,cnt=1,保持次数为2,如此换算)。
很显然这个我们没有必要同时设置cnt和step。而是锁定一个数值再设置另外一个数值。
360M的采样频率,如果我们要做出一个1M正弦波形, step=1,cnt=0
360M的采样频率,如果我们要做出一个0.5M正弦波形,step=1,cnt=1
360M的采样频率,如果我们要做出一个2M正弦波形, step=2,cnt=1,
为了做一个2M的波形,我们也可是设置step=4 cnt=3 也能画出来2M的波形,但是这样的比起来step=2,cnt=1的设置,波形看上去不是那么平滑。
接下来写个进行仿真看看效果吧。这里使用简单的ICARUS VERILOG仿真,用GTKWAVE查看波形。仿真测试平台代码如下:
module tb ;
reg clk =0,rst=1,clr=1;
reg [15:0] cnt=0 ;
reg [7:0] step =1;
wire [11:0] sin,cos;
always #5 clk = !clk ;
initial begin
#20 {rst,clr} =0 ;
cnt = 1 ;step= 1 ; //720dot
#360_00 ;
cnt = 0 ;step= 1 ; //360dot
#360_00 ;
cnt = 0 ;step= 2 ; //180dot
#360_00 ;
$finish ;
end
initial begin
$dumpfile("tb.vcd");
$dumpvars( 0 , tb );
end
my_dds my_dds(
.clk(clk ) ,
.rst(rst ) ,
.clr (clr ) ,
.cnt(cnt ) ,
.step(step ) ,
.sin( sin) ,
.cos(cos )
);
endmodule
当然里面还可以加入其它的cnt和step数值进行试验。
上述测试代码画出来的波形对应如下:
我们可以数数每个周期的点数(或者说占用的时间),和我们的构想是完全一致的。没有问题。
这里还用到了一个sin表,为了方便我写成LUT风格。如果大家实际产品使用可以写成RAM并附带内存初始化文件的格式。
/*
module sin_lut_table(
.clk( ),
.addr( ) ,
.q( )
);
*/
/*
reg [8:0]degree;
reg [8:0]degree_sin;
reg [8:0]degree_cos;
always @(posedge sample_clk) degree_cos <= degree + 90 ;
always @(posedge sample_clk) degree_sin <= degree + 0;
always @(posedge sample_clk) if (degree==360) degree<=0; else degree<=degree+ 36 ;
sin_lut_table( .clk(sample_clk ), .addr(degree_sin ) , .q( sin) ) ;
sin_lut_table( .clk(sample_clk ), .addr( degree_cos) , .q( cos ) ) ;
*/
module sin_lut_table( // 3 clock delay
input clk,
input [8:0]addr ,
output reg [11:0]q
);
reg [8:0] addrr;
reg [11:0] qr;
always @(posedge clk) addrr<=addr;
//always @(posedge clk) q <= $signed (qr) >>> 1 ;
always @(posedge clk) q <= qr ;
always @ (posedge clk)
case (addrr)
0: qr <= 12'h000 ;
1: qr <= 12'h024 ;
2: qr <= 12'h047 ;
3: qr <= 12'h06b ;
4: qr <= 12'h08f ;
5: qr <= 12'h0b2 ;
6: qr <= 12'h0d6 ;
7: qr <= 12'h0fa ;
8: qr <= 12'h11d ;
9: qr <= 12'h140 ;
10: qr <= 12'h164 ;
11: qr <= 12'h187 ;
12: qr <= 12'h1aa ;
13: qr <= 12'h1cd ;
14: qr <= 12'h1ef ;
15: qr <= 12'h212 ;
16: qr <= 12'h235 ;
17: qr <= 12'h257 ;
18: qr <= 12'h279 ;
19: qr <= 12'h29b ;
20: qr <= 12'h2bc ;
21: qr <= 12'h2de ;
22: qr <= 12'h2ff ;
23: qr <= 12'h320 ;
24: qr <= 12'h341 ;
25: qr <= 12'h362 ;
26: qr <= 12'h382 ;
27: qr <= 12'h3a2 ;
28: qr <= 12'h3c1 ;
29: qr <= 12'h3e1 ;
30: qr <= 12'h400 ;
31: qr <= 12'h41f ;
32: qr <= 12'h43d ;
33: qr <= 12'h45b ;
34: qr <= 12'h479 ;
35: qr <= 12'h497 ;
36: qr <= 12'h4b4 ;
37: qr <= 12'h4d1 ;
38: qr <= 12'h4ed ;
39: qr <= 12'h509 ;
40: qr <= 12'h524 ;
41: qr <= 12'h540 ;
42: qr <= 12'h55a ;
43: qr <= 12'h575 ;
44: qr <= 12'h58f ;
45: qr <= 12'h5a8 ;
46: qr <= 12'h5c1 ;
47: qr <= 12'h5da ;
48: qr <= 12'h5f2 ;
49: qr <= 12'h60a ;
50: qr <= 12'h621 ;
51: qr <= 12'h638 ;
52: qr <= 12'h64e ;
53: qr <= 12'h664 ;
54: qr <= 12'h679 ;
55: qr <= 12'h68e ;
56: qr <= 12'h6a2 ;
57: qr <= 12'h6b6 ;
58: qr <= 12'h6c9 ;
59: qr <= 12'h6db ;
60: qr <= 12'h6ee ;
61: qr <= 12'h6ff ;
62: qr <= 12'h710 ;
63: qr <= 12'h721 ;
64: qr <= 12'h731 ;
65: qr <= 12'h740 ;
66: qr <= 12'h74f ;
67: qr <= 12'h75d ;
68: qr <= 12'h76b ;
69: qr <= 12'h778 ;
70: qr <= 12'h784 ;
71: qr <= 12'h790 ;
72: qr <= 12'h79c ;
73: qr <= 12'h7a7 ;
74: qr <= 12'h7b1 ;
75: qr <= 12'h7ba ;
76: qr <= 12'h7c3 ;
77: qr <= 12'h7cc ;
78: qr <= 12'h7d3 ;
79: qr <= 12'h7da ;
80: qr <= 12'h7e1 ;
81: qr <= 12'h7e7 ;
82: qr <= 12'h7ec ;
83: qr <= 12'h7f1 ;
84: qr <= 12'h7f5 ;
85: qr <= 12'h7f8 ;
86: qr <= 12'h7fa ;
87: qr <= 12'h7fc ;
88: qr <= 12'h7fd ;
89: qr <= 12'h7fe ;
90: qr <= 12'h7ff ;
91: qr <= 12'h7fe ;
92: qr <= 12'h7ff ;
93: qr <= 12'h7fc ;
94: qr <= 12'h7fa ;
95: qr <= 12'h7f8 ;
96: qr <= 12'h7f5 ;
97: qr <= 12'h7f1 ;
98: qr <= 12'h7ec ;
99: qr <= 12'h7e7 ;
100: qr <= 12'h7e1 ;
101: qr <= 12'h7da ;
102: qr <= 12'h7d3 ;
103: qr <= 12'h7cc ;
104: qr <= 12'h7c3 ;
105: qr <= 12'h7ba ;
106: qr <= 12'h7b1 ;
107: qr <= 12'h7a7 ;
108: qr <= 12'h79c ;
109: qr <= 12'h790 ;
110: qr <= 12'h784 ;
111: qr <= 12'h778 ;
112: qr <= 12'h76b ;
113: qr <= 12'h75d ;
114: qr <= 12'h74f ;
115: qr <= 12'h740 ;
116: qr <= 12'h731 ;
117: qr <= 12'h721 ;
118: qr <= 12'h710 ;
119: qr <= 12'h6ff ;
120: qr <= 12'h6ee ;
121: qr <= 12'h6db ;
122: qr <= 12'h6c9 ;
123: qr <= 12'h6b6 ;
124: qr <= 12'h6a2 ;
125: qr <= 12'h68e ;
126: qr <= 12'h679 ;
127: qr <= 12'h664 ;
128: qr <= 12'h64e ;
129: qr <= 12'h638 ;
130: qr <= 12'h621 ;
131: qr <= 12'h60a ;
132: qr <= 12'h5f2 ;
133: qr <= 12'h5da ;
134: qr <= 12'h5c1 ;
135: qr <= 12'h5a8 ;
136: qr <= 12'h58f ;
137: qr <= 12'h575 ;
138: qr <= 12'h55a ;
139: qr <= 12'h540 ;
140: qr <= 12'h524 ;
141: qr <= 12'h509 ;
142: qr <= 12'h4ed ;
143: qr <= 12'h4d1 ;
144: qr <= 12'h4b4 ;
145: qr <= 12'h497 ;
146: qr <= 12'h479 ;
147: qr <= 12'h45b ;
148: qr <= 12'h43d ;
149: qr <= 12'h41f ;
150: qr <= 12'h400 ;
151: qr <= 12'h3e1 ;
152: qr <= 12'h3c1 ;
153: qr <= 12'h3a2 ;
154: qr <= 12'h382 ;
155: qr <= 12'h362 ;
156: qr <= 12'h341 ;
157: qr <= 12'h320 ;
158: qr <= 12'h2ff ;
159: qr <= 12'h2de ;
160: qr <= 12'h2bc ;
161: qr <= 12'h29b ;
162: qr <= 12'h279 ;
163: qr <= 12'h257 ;
164: qr <= 12'h235 ;
165: qr <= 12'h212 ;
166: qr <= 12'h1ef ;
167: qr <= 12'h1cd ;
168: qr <= 12'h1aa ;
169: qr <= 12'h187 ;
170: qr <= 12'h164 ;
171: qr <= 12'h140 ;
172: qr <= 12'h11d ;
173: qr <= 12'h0fa ;
174: qr <= 12'h0d6 ;
175: qr <= 12'h0b2 ;
176: qr <= 12'h08f ;
177: qr <= 12'h06b ;
178: qr <= 12'h047 ;
179: qr <= 12'h024 ;
180: qr <= 12'h000 ;
181: qr <= 12'hfdc ;
182: qr <= 12'hfb9 ;
183: qr <= 12'hf95 ;
184: qr <= 12'hf71 ;
185: qr <= 12'hf4e ;
186: qr <= 12'hf2a ;
187: qr <= 12'hf06 ;
188: qr <= 12'hee3 ;
189: qr <= 12'hec0 ;
190: qr <= 12'he9c ;
191: qr <= 12'he79 ;
192: qr <= 12'he56 ;
193: qr <= 12'he33 ;
194: qr <= 12'he11 ;
195: qr <= 12'hdee ;
196: qr <= 12'hdcb ;
197: qr <= 12'hda9 ;
198: qr <= 12'hd87 ;
199: qr <= 12'hd65 ;
200: qr <= 12'hd44 ;
201: qr <= 12'hd22 ;
202: qr <= 12'hd01 ;
203: qr <= 12'hce0 ;
204: qr <= 12'hcbf ;
205: qr <= 12'hc9e ;
206: qr <= 12'hc7e ;
207: qr <= 12'hc5e ;
208: qr <= 12'hc3f ;
209: qr <= 12'hc1f ;
210: qr <= 12'hc00 ;
211: qr <= 12'hbe1 ;
212: qr <= 12'hbc3 ;
213: qr <= 12'hba5 ;
214: qr <= 12'hb87 ;
215: qr <= 12'hb69 ;
216: qr <= 12'hb4c ;
217: qr <= 12'hb2f ;
218: qr <= 12'hb13 ;
219: qr <= 12'haf7 ;
220: qr <= 12'hadc ;
221: qr <= 12'hac0 ;
222: qr <= 12'haa6 ;
223: qr <= 12'ha8b ;
224: qr <= 12'ha71 ;
225: qr <= 12'ha58 ;
226: qr <= 12'ha3f ;
227: qr <= 12'ha26 ;
228: qr <= 12'ha0e ;
229: qr <= 12'h9f6 ;
230: qr <= 12'h9df ;
231: qr <= 12'h9c8 ;
232: qr <= 12'h9b2 ;
233: qr <= 12'h99c ;
234: qr <= 12'h987 ;
235: qr <= 12'h972 ;
236: qr <= 12'h95e ;
237: qr <= 12'h94a ;
238: qr <= 12'h937 ;
239: qr <= 12'h925 ;
240: qr <= 12'h912 ;
241: qr <= 12'h901 ;
242: qr <= 12'h8f0 ;
243: qr <= 12'h8df ;
244: qr <= 12'h8cf ;
245: qr <= 12'h8c0 ;
246: qr <= 12'h8b1 ;
247: qr <= 12'h8a3 ;
248: qr <= 12'h895 ;
249: qr <= 12'h888 ;
250: qr <= 12'h87c ;
251: qr <= 12'h870 ;
252: qr <= 12'h864 ;
253: qr <= 12'h859 ;
254: qr <= 12'h84f ;
255: qr <= 12'h846 ;
256: qr <= 12'h83d ;
257: qr <= 12'h834 ;
258: qr <= 12'h82d ;
259: qr <= 12'h826 ;
260: qr <= 12'h81f ;
261: qr <= 12'h819 ;
262: qr <= 12'h814 ;
263: qr <= 12'h80f ;
264: qr <= 12'h80b ;
265: qr <= 12'h808 ;
266: qr <= 12'h805 ;
267: qr <= 12'h803 ;
268: qr <= 12'h801 ;
269: qr <= 12'h800 ;
270: qr <= 12'h800 ;
271: qr <= 12'h800 ;
272: qr <= 12'h801 ;
273: qr <= 12'h803 ;
274: qr <= 12'h805 ;
275: qr <= 12'h808 ;
276: qr <= 12'h80b ;
277: qr <= 12'h80f ;
278: qr <= 12'h814 ;
279: qr <= 12'h819 ;
280: qr <= 12'h81f ;
281: qr <= 12'h826 ;
282: qr <= 12'h82d ;
283: qr <= 12'h834 ;
284: qr <= 12'h83d ;
285: qr <= 12'h846 ;
286: qr <= 12'h84f ;
287: qr <= 12'h859 ;
288: qr <= 12'h864 ;
289: qr <= 12'h870 ;
290: qr <= 12'h87c ;
291: qr <= 12'h888 ;
292: qr <= 12'h895 ;
293: qr <= 12'h8a3 ;
294: qr <= 12'h8b1 ;
295: qr <= 12'h8c0 ;
296: qr <= 12'h8cf ;
297: qr <= 12'h8df ;
298: qr <= 12'h8f0 ;
299: qr <= 12'h901 ;
300: qr <= 12'h912 ;
301: qr <= 12'h925 ;
302: qr <= 12'h937 ;
303: qr <= 12'h94a ;
304: qr <= 12'h95e ;
305: qr <= 12'h972 ;
306: qr <= 12'h987 ;
307: qr <= 12'h99c ;
308: qr <= 12'h9b2 ;
309: qr <= 12'h9c8 ;
310: qr <= 12'h9df ;
311: qr <= 12'h9f6 ;
312: qr <= 12'ha0e ;
313: qr <= 12'ha26 ;
314: qr <= 12'ha3f ;
315: qr <= 12'ha58 ;
316: qr <= 12'ha71 ;
317: qr <= 12'ha8b ;
318: qr <= 12'haa6 ;
319: qr <= 12'hac0 ;
320: qr <= 12'hadc ;
321: qr <= 12'haf7 ;
322: qr <= 12'hb13 ;
323: qr <= 12'hb2f ;
324: qr <= 12'hb4c ;
325: qr <= 12'hb69 ;
326: qr <= 12'hb87 ;
327: qr <= 12'hba5 ;
328: qr <= 12'hbc3 ;
329: qr <= 12'hbe1 ;
330: qr <= 12'hc00 ;
331: qr <= 12'hc1f ;
332: qr <= 12'hc3f ;
333: qr <= 12'hc5e ;
334: qr <= 12'hc7e ;
335: qr <= 12'hc9e ;
336: qr <= 12'hcbf ;
337: qr <= 12'hce0 ;
338: qr <= 12'hd01 ;
339: qr <= 12'hd22 ;
340: qr <= 12'hd44 ;
341: qr <= 12'hd65 ;
342: qr <= 12'hd87 ;
343: qr <= 12'hda9 ;
344: qr <= 12'hdcb ;
345: qr <= 12'hdee ;
346: qr <= 12'he11 ;
347: qr <= 12'he33 ;
348: qr <= 12'he56 ;
349: qr <= 12'he79 ;
350: qr <= 12'he9c ;
351: qr <= 12'hec0 ;
352: qr <= 12'hee3 ;
353: qr <= 12'hf06 ;
354: qr <= 12'hf2a ;
355: qr <= 12'hf4e ;
356: qr <= 12'hf71 ;
357: qr <= 12'hf95 ;
358: qr <= 12'hfb9 ;
359: qr <= 12'hfdc ;
360: qr <= 12'h000 ;
361: qr <= 12'h024 ;
362: qr <= 12'h047 ;
363: qr <= 12'h06b ;
364: qr <= 12'h08f ;
365: qr <= 12'h0b2 ;
366: qr <= 12'h0d6 ;
367: qr <= 12'h0fa ;
368: qr <= 12'h11d ;
369: qr <= 12'h140 ;
370: qr <= 12'h164 ;
371: qr <= 12'h187 ;
372: qr <= 12'h1aa ;
373: qr <= 12'h1cd ;
374: qr <= 12'h1ef ;
375: qr <= 12'h212 ;
376: qr <= 12'h235 ;
377: qr <= 12'h257 ;
378: qr <= 12'h279 ;
379: qr <= 12'h29b ;
380: qr <= 12'h2bc ;
381: qr <= 12'h2de ;
382: qr <= 12'h2ff ;
383: qr <= 12'h320 ;
384: qr <= 12'h341 ;
385: qr <= 12'h362 ;
386: qr <= 12'h382 ;
387: qr <= 12'h3a2 ;
388: qr <= 12'h3c1 ;
389: qr <= 12'h3e1 ;
390: qr <= 12'h400 ;
391: qr <= 12'h41f ;
392: qr <= 12'h43d ;
393: qr <= 12'h45b ;
394: qr <= 12'h479 ;
395: qr <= 12'h497 ;
396: qr <= 12'h4b4 ;
397: qr <= 12'h4d1 ;
398: qr <= 12'h4ed ;
399: qr <= 12'h509 ;
400: qr <= 12'h524 ;
401: qr <= 12'h540 ;
402: qr <= 12'h55a ;
403: qr <= 12'h575 ;
404: qr <= 12'h58f ;
405: qr <= 12'h5a8 ;
406: qr <= 12'h5c1 ;
407: qr <= 12'h5da ;
408: qr <= 12'h5f2 ;
409: qr <= 12'h60a ;
410: qr <= 12'h621 ;
411: qr <= 12'h638 ;
412: qr <= 12'h64e ;
413: qr <= 12'h664 ;
414: qr <= 12'h679 ;
415: qr <= 12'h68e ;
416: qr <= 12'h6a2 ;
417: qr <= 12'h6b6 ;
418: qr <= 12'h6c9 ;
419: qr <= 12'h6db ;
420: qr <= 12'h6ee ;
421: qr <= 12'h6ff ;
422: qr <= 12'h710 ;
423: qr <= 12'h721 ;
424: qr <= 12'h731 ;
425: qr <= 12'h740 ;
426: qr <= 12'h74f ;
427: qr <= 12'h75d ;
428: qr <= 12'h76b ;
429: qr <= 12'h778 ;
430: qr <= 12'h784 ;
431: qr <= 12'h790 ;
432: qr <= 12'h79c ;
433: qr <= 12'h7a7 ;
434: qr <= 12'h7b1 ;
435: qr <= 12'h7ba ;
436: qr <= 12'h7c3 ;
437: qr <= 12'h7cc ;
438: qr <= 12'h7d3 ;
439: qr <= 12'h7da ;
440: qr <= 12'h7e1 ;
441: qr <= 12'h7e7 ;
442: qr <= 12'h7ec ;
443: qr <= 12'h7f1 ;
444: qr <= 12'h7f5 ;
360 + 85: qr <= 12'h7f8 ;
360 + 86: qr <= 12'h7fa ;
360 + 87: qr <= 12'h7fc ;
360 + 88: qr <= 12'h7fd ;
360 + 89: qr <= 12'h7fe ;
360 + 90: qr <= 12'h7ff ;
360 + 91: qr <= 12'h7fe ;
360 + 92: qr <= 12'h7ff ;
360 + 93: qr <= 12'h7fc ;
360 + 94: qr <= 12'h7fa ;
360 + 95: qr <= 12'h7f8 ;
456: qr <= 12'h7f5 ;
457: qr <= 12'h7f1 ;
458: qr <= 12'h7ec ;
459: qr <= 12'h7e7 ;
460: qr <= 12'h7e1 ;
461: qr <= 12'h7da ;
462: qr <= 12'h7d3 ;
463: qr <= 12'h7cc ;
464: qr <= 12'h7c3 ;
465: qr <= 12'h7ba ;
466: qr <= 12'h7b1 ;
467: qr <= 12'h7a7 ;
468: qr <= 12'h79c ;
469: qr <= 12'h790 ;
470: qr <= 12'h784 ;
471: qr <= 12'h778 ;
472: qr <= 12'h76b ;
473: qr <= 12'h75d ;
474: qr <= 12'h74f ;
475: qr <= 12'h740 ;
476: qr <= 12'h731 ;
477: qr <= 12'h721 ;
478: qr <= 12'h710 ;
479: qr <= 12'h6ff ;
480: qr <= 12'h6ee ;
481: qr <= 12'h6db ;
482: qr <= 12'h6c9 ;
483: qr <= 12'h6b6 ;
484: qr <= 12'h6a2 ;
485: qr <= 12'h68e ;
486: qr <= 12'h679 ;
487: qr <= 12'h664 ;
488: qr <= 12'h64e ;
489: qr <= 12'h638 ;
490: qr <= 12'h621 ;
491: qr <= 12'h60a ;
492: qr <= 12'h5f2 ;
493: qr <= 12'h5da ;
494: qr <= 12'h5c1 ;
495: qr <= 12'h5a8 ;
496: qr <= 12'h58f ;
497: qr <= 12'h575 ;
498: qr <= 12'h55a ;
499: qr <= 12'h540 ;
500: qr <= 12'h524 ;
501: qr <= 12'h509 ;
502: qr <= 12'h4ed ;
503: qr <= 12'h4d1 ;
504: qr <= 12'h4b4 ;
505: qr <= 12'h497 ;
506: qr <= 12'h479 ;
507: qr <= 12'h45b ;
508: qr <= 12'h43d ;
509: qr <= 12'h41f ;
510: qr <= 12'h400 ;
511: qr <= 12'h3e1 ;
default qr<=0;
endcase
endmodule
其实有了这个,大家可以做一些基本的FSK试验了。我将基于这个DDS和FSK的思想做一个传送串口数据的通讯试验。