FPGA状态机电路综合分析

在FPGA中,状态机是比较常用的。特别是要处理一些串行执行的操作。但是对于我们编写的状态机,综合出来的电路应该是长什么样子的了?这个在初学的时候都是不关心的,但是深入的话,还是要了解的。

       状态机分为两种,一种是moore型,一种是mealy型。两种的区别就是输出逻辑是否会由输入决定。

       如下图:

       状态机分为三部分模块

第一部分为次态组合逻辑电路,通过将状态输出反馈到次态组合逻辑电路,在和输入信号决定,下一状态是什么状态。

       第二部分就是时序电路,就是一个触发器,将下一状态的值给现在的状态

       第三部分是输出逻辑,通过判断当前的状态,得到输出

在这里插入图片描述

module led(
    input                   clk,
    input                   rst_n,
    input                   change,
    output  reg [3:0]       led

    );
    localparam   led_0001    = 'd0;
    localparam  led_0010   = 'd1;
    localparam   led_0100    = 'd2;
    localparam   led_1000    = 'd3;
    reg [1:0]   state;
    
//
	always@(posedge clk or negedge rst_n) begin

        if(!rst_n)

            state <= led_0001;

        else

            case(state)

            led_0001:

                if(change)

                    state <= led_0010;

            led_0010:

                if(change)

                    state <= led_0100;

            led_0100:

                if(change)

                    state <= led_1000;

            led_1000:

                if(change)

                    state <= led_0001;

        endcase

    end

  //  
    `define use_case

    `ifdef use_case

    always@* begin

        case(state)

            led_0001:   led = 4'b0001;

            led_0010:   led = 4'b0010;

            led_0100:   led = 4'b0100;

            led_1000:   led = 4'b1000;

        endcase

        end

        `else
//
        always@* begin

            if(state == led_0001)

                led = 4'b0001;

            else if(state == led_0010)

                led = 4'b0010;

            else if(state == led_0100)

                led = 4'b0100;

            else

                led = 4'b1000;

        end

        `endif

endmodule

功能其实很简单,有4个状态,按照普通二进制编码。每个状态在输入信号change有效的时候状态跳转。在每个状态,4个LED输出是不一样的。

在代码中,使用了预编译`ifdef。这里输出逻辑采用if和case来实现,比较看看综合出来的电路区别。

ref

http://blog.chinaaet.com/weiqi7777/p/40172

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA状态机项目是指使用FPGA(Field-Programmable Gate Array)来实现状态机功能的项目。状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。在FPGA状态机项目中,我们可以使用Verilog编程语言来描述和实现状态机的功能。 根据提供的引用内容,有限状态机主要分为两大类:Moore状态机和Mealy状态机。Moore状态机的输出只与状态有关而与输入无关,而Mealy状态机的输出不仅与状态有关而且与输入有关。在FPGA状态机项目中,我们可以根据具体需求选择适合的状态机类型。 在设计FPGA状态机项目时,我们需要进行以下步骤: 1. 确定项目需求和功能描述,例如启动准备状态、启动测试、停止测试、查询测试结果、显示测试结果等。 2. 根据需求和功能描述,设计状态机的状态转移图,即状态图。状态图可以用来描述状态之间的转移关系和相应的输入输出条件。 3. 使用Verilog编程语言来实现状态机的功能。根据状态图,我们可以定义状态寄存器和组合逻辑电路,以及相应的输入和输出信号。 4. 进行仿真和验证,确保状态机的功能和性能符合预期。 5. 将Verilog代码综合FPGA芯片中,并进行实际硬件验证和测试。 总结起来,FPGA状态机项目是通过使用FPGA来实现状态机功能的项目。在项目中,我们可以使用Verilog编程语言来描述和实现状态机的功能,并根据具体需求选择适合的状态机类型。通过仿真和验证,我们可以确保状态机的功能和性能符合预期。最后,将Verilog代码综合FPGA芯片中,进行实际硬件验证和测试。 #### 引用[.reference_title] - *1* *2* [FPGA状态机](https://blog.csdn.net/weixin_46129506/article/details/124596358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [FPGA状态机简单测试](https://blog.csdn.net/m0_49297422/article/details/124569044)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值