信號(hào)發(fā)生器又稱(chēng)信號(hào)源或振蕩器,在生產(chǎn)實(shí)踐和科技領(lǐng)域中有著廣泛的應(yīng)用。能夠產(chǎn)生多種波形,如三角波、鋸齒波、矩形波(含方波)、正弦波的電路被稱(chēng)為函數(shù)信號(hào)發(fā)生器。函數(shù)信號(hào)發(fā)生器的實(shí)現(xiàn)方法通常是采用分立元件或單片專(zhuān)用集成芯片,但其頻率不高,穩(wěn)定性較差,且不易調(diào)試,開(kāi)發(fā)和使用上都受到較大限制。隨著可編程邏輯器件(FPGA)的不斷發(fā)展,直接頻率合成(DDS)技術(shù)應(yīng)用的愈加成熟,利用DDS原理在FPGA平臺(tái)上開(kāi)發(fā)高性能的多種波形信號(hào)發(fā)生器與基于DDS芯片的信號(hào)發(fā)生器相比,成本更低,操作更加靈活,而且還能根據(jù)要求在線更新配置,系統(tǒng)開(kāi)發(fā)趨于軟件化、自定義化。本文研究了基于 FPGA的DDS信號(hào)發(fā)生器設(shè)計(jì),實(shí)現(xiàn)了滿足預(yù)定指標(biāo)的多波形輸出。
DDS建立在采樣定理基礎(chǔ)上,首先對(duì)需要產(chǎn)生的波形進(jìn)行采樣,將采樣值數(shù)字化后存入存儲(chǔ)器作為查找表,然后通過(guò)查表讀取數(shù)據(jù),再經(jīng)D/A轉(zhuǎn)換器轉(zhuǎn)換為模擬量,將保存的波形重新合成出來(lái)。DDS基本原理框圖如圖1所示。
除了濾波器(LPF)之外,DDS系統(tǒng)都是通過(guò)數(shù)字集成電路實(shí)現(xiàn)的,易于集成和小型化。系統(tǒng)的參考時(shí)鐘源通常是一個(gè)具有高穩(wěn)定性的晶體振蕩器,為各組成部分提供同步時(shí)鐘。頻率控制字(FSW)實(shí)際上是相位增量值(二進(jìn)制編碼)作為相位累加器的累加值。相位累加器在每一個(gè)參考時(shí)鐘脈沖輸入時(shí),累加一次頻率字,其輸出相應(yīng)增加一個(gè)步長(zhǎng)的相位增量。由于相位累加器的輸出連接在波形存儲(chǔ)器(ROM)的地址線上,因此其輸出的改變就相當(dāng)于查表。這樣就可以通過(guò)查表把存儲(chǔ)在波形存儲(chǔ)器內(nèi)的波形抽樣值(二進(jìn)制編碼)查找出來(lái)。ROM的輸出送到D/A轉(zhuǎn)換器,經(jīng)D/A轉(zhuǎn)換器轉(zhuǎn)換成模擬量輸出。
設(shè)計(jì)功能及端口
1.設(shè)計(jì)實(shí)現(xiàn)的功能
用一個(gè)8×128的ROM完成對(duì)所要顯示正弦波形數(shù)據(jù)的存儲(chǔ),即生成正弦波的波形數(shù)據(jù)查找表,通過(guò)VerilogHDL編寫(xiě)DDS直接數(shù)字頻率合成代碼,在Quartus II與modelsim工具軟件的環(huán)境中進(jìn)行設(shè)計(jì)和仿真,要求能根據(jù)相位累加產(chǎn)生的地址并按照不同的頻率控制信號(hào)(freq)讀取ROM波形查找表中的數(shù)值做為輸出,并正確顯示波形。同時(shí)還可通過(guò)改變相移變量(pha)控制程序從不同的位置開(kāi)始讀取ROM波形查找表中的數(shù)據(jù)。
2.輸入輸出端口
input wire clk; //時(shí)鐘
input wire rst;//復(fù)位信號(hào)(低電平有效)
input wire [6 : 0] freq;//頻率控制信號(hào)
input wire [6 : 0] pha;//相移變量信號(hào)
input wire key; //使能開(kāi)關(guān)信號(hào)(高電平有效)
output wire [7 : 0] data; //ROM查找表數(shù)據(jù)
功能介紹
1.設(shè)計(jì)功能模塊介紹:
本次設(shè)計(jì)總體實(shí)現(xiàn)的是一個(gè)能產(chǎn)生正弦波形的DDS信號(hào)發(fā)生器,該
DDS信號(hào)發(fā)生器的程序代碼模塊主要有以下內(nèi)容:
(1)ROM地址產(chǎn)生:
當(dāng)時(shí)鐘的上升沿到來(lái)時(shí),如果復(fù)位信號(hào)有效,則把地址變量addr清零;否則當(dāng)使能開(kāi)關(guān)信號(hào)key有效時(shí),則將頻率控制字寫(xiě)到內(nèi)部寄存器里,再將頻率控制字和上一時(shí)刻的地址變量進(jìn)行相加,將加的結(jié)果作為地址輸出。另外,還可通過(guò)頻率控制信號(hào)freq控制讀取頻率,通過(guò)相移變量信號(hào)pha控制初始讀取位置。
(2)ROM查找表:
當(dāng)時(shí)鐘的上升沿到來(lái)時(shí),如果復(fù)位信號(hào)有效,則把輸出置為零;否則根據(jù)ROM地址產(chǎn)生模塊產(chǎn)生的地址讀取ROM中存儲(chǔ)的數(shù)值。
另外需通過(guò)C語(yǔ)言生成ROM正弦波查找表數(shù)據(jù),C語(yǔ)言程序代碼如下: #include “stdio.h”
#include “conio.h”
#include “math.h”
main()
{
int i;
float j;
int y;
FILE *fp;
if((fp = fopen(“rom.mif”, “wa”)) == NULL)
exit(1);
for(i = 0; i 《 128; i++)
{
y = 128 * sin(j) + 128;
fprintf(fp, “%d:%d;\n”, i, y);
j += 2 * 3.1416 / 128;
}
fclose(fp);
printf(“Hello, world\n”);
getch();
}
2.系統(tǒng)結(jié)構(gòu)框圖:
設(shè)計(jì)源代碼
1.設(shè)計(jì)源代碼:
module DDS(clk,rst,freq,pha,key,data);
input wire clk; //時(shí)鐘 input wire rst; //復(fù)位信號(hào)(低電平有效) input wire [6 : 0] freq; //頻率控制信號(hào) input wire [6 : 0] pha; //相移變量信號(hào) input wire key; //使能開(kāi)關(guān)信號(hào)(高電平有效) output wire [7 : 0] data; //ROM查找表數(shù)據(jù)
reg [6 : 0] addr; reg [6 : 0] phase; reg [6 : 0] frequency;
always @(posedge clk) begin if(key == 1) begin phase 《= pha; //將相移變量值賦給寄存器phase frequency 《= freq; //將頻率控制變量值賦給frequency end end always @(posedge clk or negedge rst) begin if(!rst) begin addr 《= 0; //復(fù)位 end else begin if(key == 1) addr 《= phase; //將寄存器phase存儲(chǔ)的相值賦給addr else addr 《= addr + frequency; //ROM地址產(chǎn)生 end end rom1 rom_1( .address(addr), .clock(clk), .q(data) ); //實(shí)例化調(diào)用rom1波形查找表endmodule
驗(yàn)證方案和仿真激勵(lì):
`timescale 1 ns/ 100 ps //設(shè)置仿真的時(shí)間單位和時(shí)間精度
module stimulus;
reg clk,rst;
reg[6:0]freq,pha;
reg key;
wire [7:0] data;
initial
begin
freq=7‘d2;
pha=7’d0;
key=1‘b0;
#20 key=1’b1;
#100 key=1‘b0;
end
initial
begin
clk=1’b0;
rst=1‘b1;
#40 rst=1’b0;
#40 rst=1‘b1;
end
always #10 clk=~clk; //時(shí)鐘翻轉(zhuǎn)
DDS
LXC(.clk(clk),.rst(rst),.freq(freq),.pha(pha),.key(key),.data(data));
endmodule
功能仿真
(1)在ModelSim 中對(duì)電路設(shè)計(jì)進(jìn)行功能仿真
仿真波形如下:
(2)在Quartus II 中對(duì)電路設(shè)計(jì)進(jìn)行功能和時(shí)序仿真 仿真波形如下:
時(shí)序仿真波形如下:
仿真分析:通過(guò)觀察在ModelSim和Quartus II中的仿真波形,分析其完成的功能與設(shè)計(jì)預(yù)期一致,說(shuō)明本設(shè)計(jì)能較好的完成設(shè)計(jì)所需達(dá)到的目標(biāo)。
綜合布線與電路圖
綜合與布局布線:
1、下圖為綜合完并且成功后小窗口上生成的報(bào)告,報(bào)告中顯示出了綜合的工程名、引腳及所用的芯片的類(lèi)型和型號(hào)。
綜合完后生成的電路圖如下:
綜合布局布線報(bào)告
綜合完后在Quartus生成了一個(gè)名為“DDS.map.rpt”的文件,即為綜合布局布線報(bào)告。
下載代碼和引腳分布報(bào)告
下載代碼
后仿完后在仿真目錄下的\simulation\modelsim路徑下生成了一個(gè)“ DDS_v.sdo”其即為下載代碼文件。
引腳分布
綜合完后在工程目錄下生成了一個(gè)“top.pin”文件,其即為引腳分布。
編輯:hfy
-
濾波器
+關(guān)注
關(guān)注
161文章
7817瀏覽量
178148 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163850 -
DDS
+關(guān)注
關(guān)注
21瀏覽量
152668 -
信號(hào)發(fā)生器
+關(guān)注
關(guān)注
28文章
1474瀏覽量
108765 -
晶體振蕩器
+關(guān)注
關(guān)注
9文章
621瀏覽量
29124
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論