在做一个电子琴演奏系统如何用quartusII仿真,自己仿真出的波形太奇怪了,真心求助

2019-03-25 07:37发布

程序如下:modulepiano(in,clk_6MHz,clk_4Hz,song,speaker);       input in,clk_6MHz,clk_4Hz,song;       output speaker;       reg speaker;       reg[7:0] state;       reg song_on;       wire[6:0] in;              reg[3:0] high,med,low;       reg[13:0] divider,origin;       reg[7:0] counter;       reg out;       wire carry;                               reg[20:0] i;       parameter zero=8'b0000_0000,                          one=8'b0000_0001,                        two=8'b0000_0010,                        three=8'b0000_0100,                        four=8'b0000_1000,                        five=8'b0001_0000,                        six=8'b0010_0000,                       seven=8'b0100_0000;       initial                 begin                song_on<=0;                end        always @(posedge song)                begin                song_on<=~song_on;                end        always @(posedge clk_6MHz)                                  begin                if(song_on)                        speaker<=out;                else                begin                                        case(in)                zero:begin                        speaker<=0;                        i<=0;                        end                one:begin                //do                        if(i>=11451)                                begin                                speaker=!speaker;                                i<=0;                                end                        else                                i<=i+1;                        end                two:begin                                //re                       if(i>=10204)                                begin                               speaker=!speaker;                                i<=0;                                end                        else                                i<=i+1;                        end                three:begin                                //mi                        if(i>=9091)                                begin                               speaker=!speaker;                                i<=0;                                end                        else                                i<=i+1;                        end                four:begin                                //        fa                        if(i>=8596)                               begin                               speaker=!speaker;                                i<=0;                                end                        else                                i<=i+1;                        end               five:begin                        //so                        if(i>=7653)                                begin                               speaker=!speaker;                                i<=0;                                end                        else                                i<=i+1;                        end                six:begin                        //lo                        if(i>=6818)                                begin                                speaker=!speaker;                                i<=0;                                end                        else                                i<=i+1;                        end                seven:begin                        //si                       if(i>=6073)                                begin                               speaker=!speaker;                                i<=0;                                end                        else                                i<=i+1;                        end                default:begin                        speaker<=0;                        i<=0;                        end                endcase                end       end                                 assign carry=(divider==16383);                always @(posedge clk_6MHz)                        begin                         if(carry)                                divider<=origin;                        else                                 divider<=divider+1;                        end                always @(posedge carry)                        begin                        out<=~out; //2 分频产生方波信号                        end                always @(posedge clk_4Hz)                       begin                        case({high,med,low}) //分频比预置                'b000000000011:origin<=7281;                'b000000000101:origin<=8730;                'b000000000110:origin<=9565;                'b000000000111: origin<=10310;                'b000000010000:origin<=10647;                'b000000100000:origin<=11272;                'b000000110000:origin<=11831;                'b000001010000:origin<=12556;                'b000001100000:origin<=12974;                'b000100000000:origin<=13516;                'b000000000000:origin<=16383;                        endcase                        end                always @(posedge clk_4Hz)                        begin                        if(counter==63)                                 counter<=0;//计时,以实现循环演奏                        else                                counter<=counter+1;                        case(counter) //记谱                0:{high,med,low}<='b000000000011; //低音“3”                1: {high,med,low}<='b000000000011; //持续4 个时钟节拍                2:{high,med,low}<='b000000000011;                3:{high,med,low}<='b000000000011;                4:{high,med,low}<='b000000000101; //低音“5”                5:{high,med,low}<='b000000000101; //发3 个时钟节拍                6:{high,med,low}<='b000000000101;                7:{high,med,low}<='b000000000110; //低音“6”                8:{high,med,low}<='b000000010000; //中音“1”                9:{high,med,low}<='b000000010000; //发3 个时钟节拍               10:{high,med,low}<='b000000010000;                11:{high,med,low}<='b000000100000; //中音“2”                12:{high,med,low}<='b000000000110; //低音“6”                13:{high,med,low}<='b000000010000;                14: {high,med,low}<='b000000000101;                15:{high,med,low}<='b000000000101;                16:{high,med,low}<='b000001010000; //中音“5”                17:{high,med,low}<='b000001010000; //发3 个时钟节拍                18:{high,med,low}<='b000001010000;                19:{high,med,low}<='b000100000000; //高音“1”                20:{high,med,low}<='b000001100000;                21:{high,med,low}<='b000001010000;                22:{high,med,low}<='b000000110000;                23: {high,med,low}<='b000001010000;                24:{high,med,low}<='b000000100000; //中音“2”                25:{high,med,low}<='b000000100000; //持续11 个时钟节拍                26:{high,med,low}<='b000000100000;                27:{high,med,low}<='b000000100000;                28:{high,med,low}<='b000000100000;                29:{high,med,low}<='b000000100000;                30:{high,med,low}<='b000000100000;                31:{high,med,low}<='b000000100000;                32:{high,med,low}<='b000000100000;                33:{high,med,low}<='b000000100000;                34:{high,med,low}<='b000000100000;                35:{high,med,low}<='b000000110000; //中音“3”                36:{high,med,low}<='b000000000111; //低音“7”                37: {high,med,low}<='b000000000111;                38:{high,med,low}<='b000000000110; //低音“6”                39:{high,med,low}<='b000000000110;                40:{high,med,low}<='b000000000101; //低音“5”                41:{high,med,low}<='b000000000101;               42:{high,med,low}<='b000000000101;                43:{high,med,low}<='b000000000110; //低音“6”                44:{high,med,low}<='b000000010000; //中音“1”                45:{high,med,low}<='b000000010000;                46: {high,med,low}<='b000000100000;//中音“2”                47:{high,med,low}<='b000000100000;                48:{high,med,low}<='b000000000011; //低音“3”                49:{high,med,low}<='b000000000011;                50:{high,med,low}<='b000000010000; //中音“1”               51:{high,med,low}<='b000000010000;                52:{high,med,low}<='b000000000110;                53:{high,med,low}<='b000000000101; //低音“5”                54:{high,med,low}<='b000000000110;                55:{high,med,low}<='b000000010000; //中音“1”                56:{high,med,low}<='b000000000101; //低音“5”                57:{high,med,low}<='b000000000101; //持续8 个时钟节拍                58:{high,med,low}<='b000000000101;                59:{high,med,low}<='b000000000101;                60: {high,med,low}<='b000000000101;                61:{high,med,low}<='b000000000101;                62:{high,med,low}<='b000000000101;                63:{high,med,low}<='b000000000101;                        endcase                        endendmodule 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
gerredgk
1楼-- · 2019-03-26 04:56
5525 发表于 2016-5-17 22:01
t1, in=0000_0001 的波形截图t2, in=0100_0000 的波形截图
随便搞点,你的输入信号具体细节我也不清楚,希 ...

首先非常感谢大神你,我想问问你这些是怎么调出来的,我用的QuartusII 9.0,说实话我看不懂你这个,其实论文只要能有这种波形就行了,我现在只会在overwrite count value里设置周期,但总是得不出输出波形,我的指导老师也什么都不给我说,可以加你的QQ吗,那样方便交流,我只需要一个输出波形,毕竟周六就要答辩了。。。
5525
2楼-- · 2019-03-26 05:51
朋友你好,N年qq不用了。真的。
我用的的Modelsim,自己写的环境,和test bench,并把程序作了简单的修改。

也就,加了rst而已,不然大都跑不出来
    always @(posedge rst or posedge clk_4Hz) begin
        if (rst) begin
            counter<=0;//??,以??循?演奏
        end else begin
            counter <= (counter==63) ? 0 : (counter+1);
        end
    end
gerredgk
3楼-- · 2019-03-26 06:32
5525 发表于 2016-5-17 22:21
朋友你好,N年qq不用了。真的。
我用的的Modelsim,自己写的环境,和test bench,并把程序作了简单的修改。
...

感谢你的热心帮助,我再摸索摸索
5525
4楼-- · 2019-03-26 06:49
简单的 测试程序和你的程序 贴给你。
测试的激励是 自己想着写的,不对你可以自己改。
modelsim有免费的,自己可以装。
gerredgk
5楼-- · 2019-03-26 07:43
 精彩回答 2  元偷偷看……

一周热门 更多>