查看: 306|回复: 0

[原创] 【锆石 A4】单口rom简单驱动DA输出正弦波

[复制链接]

19

主题

2

好友

370

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    开心
    2016-9-21 20:33
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    发表于 2016-8-22 11:39:10 |显示全部楼层
    本帖最后由 ihalin 于 2016-8-22 12:34 编辑

    手头刚好有块高速 AD/DA 模块,用锆石A4来驱动他产生正玄波,在手上都快发霉了
    实验:将正玄波数据存储在IP核构建ROM中,从ROM中读出数据,并将数据直接通过并口输出到DA上。、
    DA原理图: 使用的是AD9708
    QQ截图20160822105232.png

    现在开始讲解实现这个功能:
    在建工程之前先准备一个正玄波的mif文件要用到一个软件来生成
    软件Guagle_wave Guagle_wave.7z (190.7 KB, 下载次数: 2)
    来生成正玄波
    然后建立工程
    添加ip核(因为我用的是15的版本)在IP catalog 中找到单口的rom 添加
    QQ截图20160822110011.png

    然后是配置rom了
    QQ截图20160822110229.png

    然后下一步
    QQ截图20160822110627.png

    最后添加之前生成的mif文件
    QQ截图20160822110733.png


    完成。
    在编译一下
    然后写一个testbench文件进行RTL的仿真
    代码:
    1. `timescale 1ns/1ns
    2. `define clk_period 20



    3. module  rom_sin_tb;

    4.    reg [7:0]addr;
    5.         reg clk;
    6.         
    7.         wire [7:0]q;

    8.    integer i;
    9.         rom_sin rom_sin1(
    10.                 .address(addr),
    11.                 .clock(clk),
    12.                 .q(q)
    13.         );

    14.         
    15.         initial clk = 1;
    16.         always #(`clk_period/2) clk = ~clk;
    17.         
    18.         initial begin
    19.          addr = 0;
    20.         for(i=0;i<2550;i=i+1) begin         
    21.         #`clk_period;
    22.         addr = addr +1;
    23.         end
    24.   #(`clk_period * 500);
    25.   $stop;
    26.   end
    27. endmodule
    复制代码
    然后全编译一下
    仿真:
    得到的波形是这样的:
    QQ截图20160822111331.png

    去设置一下q的数据类型是无符号的

    QQ截图20160822111453.png

    然后得到的波形是:
    QQ截图20160822111512.png

    波形上移了,然后去设置一下波形的最大值最小值的   最大254 最小0
    20160822111826.png

    然后波形出来了
    QQ截图20160822111926.png

    仿真成功了
    然后就是板级验证了:
    代码:
    1. module rom_sin_top(Clk,DA_Clk,Rst_n,q);

    2.    input Clk;
    3.         input Rst_n;

    4. output DA_Clk;
    5.         output [7:0]q;

    6. reg [7:0]addr;

    7. rom_sin rom_sin2(
    8.         .address(addr),
    9.         .clock(Clk),
    10.         .q(q)
    11.         );

    12.   assign DA_Clk = Clk;
    13.   always@(posedge Clk or negedge Rst_n)
    14.   if(!Rst_n)
    15.     addr <= 8'd0;
    16.         else
    17.           addr <= addr +1'b1;
    18. endmodule
    复制代码
    分配引脚:
    QQ截图20160822113843.png

    最后下载到板子上:
    P60822-103937.jpg
    P60822-103947.jpg


    完成
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-7 00:14 , Processed in 0.075887 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部