一、系统原理
利用FPGA芯片,用verilog语言编写逻辑,通过DAC0832LCN进行DA转换,产生递增斜波、递减斜波、三角波、递增阶梯波。
DAC0832LCN数字输入端具有双重缓冲功能,可以双缓冲、单缓冲或直接输入,适用于多个模拟量同时输出的场合。主要特性为:
分辨率:8位
建立时间:1us
功耗:20mW
输入:TTL
DAC0832LCN的结构框图如下所示:

时序如下图所示:

关键步骤:
1.使用Xilinx XC2S200型FPGA器件设计实现
2.使用电子EDA实验开发系统的通用IO口,向DAC0832LCN芯片的D0—D7送数据,以产生不同的输出波型。
3.使用Xinlix ISE 6.3软件进行Verilog HDL开发。
源代码
1.Verilog源代码,sig_gen.v
module sig_gen(sysclk, rst_n, mode, data, CS, WR);
input sysclk, rst_n;
input wire[1:0] mode;
output wire[7:0] data;
output reg CS, WR;
reg [7:0] counter;
reg addsub;
always @(posedge sysclk or negedge rst_n)
begin
if (!rst_n)
begin
counter = 0;
addsub = 0;
CS = 0;
WR = 0;
end
else
begin
case (mode)
2'b00 : counter = counter + 1; //递增斜波
2'b01 : counter = counter - 1; //递减斜波
2'b10 : // 三角波
begin
if (addsub == 0)
begin
counter = counter + 1;
if (counter == 254)
addsub = 1;
else
addsub = 0;
end
else
begin
counter = counter - 1;
if (counter < 1)
addsub = 0;
else
addsub = 1;
end
end
2'b11 : counter = counter + 32; //递增阶梯波
default : counter = 0;
endcase
end
end
assign data = counter;
endmodule
2.引脚分配源代码,sig_gen.ucf
net sysclk loc = p80; //1k时最好
net rst_n loc = p57;
net CS loc = p46;
net WR loc = p48;
net mode<1> loc = p102;
net mode<0> loc = p100;
net data<7> loc = p14;
net data<6> loc = p16;
net data<5> loc = p18;
net data<4> loc = p21;
net data<3> loc = p23;
net data<2> loc = p27;
net data<1> loc = p30;
net data<0> loc = p33;
利用此系统可实现各种波形的生成,对初学者意义重点,重温经典似乎又让我们走入了过去奋斗过的日日夜夜,生命如斯,分分秒秒。