用vivado实现DDS
时间: 2024-01-06 22:06:25 浏览: 90
使用Vivado来实现DDS(Direct Digital Synthesis)。
在Vivado中实现DDS相对简单,只需按照设计的原理图进行操作即可。需要注意的是,当fword和pword的位数不同时,需要将fword的高位与pword进行相加,以实现相位的移动。在设计中,我们使用了两个同步寄存器来存储fword和pword的值,并且使用一个相位累加寄存器来计算相位。此外,还需要获取ROM地址,用于生成正弦波等波形。
具体的Vivado实现代码如下:
```verilog
module DDS(
input clk,
input rst_n,
input [31:0 fword,
input [11:0 pword,
output [13:0 rom_data
);
reg [31:0 fword_reg;
reg [11:0 pword_reg;
reg [31:0 fword_and;
wire [11:0 rom_data_addr;
// 两个控制字的同步寄存器
always @(posedge clk or negedge rst_n) begin
if (~rst_n)
fword_reg <= 0;
else
fword_reg <= fword;
end
always @(posedge clk or negedge rst_n) begin
if (~rst_n)
pword_reg <= 0;
else
pword_reg <= pword;
end
// 相位累加寄存器
always @(posedge clk or negedge rst_n) begin
if (~rst_n)
fword_and <= 0;
else
fword_and <= fword_and + fword_reg;
end
// ROM地址的获取
assign rom_data_addr = {fword_and<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* *2* [DDS在vivado中的实现](https://blog.csdn.net/Tulip__/article/details/124646248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文