snifer

【赛灵思FPGA】[原创]基于Xilinx FPGA的通用信号发生器

0
阅读(22590)

基于Xilinx的FPGA实现信号发生器,很久就在酝酿了,因为信号的发生是整个FPGA处理中至关重要的一个环节,今天在此写出来与大家共勉,重温那些经典。

一、系统原理

利用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;

 利用此系统可实现各种波形的生成,对初学者意义重点,重温经典似乎又让我们走入了过去奋斗过的日日夜夜,生命如斯,分分秒秒。