请问下面代码哪里有问题

2019-07-15 23:32发布

module wave_gen(address,inclk,select,freq);
output[8:0] address;
input       inclk;
input[1:0]  select;
input[3:0]  freq;
reg[7:0]           Qout;
reg[8:0]    adderss;
reg[7:0]    k,m;
wire [1:0] select;
parameter   sina_wave=2'b00,swat_wave=2'b01,
            squr_wave=2'b10,trig_wave=2'b11;
always @(posedge inclk)
  begin
     case(select)
             sina_wave:begin
                            if(select==2'b01)  address<=128;
                                                if(select==2'b10)  address<=256;
                                                if(select==2'b11)  address<=384;
                                                if(freq==0||freq==1)
                                                   begin
                                                            if(address>=127)  adderss<=0;
                                                                 else              adderss<=address+1;
                                                                 end
                                                else
                                                    begin
                                                         k<=127/freq;
                                                         m<=freq*k;
                                                         if(address>=m)
                                                            adderss<=0;
                                                         else
                                                            adderss<=address+freq;
                                                         end
                                                end
                          swat_wave:begin
                            if(select==2'b00)  address<=0;
                                                if(select==2'b10)  address<=256;
                                                if(select==2'b11)  address<=384;
                                                if(address < 128) adderss<=128;
                                                else
                                                  begin
                                                                if(freq==0||freq==1)
                                                                        begin
                                                                                 if(address>=255)  adderss<=128;
                                                                                 else              adderss<=address+1;
                                                                                 end
                                                                else
                                                                         begin
                                                                         k<=127/freq;
                                                                         m<=freq*k;
                                                                         if(address>=(m+128))
                                                                                 adderss<=9'd128;
                                                                         else
                                                                                 adderss<=address+freq;
                                                                         end
                                                                end
                                                        end
                          squr_wave:begin
                            if(select==2'b00)  address<=0;
                                                if(select==2'b01)  address<=128;
                                                if(select==2'b11)  address<=384;
                                                if(address<256)  address<=256;
                                                else
                                                begin
                                                                if(freq==0||freq==1)
                                                                        begin
                                                                                 if(address>=383)  adderss<=256;
                                                                                 else              adderss<=address+1;
                                                                                 end
                                                                else
                                                                         begin
                                                                         k<=127/freq;
                                                                         m<=freq*k;
                                                                         if(address>=(m+256))
                                                                                 adderss<=256;
                                                                         else
                                                                                 adderss<=address+freq;
                                                                         end
                                                                end
                                                end
                          trig_wave:begin
                            if(select==2'b00)  address<=0;
                                                if(select==2'b01)  address<=128;
                                                if(select==2'b10)  address<=256;
                                                if(address<=384)  address<=384;
                                                else
                                                begin
                                                        if(freq==0||freq==1)
                                                                begin
                                                                         if(address>=511)  adderss<=384;
                                                                         else              adderss<=address+1;
                                                                         end
                                                        else
                                                                 begin
                                                                 k<=127/freq;
                                                                 m<=freq*k;
                                                                 if(address>=(m+384))
                                                                         adderss<=384;
                                                                 else
                                                                         adderss<=address+freq;
                                                                 end
                                                        end
                                                end
                                endcase
                        end
                endmodule

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
烦烦烦小灰
1楼-- · 2019-07-16 19:48
 精彩回答 2  元偷偷看……
houxiaoxiao
2楼-- · 2019-07-17 00:22
yangzhiyuan0928 发表于 2015-9-11 10:52
您好,很高兴认识您!
     首先:代码编译没通过。
     其次:我知道,您是在做一个波形发生器模块,select作为选择输出波形,

我这里的adderss的值不是0-511个值吗,它作为一个地址,里面存储的是四个波形的值,0-127是一个周期正弦的值,128-255是一个周期锯齿波的值,256-383是一个周期方波的值,384-511是一个周期三角波的值,至于你说的if(select==00)的那些语句,可以不要
houxiaoxiao
3楼-- · 2019-07-17 06:21
我之前调单片机的时候,也做过这四种波形的生成,我想把那种思想用在FPGA中,我本来想生成一个数组,把用函数发生器生成的的128点的正弦波的值存入到一个数组中,输出的时候通过查找表进行输出,可是我刚开始学习,很多都不太懂,所以
yangzhiyuan0928
4楼-- · 2019-07-17 11:27
houxiaoxiao 发表于 2015-9-11 15:25
我之前调单片机的时候,也做过这四种波形的生成,我想把那种思想用在FPGA中,我本来想生成一个数组,把用函数发生器生成的的128点的正弦波的值存入到一个数组中,输出的时候通过查找表进行输出,可是我刚开始学习,很多都不太懂,所以 ...

是可以这样来产生波形的,我之前也做过,通过数组存储波形数据,然后将数据送至DA,转换出模拟信号,通过滤波输出波形
houxiaoxiao
5楼-- · 2019-07-17 15:24
yangzhiyuan0928 发表于 2015-9-11 15:51
是可以这样来产生波形的,我之前也做过,通过数组存储波形数据,然后将数据送至DA,转换出模拟信号,通过滤波输出波形

可是用verilog,怎么表示,我就不会用了。刚开始学,有些语句的用法还不是太了解

一周热门 更多>