5556|9

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

FFT IP核控制,数据输入正常,但是sink_ready不拉高,数据也没有输出,下图是测试图 [复制链接]


此帖出自FPGA/CPLD论坛

最新回复

楼主,你好,我请教下你的控制代码是怎么写的?手册上也没说明控制时序啊  详情 回复 发表于 2018-4-9 11:17
点赞 关注
 

回复
举报

5979

帖子

8

TA的资源

版主

沙发
 
怎么例化的
此帖出自FPGA/CPLD论坛
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

这是我FFT 例化部分
core_fft        b2v_inst5(
        .clk(clk),
        .reset_n(rst),
        .fftpts_in(fftpts_in),
        .inverse(SYNTHESIZED_WIRE_1),
        .sink_valid(sink_valid),
        .sink_sop(sink_sop),
        .sink_eop(sink_eop),
        .sink_real(SYNTHESIZED_WIRE_4),
        .sink_imag(SYNTHESIZED_WIRE_5),
        .sink_error(SYNTHESIZED_WIRE_3),
        .source_ready(SYNTHESIZED_WIRE_2),
        .source_valid(source_valid),
        .fftpts_out(),
        .source_error(),
        .sink_ready(),
        .source_sop(),
    .source_eop(),
        .source_imag(source_imag[34:0]),
        .source_real(source_real[34:0]));
此帖出自FPGA/CPLD论坛
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(初级)

4
 
  .reset_n(rst),注意这个信号的极性哟
此帖出自FPGA/CPLD论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 
hh_kings 发表于 2017-12-14 14:50
.reset_n(rst),注意这个信号的极性哟

低复位
此帖出自FPGA/CPLD论坛
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(初级)

6
 
那你的rst信号是不是低复位啊?
此帖出自FPGA/CPLD论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

7
 
hh_kings 发表于 2017-12-14 16:36
那你的rst信号是不是低复位啊?

是,复位后拉高
此帖出自FPGA/CPLD论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

8
 
szlddn 发表于 2017-12-14 16:53
是,复位后拉高

这是控制代码
module fft_control(clk,rst,rst_fifo,w_cycle,fftpts_in1,sink_eop1,sink_sop1,sink_valid1,start_16,fft16_over,switch,re_im,out_reim,count_in,recycle,re1,re2,enable,reset_n)/*synthesis noprune*/;
input clk,rst;
input start_16,fft16_over;
input re1,re2;
input [47:0] re_im;
output reg [4:0] recycle;
output [10:0] fftpts_in1;
output sink_eop1,sink_sop1,sink_valid1;
output rst_fifo;
output w_cycle,switch;
output [10:0] count_in;
output [47:0] out_reim;
output enable;
output reg reset_n;
wire [47:0] out_reim;
wire [10:0] fftpts_in1;
wire sink_valid1,sin_sop1,sink_eop1;
reg enable;
reg w_cycle;
reg rst_fifo;
reg [3:0] state1;
reg [10:0] fftpts_in;
reg [10:0] count_in;       
reg sink_eop,sink_sop;
reg sink_valid;
reg flag;
reg switch;       
assign out_reim=flag? re_im:48'd0;
assign fftpts_in1=fftpts_in;
assign sink_valid1=sink_valid;
assign sink_sop1=sink_sop;
assign sink_eop1=sink_eop;
always @(posedge clk)
if(!rst) begin                       
        state1<=4'b0000;
        rst_fifo<=1'b1;       
        reset_n<=1'b0;               
        w_cycle<=1'b0;                       
        fftpts_in<=11'd1024;
        sink_eop<=1'b0;
        sink_sop<=1'b0;
        sink_valid<=1'b0;
        count_in<=11'd0;
        flag<=1'b1;
        fftpts_in<=11'd0;
        enable<=1'b0;
end
else begin
        case(state1)
        4'b0000:        begin
                                        rst_fifo<=1'b0;
                                        reset_n<=1'b1;                                                                       
                                        flag<=1'b1;                                                                               
                                        count_in<=11'd0;
                                        fftpts_in<=11'd1024;                                       
                                        w_cycle<=1'b0;       
                                        recycle<=5'd0;
                                        sink_eop<=1'b0;                                       
                                        sink_sop<=1'b0;                                                                       
                                        sink_valid<=1'b0;                                                               
                                        fftpts_in<=11'd1024;//一次FFT变换长度
                                        state1<=4'b0001;
                                        enable<=1'b0;
                               
                                end                                                               
    4'b0001:begin
                            
                             
                             
                              if(re1||re2) begin
                                               
                                               
                                                 sink_valid<=1'b1;                               //fifo读取使能拉高,数据开始输出,此时sink_valid拉高,数据开始输入                                                       
                                            sink_sop<=1'b1;//数据开始标志                                                               
                                            sink_eop<=1'b0;//数据结束标志                                 
                                            state1<=4'b0011;                       
                                               
                                        end
                                        else begin
                                     state1<=4'b0001;
                                     end
                        end
               
        4'b0010:        begin
                                        sink_valid<=1'b1;
                                                                                                
                                        sink_sop<=1'b1;                                                                       
                                        sink_eop<=1'b0;                                 
                                        state1<=4'b0011;
                                        w_cycle<=1'b0;
                                        enable<=1'b0;
                                                                                                               
                                        count_in<=count_in+11'd1;                       
                                end
       
        4'b0011: begin
                      if(count_in==11'd2045) begin
                                
                                                                                enable<=1'b1;//周期计数使能
                                                                                sink_eop<=1'b1;
                                                                               
                                                                                count_in<=11'd0;
                                                                                w_cycle<=1'b1;
                                                                                state1<=4'b1001;
                                                                                end
                                        else
                                                if(count_in==11'd1022) begin       
                                                                        sink_eop<=1'b1;//计满1024后拉高
                                                                       
                                                                                               
                                                                        state1<=4'b0010;//开始下一个1024变换                               
                                                        end
                                                else begin
                                                                count_in<=count_in+11'd1;
                                                                sink_sop<=1'b0;
                                                  end
                                          end
        4'b1001:begin
                      //fftpts_in<=11'd0;
                      
                      sink_valid<=1'b0;
                      sink_eop<=1'b0;
                      sink_sop<=1'b0;
                      enable<=1'b0;
                     if(enable==1'b1) begin
                        if(recycle==5'd16) begin //计满16周期后转入下一状态开始16点FFT
                           state1<=4'b0100;
                           
                        end
                        else begin
                            enable<=1'b0;
                            recycle<=recycle+1'b1; //enable为1时拉高,计满16周期,及进行16次1024变换
                            state1<=4'b0001;
                         end
                 end
              end
        4'b0100:        begin
                         
                        recycle=5'd0;
                        enable<=1'b0;       
                                        fftpts_in<=11'd16;//
                                                                                       
                                        sink_eop<=1'b0;                                 
                                        w_cycle<=1'b0;
                                        count_in<=11'd0;
                                        if(start_16==1'b1) begin//16点FFT开始
                                        state1<=4'b0101;                                       
                                end
                                else begin
                         state1<=4'b0100;
                         end
                   end
                                    
        4'b0101:        begin
                                  
                                        sink_valid<=1'b1;                                                               
                                        sink_sop<=1'b1;                                                                       
                                        sink_eop<=1'b0;
                                        state1<=4'b0110;                                                                       
                                end
        4'b0110:        begin
                                if(fft16_over==1'b1) begin//16点变换结束标志,开始转入1024点FFT;
                                      sink_valid<=1'b0;
                                      
                                     sink_sop<=1'b0;
                                     sink_eop<=1'b0;
                                      state1<=4'b0000;
                                      end
                                        else if(count_in==11'd14) begin                                               
                                                sink_eop<=1'b1;                                                               
                                                count_in<=11'd0;
                                                state1<=4'b0111;
                                                                               
                                                                       
                 end       
                                        else        begin
                                                        count_in<=count_in+11'd1;               
                                                        flag<=1'b1;       
                                                    sink_sop<=1'b0;                                                              
                                        end
                                       
                        end       
        4'b0111:        begin
                                        sink_eop<=1'b0;                                                                       
                                        sink_sop<=1'b1;                                                                       
                                        state1<=4'b0110;
                                        flag<=1'b1;                                                                               
                                end
        default:         state1<=4'b0000;
        endcase
end

always @(posedge clk)
if(!rst)
        switch<=1'b1;                                       
else
        case(fftpts_in)
                11'b10000000000:        switch<=1'b1;
                11'b00000010000:                switch<=1'b0;
        default:        switch<=switch;
        endcase
endmodule
此帖出自FPGA/CPLD论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

9
 
非常感谢啊,确实是复位的问题,复位不能只复位一次,要每个处理周期后都要再次复位
此帖出自FPGA/CPLD论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
楼主,你好,我请教下你的控制代码是怎么写的?手册上也没说明控制时序啊
此帖出自FPGA/CPLD论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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