微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 有限状态机和一堆counter有什么区别?

有限状态机和一堆counter有什么区别?

时间:10-02 整理:3721RD 点击:
我用verilog实现了一个两层循环的算法,用伪代码就大概是:
for(i=1;i<11;i++)
    for(j=1;j<11;j++)
         a[i]=a[i]+b[j];
仿真结果是对的,也能综合,但是同组的人都说我没有“有限状态机”,很不专业,也没法写报告;
但是我自认为设计的还是有条理的:
(a 和 b 都是register 或者就是buffer,连RAM的访问都不用)
rst信号时,所有寄存器复位;
外来enable信号时,第1个a 寄存器开始存储b 寄存器的累加值,我用一个counter_b从0开始计b 的相加次数;
当counter_b==10的时候,counter_b归零开始重新算,下一轮的累加结果赋给下一个a 寄存器,counter_a加一;
当counter_a==10的时候,counter_a归零,ready信号从0到1向系统提示任务完成;
说白了就是由rst, enable, counter_a, counter_b来控制的。请问如何用FSM(有限状态机)来抽象出来描述?
关键就是要把控制信号全都放到一个模块里面,起名为FSM,写文章的时候比较好看。

在综合之前,能从代码直接看出电路的样子吗?你都给不出电路图,文章能好看吗?
当然你的这个东西两个always块就解决了,真的没必要用FSM(有限状态机,看来你也不知道FSM是什么)

电路综合不提倡使用for语句,何况你这还是嵌套使用,至于原因,你可以自己查查

如3楼所说,现在综合工具对for的支持都不好,

楼上,lz已经说了那个是伪代码……
如果仅实现你说的循环累加,倒是真的没必要用状态机。没有周期要求的话,加法器&寄存器就够了,寄存器用来存放加法结果并返回至加法器输入端。
很多情况下状态机的描述会更清晰,但并不是说一定要用状态机,找到合适的方法即可。

你们组都是高人啊,只是一个加法,用什么状态机啊;
用流水线

状态机只是节省了状态转换的条件 比如一个always使能拧一个always
所以只要是时序电路 可以用状态机也可以不用状态机,也并不是状态机一定好用 看使用环境的

状态机有一段式、两端式、三段式。

搞不懂。
如果用到状态控制,当然是状态机比较好。但也不用乱用。
FOR语句用在综合,主要是因为它是组会逻辑,时序比较难收敛(除非你的设计只跑几兆)。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top