FPGA状态机 clk_divider_3_fsm

 此图仅供参考,程序中3个always@语句,分别完成激励方程、转换方程和输出方程的功能。

Verilog程序

module clk_divider_3_fsm (

input                            sys_clk,

input                           sys_rst_n,

output          reg          clk_divider_3 //输出时钟信号3分频

);

//parameter

parameter S0 = 3'b001;

parameter S1 = 3'b010;

parameter S2 = 3'b100;

//reg

reg [2:0] curr_st;

reg [2:0] next_st;

//**************always@分别激励方程、转换方程和输出方程**********************//

//激励方程----输入端的信号,类似于D端

always@(posedge sys_clk or negedge sys_rst_n)        begin

if(!sys_rst_n)

curr_st<=S0;

else

curr_st<=next_st;

end

//转换方程----输出端的信号,类似于Q端

always@(*)        begin

case(curr_st)

S0:        next_st        =        S1;

S1:        next_st        =        S2;

S2:        next_st        =        S0;

default :  next_st        =        S0;

endcase

end

//输出方程----,类似于Z端

always@(posedge sys_clk or negedge sys_rst_n)        begin        //输出时钟3分频信号

if(!sys_rst_n)

clk_divider_3<=1'b0;

else if  (   (curr_st==S0)    |       (curr_st==S1)    )         //2个时钟周期高电平

clk_divider_3<=1'b1;

else if  (   curr_st==S2    )                                              //1个时钟周期低电平

clk_divider_3<=1'b0;

else

;                                //空语句

end

endmodule

SignaltapII仿真结果

仿真数据

 仿真设置

致谢

感谢正点原子,欢迎购买开拓者开发板学习。

 淘宝店铺:http://openedv.taobao.com        技术论坛:www.openedv.com

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值