|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 fangzr 于 2016-7-30 16:37 编辑
最近想了好一阵子这个课程设计,谢谢各位帮助,解决了频率调节问题,但是我不是很理解如何调节输出信号峰峰值0.1V~2V
有人说“在正弦值乘上幅度系数来缩放”,但是我直接修改dds的out,结果综合分析出现时序不满足的问题
就是这样: Out <= (sinTable[addr[PHASE_W - 1 : PHASE_W - TABLE_AW]])/20*Amplitude;//Amplitude是我在top用按键可调的reg
最后下载到xilinx板子上,用ILA调试的结果很奇怪,之前没加上调幅的amplitude还是正弦波。。。
最后贴上问题源代码吧!
- module dds
- #(
- parameter PHASE_W = 24,
- parameter DATA_W = 12,
- parameter TABLE_AW = 12,
- parameter MEM_FILE = "SineTable.dat"
- )
- (
- input [PHASE_W - 1 : 0] FreqWord,
- input [PHASE_W - 1 : 0] PhaseShift,
- input Clock,
- input ClkEn,
- input [5:0]Amplitude, //amplitude control
- output reg signed [DATA_W - 1 : 0] Out
- );
- reg signed [DATA_W - 1 : 0] sinTable[2 ** TABLE_AW - 1 : 0]; // Sine table ROM
- reg [PHASE_W - 1 : 0] phase; // Phase Accumulater
- wire [PHASE_W - 1 : 0] addr = phase + PhaseShift; // Phase Shift
-
- initial
- begin
- phase = 0; Out = 0;
- $readmemh(MEM_FILE, sinTable); // Initialize the ROM
- end
-
- always@(posedge Clock)
- begin
- if(ClkEn)
- phase <= phase + FreqWord;
- end
-
- always@(posedge Clock)
- begin
- if(ClkEn)
- Out <= (sinTable[addr[PHASE_W - 1 : PHASE_W - TABLE_AW]])/20*Amplitude; // Look up the table
- end
-
- endmodule
复制代码 |
|