• 用Verilog HDL写了个sine wave generator


    弄的蛋都碎了阿。。。

    先上代码:

    sine.v 

    module sine (clk, nrst, dout);
        input       clk,            // clock input
                    nrst;           // active-low reset
        output[10:0]        dout;           // 10-bit output

        reg[3:0]    addr;           // ROM address
        reg[1:0]    quad;           // Quadrant count

        wire[9:0]   d;              // read data from ROM

        rom16x10    rom(.addr(addr), .data(d));

        always @(posedge clk or negedge nrst) begin
            if(!nrst) begin
                quad = 0;
                addr = 0;
            end
            else begin
                case (quad)
                    0,2begin
                        if(addr==15) quad = quad+1;
                        else addr = addr+1;
                    end
                    1,3begin
                        if(addr==0) quad = quad+1;
                        else addr = addr-1;
                    end
                endcase
            end
        end

        assign dout = (quad[1])? (1024-d):(1024+d);

    endmodule  


    rom.v

    module rom8x10 (addr, data);
        input[3:0]  addr;           // address input
        output[9:0] data;           // data output

        reg[9:0]            rom[0:15];               // memory variable

        initial     $readmemh("rom.dat",rom);

        assign      data = rom[addr];

    endmodule  


    过程其实比较简单,一个周期分成4部分来画,第一个四分之一周期0-1024,第二个四分之一周期1024-0,继续循环;每个周期64个采样点。

    蛋疼的是要算这个采样点的值阿,我手闲阿,用计算器都比这快有木有。。。

    我用lua算的:

    for i=0,16 do print(1024*math.sin(math.rad(i*5.2))) end

    lua好久没用不怎么会用了。。。这一句憋了好久。。。

    算出来之后再把数值转成16进制。。。转的想哭。

    =======bug1====== 

    写完上面这些,发现90/16,应该是5.6的样子- -|||,算错了,重来。

    =======bug2======

    要做的是10位的输出,1024+1024溢出鸟。。。改成512的再算一遍。 

    =======纯粹是蛋疼===

    验证硬件,又不是干嘛用,完全不用管效率的嘛,直接这样不是更省事?

    for i=0,64 do print(512*(1+math.sin(math.rad(i*5.62)))) end 

     

    ——————
    无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
  • 相关阅读:
    U-Boot新手入门
    安装交叉编译工具
    Makefile 工程管理
    gcc基本用法
    poj 3264 Balanced Lineup
    hdoj 1166 敌兵布阵
    poj 1363 Rails
    poj 1028 Web Navigation
    zoj 3621 Factorial Problem in Base K
    poj1861最小生成树
  • 原文地址:https://www.cnblogs.com/pied/p/2410286.html
Copyright © 2020-2023  润新知