t******0 发帖数: 629 | 1 我用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,写文章的时候比较好看。 |
p******a 发帖数: 130 | 2 搜一下2段式或者3段式状态机的写法。
【在 t******0 的大作中提到】 : 我用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从
|
t******0 发帖数: 629 | 3 谢谢大侠指点。
有限状态机的代码格式和基本概念我知道,也一定会继续思考的。
看别人的文章时,他们都会画出Block Diagram,其中有一个 FSM 放在那里,用几个信
号箭头和其他block相连,然后给出直观的抽象状态流图。
请问一般数字电路设计中, FSM 是一个必须独立来设计的模块吗?综合以后的电路也
要专门考虑FSM该放到floorplan 的位置是吗?
我对综合很不懂,弱感觉verilog代码里FSM就是和其他功能融合在一块儿的东西。。。
我是刚刚转行VLSI的,课程都是从本科课刚学起,搞研究就更没有经验了,无奈老板赶
鸭子上架。。。。。请大侠排砖啊,感激不尽。 |
p******a 发帖数: 130 | 4 假设你要讨论的是时序电路.FSM一般是一个模块的主干,应该是首先设计的.FSM状态
的转换在时钟沿实现.输入对状态及输出的影响在时钟沿之间用组合逻辑实现.这样做
的好处是分离了组合逻辑和时序逻辑,便于静态时序分析以及时序优化.建议你看看
altera的
"recommended hdl coding style".
FSM只要能被综合软件识别出来的话,一般都优化得很好,我觉得一般不需要用
floorplan.大宽度数据传输之类的地方可能需要用到floorplan, 比如将一个32-bit宽
的数据从一个模块的输出送到另一个模块的输入.当然具体情况具体分析,从静态时序
分析仪中你可以找到最需要优化的关键路径.
另外,如果你使用Altera的Quartus II的话,在"Tools->Netlist Viewers->State
Machine Viewer"里面应该可以看到状态流图,如果没看到,说明设想中的状态机实际
上被综合成了别的结构.
【在 t******0 的大作中提到】 : 谢谢大侠指点。 : 有限状态机的代码格式和基本概念我知道,也一定会继续思考的。 : 看别人的文章时,他们都会画出Block Diagram,其中有一个 FSM 放在那里,用几个信 : 号箭头和其他block相连,然后给出直观的抽象状态流图。 : 请问一般数字电路设计中, FSM 是一个必须独立来设计的模块吗?综合以后的电路也 : 要专门考虑FSM该放到floorplan 的位置是吗? : 我对综合很不懂,弱感觉verilog代码里FSM就是和其他功能融合在一块儿的东西。。。 : 我是刚刚转行VLSI的,课程都是从本科课刚学起,搞研究就更没有经验了,无奈老板赶 : 鸭子上架。。。。。请大侠排砖啊,感激不尽。
|
t******0 发帖数: 629 | 5 实在是非常感谢。学习了:)
【在 p******a 的大作中提到】 : 假设你要讨论的是时序电路.FSM一般是一个模块的主干,应该是首先设计的.FSM状态 : 的转换在时钟沿实现.输入对状态及输出的影响在时钟沿之间用组合逻辑实现.这样做 : 的好处是分离了组合逻辑和时序逻辑,便于静态时序分析以及时序优化.建议你看看 : altera的 : "recommended hdl coding style". : FSM只要能被综合软件识别出来的话,一般都优化得很好,我觉得一般不需要用 : floorplan.大宽度数据传输之类的地方可能需要用到floorplan, 比如将一个32-bit宽 : 的数据从一个模块的输出送到另一个模块的输入.当然具体情况具体分析,从静态时序 : 分析仪中你可以找到最需要优化的关键路径. : 另外,如果你使用Altera的Quartus II的话,在"Tools->Netlist Viewers->State
|
O******2 发帖数: 210 | 6 Synplify Pro也可以直接自动生成FSM的图出来。 |
n******g 发帖数: 662 | 7 It seems that your code will use many adders to realize the addition between
a and b.
Your colleague may be suggesting you to use FSM plus an adder to realize the
whole function? |