• 14_基于FPGA的DSS与嵌入式逻辑分析仪的调用


    14_基于FPGA的DSS与嵌入式逻辑分析仪的调用

    实验原理

    DDS的原理

    DDS(Direct Digital Frequency Synthesizer)直接数字频率合成器,也可叫DDFS

    • DDS是从相位的概念直接合成所需波形的一种频率合成技术。
    • 不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位。

    DDS原理框图

    主要构成:

    内部:相位累加器,正弦查找表

    外围:DACLPF(低通滤波器)

    工作过程

    1、将存于ROM中的数字波形,经DAC,形成模拟量波形。

    2、改变寻址的步长来改变输出信号的频率。步长即为对数字波形查表的相位增量。由累加器对相位增量进行累加,累加器的值作为查表地址。

    3DAC输出的阶梯形波形,经低通滤波,成为模拟波形。

    频率控制

    相位控制

    波形存储

    正弦信号相位与幅度的对应关系

    可以将正弦波波形看作一个矢量沿相位圆转动,相位圆对应正弦波一个周期的波形。波形中的每个采样点对应相位圆上的一个相位点。

    相位累加器的值作为ROM的地址,读取ROM的相位幅度,实现相位到幅度的转换。

    AD转换和滤波

    分析:

    DDS优点

    • 频率分辨率高,可达2N次。
    • 频率切换速度快,可达us量级。
    • 频率切换时相位连续。
    • 可以产生任意波形。

    DDS缺点

    • 输出频带范围有限。
    • 输出杂散大。

    ROM的调用

    1)选择【Tools--Megawizard plug-zn Manager】,然后创建一个新的宏功能模块,

    选择输出文件的语言类型和单端口ROM

    2ROM位宽和存储深度的设置

    3)选择是否要产生输出寄存,这个选择不用

    4MIF文件的生成

    ROM的初始文件的格式有两种:一种为.HEX文件;一种为.MIF文件。

    生成这两种文件的方法有很多种,这里因为要产生数字10位的正弦波,所以采用Mif_Maker2010软件进行生成。

    步骤如下:

    【设定波形】---【全局参数的设置】--【确定】--【设定波形】--【正弦波】,即可得到相应的波形;

    【文件】--【保存】,选择保存途径并进行命名即可得到生成的MIF文件

    5MIF文件的调用

    (6)然后一直点击Next,最后点击Finlish便生成该文件:

    嵌入式逻辑分析仪的使用

    • SignalTapⅡ逻辑分析仪是QuartusⅡ软件中集成的一个内部逻辑分析软件,

      主要是用来观察设计的内部信号波形,方便查找设计中的缺陷。

    • 在复杂的设计中,不能从外部的输入输出引脚上观察内部端口之间(如模块

      与模块之间)的信号波形是否正确,这就可以使用SignalTapⅡ逻辑分析仪来

      进行观察。

    • 通过菜单【Tools- SignalTap II Logic Analyzere】打开SignalTapII

      窗口,将自动新建一个STP文件

    生成后出现如下窗口:

    在上面的窗口中进行以下的设置:

    1、参数设置栏的设置

    2、信号显示栏的设置:

    添加方式与功能仿真时添加测试引脚一致,SignalTap II能够采集FPGA的引脚信号和内部寄存器的信号

    1. 保存SignalTap II文件,然后关闭SignalTap II窗口,关闭后会提示是否将该文件加入整个工程中,这里选择YES,软件将重新综合整个工程项目。

    观察SignalTap II采集回来的信号,该信号是实际真实信号

    下载

    在出现的窗口中,单击,在下载成功后单击,然后在信号显示栏中选中信号右击,在出现的下拉列表中选择【Bus Display Form--Unsigned Line Char】即可观察线性信号。

    实验代码

    DDS顶层代码

    /********************************版权声明**************************************

    ** 大西瓜团队

    **

    **----------------------------文件信息--------------------------

    ** 文件名称: DDS.v

    ** 创建日期:

    ** 功能描述:DDS信号发生与嵌入式逻辑分析仪的调用

    ** 硬件平台:大西瓜第三代开发板,http://daxiguafpga.taobao.com

    ** 版权声明:本代码属个人知识产权,本代码仅供交流学习.

    **---------------------------修改文件的相关信息----------------

    ** 修改人:

    ** 修改日期:    

    ** 修改内容:

    *******************************************************************************/

    module DDS(clk,dds_data_out,test_clk);

    input clk;//时钟输入

    output [9:0] dds_data_out,test_clk;

     

    wire clk;

    wire [9:0] dds_data_out;

    /**************连接线***************/

    wire [31:0] f32_bus;//AC频率控制字输入

    wire [31:0] reg32_out;//32位寄存器输出

    wire [31:0] reg32_in;//32位寄存器输入

    /************************************/

    reg [15:0] clk_counter;

    reg test_clk;

    parameter [15:0] f32_bus_init=16'b0000_0000_0000_0000;

     

    assign f32_bus[31:16]=f32_bus_init;//初始化,高位置低

    assign f32_bus[15:0]=16'b0000_1111_1111_0000;//低位可以设置DDS的输出频率

    /*********************元件例化***************************/

    adder_32 u1(.data1(f32_bus),.data2(reg32_out),.sum(reg32_in));

    reg32 u2(.clk(clk),.data_in(reg32_in),.data_out(reg32_out));

    sin_rom u3(.address(reg32_out[31:22]),.clock(clk),.q(dds_data_out));//正弦

    always @(posedge clk)

    begin

    if(clk_counter==16'b0001_0000_0000_0000)

    begin

    clk_counter<=16'b0;

    test_clk<=~test_clk;//产生SignalTap II的采集时钟

    end

    else

    clk_counter<=clk_counter+1'b1;

    end

    endmodule

    32bit寄存器代码

    /********************************版权声明**************************************

    ** 大西瓜团队

    **

    **----------------------------文件信息--------------------------

    ** 文件名称: reg32.v

    ** 创建日期:

    ** 功能描述:32位寄存器

    ** 硬件平台:大西瓜第三代开发板,http://daxiguafpga.taobao.com

    ** 版权声明:本代码属个人知识产权,本代码仅供交流学习.

    **---------------------------修改文件的相关信息----------------

    ** 修改人:

    ** 修改日期:    

    ** 修改内容:

    *******************************************************************************/

    module reg32(clk,data_in,data_out);

    input clk;

    input [31:0] data_in;

    output [31:0] data_out;

     

    wire clk;

    wire [31:0] data_in;

    reg [31:0] data_out;

     

    always @(posedge clk)

    begin

    data_out<=data_in;

    end

    endmodule

    32bit加法器代码

    /********************************版权声明**************************************

    ** 大西瓜团队

    **

    **----------------------------文件信息--------------------------

    ** 文件名称: adder_32.v

    ** 创建日期:

    ** 功能描述:32位累加器

    ** 硬件平台:大西瓜第三代开发板,http://daxiguafpga.taobao.com

    ** 版权声明:本代码属个人知识产权,本代码仅供交流学习.

    **---------------------------修改文件的相关信息----------------

    ** 修改人:

    ** 修改日期:    

    ** 修改内容:

    *******************************************************************************/

    module adder_32(data1,data2,sum);

    input [31:0] data1,data2;//输入数12

    output [31:0] sum;//和输出

     

    wire [31:0] data1,data2;

    wire [31:0] sum;

     

    assign sum=data1+data2;

     

    endmodule

    实验效果

     

     

     

    大西瓜FPGA-->https://daxiguafpga.taobao.com

    配套开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-24211932856.3.489d7241aCjspB&id=633897209972

    博客资料、代码、图片、文字等属大西瓜FPGA所有,切勿用于商业! 若引用资料、代码、图片、文字等等请注明出处,谢谢!

       

    每日推送不同科技解读,原创深耕解读当下科技,敬请关注微信公众号"科乎"。

  • 相关阅读:
    假期python复习2
    假期python复习
    java学习博客2
    Ubuntu20.04安装配置java和tomcat部署静态html网站方法
    如何使用eclipse使用Maven
    __block用结构体使用forwarding指针的原因
    Block存储域学习
    Block捕获__block局部变量的底层原理
    《Objective-C 高级编程》 1.2.3节 alloc/retain/release/dealloc 实现——学习总结
    UICollectonView使用总结
  • 原文地址:https://www.cnblogs.com/logic3/p/15915918.html
Copyright © 2020-2023  润新知