3424|11

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

程序如下: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
                        end
endmodule
此帖出自FPGA/CPLD论坛

最新回复

简单的 测试程序和你的程序 贴给你。 测试的激励是 自己想着写的,不对你可以自己改。 modelsim有免费的,自己可以装。   详情 回复 发表于 2016-5-17 22:40
点赞 关注
 

回复
举报

7

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
各位大神帮帮忙啊,没有输出波形
此帖出自FPGA/CPLD论坛
 
 

回复

1950

帖子

4

TA的资源

版主

板凳
 
楼主,你代码看的好吃力啊,能整理下发吗。
有空回去跑跑看再回。
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 
5525 发表于 2016-5-17 11:48
楼主,你代码看的好吃力啊,能整理下发吗。
有空回去跑跑看再回。

额,这个源码就是这样的,是不是写的太满了不方便看?这个是别人给我的我也看不太懂,具体的话,我做的是一个基于CPLD的电子琴演奏系统,就是实现do、ri、mi...xi do这几个音阶,这段程序用QuartusII已经编译成功了,就是波形图出不来,我们最后要的就是一个波形图,求大神指点一下,真的很急,哎。。
此帖出自FPGA/CPLD论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

5
 
求大神们指点

QQ截图20160517134316.png (84.57 KB, 下载次数: 0)

现在出现了这个错误,我设置的end time是1s,每个输入的time period是10ns,求指点

现在出现了这个错误,我设置的end time是1s,每个输入的time period是10ns,求指点
此帖出自FPGA/CPLD论坛
 
 
 

回复

1950

帖子

4

TA的资源

版主

6
 
手头没有楼主的环境,用了原始的方法,整了点波形。
第一个是全图。

t_all.png (27.66 KB, 下载次数: 0)

t_all.png
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

1950

帖子

4

TA的资源

版主

7
 
t1, in=0000_0001 的波形截图t2, in=0100_0000 的波形截图
随便搞点,你的输入信号具体细节我也不清楚,希望能帮上忙




t1.png (25.76 KB, 下载次数: 0)

t1.png

t2.png (26.3 KB, 下载次数: 0)

t2.png
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

8
 
5525 发表于 2016-5-17 22:01
t1, in=0000_0001 的波形截图t2, in=0100_0000 的波形截图
随便搞点,你的输入信号具体细节我也不清楚,希 ...

首先非常感谢大神你,我想问问你这些是怎么调出来的,我用的QuartusII 9.0,说实话我看不懂你这个,其实论文只要能有这种波形就行了,我现在只会在overwrite count value里设置周期,但总是得不出输出波形,我的指导老师也什么都不给我说,可以加你的QQ吗,那样方便交流,我只需要一个输出波形,毕竟周六就要答辩了。。。
此帖出自FPGA/CPLD论坛
 
 
 

回复

1950

帖子

4

TA的资源

版主

9
 
朋友你好,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
此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

10
 
5525 发表于 2016-5-17 22:21
朋友你好,N年qq不用了。真的。
我用的的Modelsim,自己写的环境,和test bench,并把程序作了简单的修改。
...

感谢你的热心帮助,我再摸索摸索
此帖出自FPGA/CPLD论坛
 
 
 

回复

1950

帖子

4

TA的资源

版主

11
 
简单的 测试程序和你的程序 贴给你。
测试的激励是 自己想着写的,不对你可以自己改。
modelsim有免费的,自己可以装。

piano.v

9.04 KB, 下载次数: 7

TB_PINAO.v

1.05 KB, 下载次数: 5

此帖出自FPGA/CPLD论坛
个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

12
 
5525 发表于 2016-5-17 22:40
简单的 测试程序和你的程序 贴给你。
测试的激励是 自己想着写的,不对你可以自己改。
modelsim有免费的 ...

十分感谢大神
此帖出自FPGA/CPLD论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表