码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • FFT64点傅里叶变换verilog蝶形运算,代码和视频


    名称:FFT64点verilog傅里叶变换

    软件:Quartus

    语言:Verilog

    代码功能:

        使用verilog代码实现64点FFT变换,使用蝶形运算实现傅里叶变换

    演示视频:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=208

    FPGA代码资源下载网:hdlcode.com

    代码下载:

    软件:Quartus 语言:Verilog 代码功能: 使用verilog代码实现64点FFT变换,使用蝶形运算实现傅里叶变换名称:FFT64点verilog傅里叶变换(代码在文末付费下载)软件:Quartus语言:Verilog代码功能: 使用verilog代码实现64点FFT变换,使用蝶形运算实现傅里叶变换演示视频:FPGA代码资源下载网:hdlcode.com部分代码展示`timescale 1ns / 1ps//64点FFTmodule top(input clk, input rst, input [icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=208

    部分代码展示

    `timescale 1ns / 1ps
    //64点FFT
    module top(input clk,
      input rst,
      input [7:0] data_in_r,
      input [7:0] data_in_i,
      input data_in_ready,
      output [19:0] data_out_r,
      output [19:0] data_out_i,
      output reg data_out_ready
    );
    wire  working;
    reg [5:0] count;
    reg [5:0] count_out;
    reg flag;
    reg working_flag_0;
    reg working_flag_1; 
    reg working_flag_2;
    reg working_flag_3; 
    reg working_flag_4;
    reg working_flag_5; 
    reg working_flag_6;
    reg working_flag_7; 
    assign  working = data_in_ready || working_flag_1;
    always @(posedge clk)
    begin
    if(rst)
    begin
    count<=6'd0;
    end
    else
    begin
    if(!data_in_ready)
    count<=6'd0;
    else
    begin
    if(count < 6'd63)
    count<=count+6'b1;
    else
    count <= count;
    end
    end
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_0 <= 0;
    else
    if(working && working_flag_1 == 0)
    working_flag_0 <= 1;
    else
    working_flag_0 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    flag <= 0;
    else
    if(count == 6'd62 && flag == 0)
    flag <= 1;
    else
    flag <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_1 <= 0;
    else
    if(count == 6'd63 && flag == 1)
    working_flag_1 <= 1;
    else
    working_flag_1 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_2 <= 0;
    else
    if(working_flag_1)
    working_flag_2 <= 1;
    else
    working_flag_2 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_3 <= 0;
    else
    if(working_flag_2)
    working_flag_3 <= 1;
    else
    working_flag_3 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_4 <= 0;
    else
    if(working_flag_3)
    working_flag_4 <= 1;
    else
    working_flag_4 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_5 <= 0;
    else
    if(working_flag_4)
    working_flag_5 <= 1;
    else
    working_flag_5 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_6 <= 0;
    else
    if(working_flag_5)
    working_flag_6 <= 1;
    else
    working_flag_6 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    working_flag_7 <= 0;
    else
    if(working_flag_6)
    working_flag_7 <= 1;
    else
    if(count_out < 6'd63 && working_flag_7 == 1)
    working_flag_7 <= 1;
    else
    working_flag_7 <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    count_out <= 0;
    else
    if(working_flag_6)
    count_out <= 0;
    else
    if(count_out < 6'd63)
    count_out <= count_out + 1;
    else
    count_out <= 0;
    end
    always@(posedge clk)
    begin
    if(rst)
    data_out_ready <= 0;
    else
    if(working_flag_7 == 1 && data_out_ready == 0)
    data_out_ready <= 1;
    else
    if(count_out < 6'd63)
    data_out_ready <= data_out_ready;
    else
    data_out_ready <= 6'b0;
    end
    wire [15:0] data_in_r_15;
    wire [15:0] data_in_i_15;
    assign data_in_r_15={data_in_r[7],data_in_r[7],data_in_r[7],data_in_r[7],data_in_r[7],data_in_r[7],data_in_r[7],data_in_r[7],data_in_r};
    assign data_in_i_15={data_in_i[7],data_in_i[7],data_in_i[7],data_in_i[7],data_in_i[7],data_in_i[7],data_in_i[7],data_in_i[7],data_in_i};
    butterfly butterfly(.clk(clk),
      .rst(rst),
      .data_in_r(data_in_r_15),
      .data_in_i(data_in_i_15),
      .count(count),
      .count_out(count_out),
      .working_flag_0(working_flag_0),
      .working_flag_1(working_flag_1),
      .working_flag_2(working_flag_2),
      .working_flag_3(working_flag_3),
      .working_flag_4(working_flag_4),
      .working_flag_5(working_flag_5),
      .working_flag_6(working_flag_6),
      .working_flag_7(working_flag_7),
      .data_out_r(data_out_r),
      .data_out_i(data_out_i)
    );
    endmodule
    

    设计文档:

    64点fft设计.doc

    1.工程文件

    2. 程序文件

    3.Testbench

    4.modelsim仿真图

  • 相关阅读:
    Yocto Project 编译imx-第1节(下载和编译)
    【HarmonyOS】HarmonyOS备案获取公钥和指纹
    Linux 之前的 Unix 桌面沉浮启示录
    javaScript 内存管理
    Jmeter——循环控制器中实现Counter计数器的次数重置
    Java 锁(synchronized)升级过程
    新手入门深度学习 | 3-6:优化器optimizers
    数据库的三大范式(重要)
    使用vLLM和ChatGLM3-6b批量推理
    SQL Server对象类型(3)——4.3.视图(View)
  • 原文地址:https://blog.csdn.net/diaojiangxue/article/details/133967123
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号