lcytms
发表于 2017-7-31 20:10:29
1153
将原来一段的代码去掉注解,进行修改。
2/2是ON,是开节点。
开节点信号敏感表里面,就应该只是信号而没有沿。
lcytms
发表于 2017-8-3 09:37:21
1154
把赋值号左侧的state用next_state替换。
也就是说,被启动的那个state用next_state替换。
引用的那个state是什么?
我们来看看。
是current_state。
当前状态被引用的,只有一行,第29行。
要么出现在赋值号的右侧,要么被引用了,实际上是在if、case的括弧里面。
就是这样。
lcytms
发表于 2017-8-3 09:39:04
1155
其它的我们不做调整,都一模一样。
但是输入和输出是禁止迭代的,ON里面。
Count出现在赋值号的两侧,在组合电路上形成了闭合。
虽然我们明知它是不对的,但是我们还要做一次。
把它做成顶层。
看它会发生什么。
Ctrl+S、Ctrl+K。
出错了,把clk改成clk_in。
lcytms
发表于 2017-8-4 09:32:25
1156
两段建模完成,我们同样写它的验证。
新建verilog文件,另存为divider_fsm2s_mealy_tb.v。
从divider_fsm1s_mealy_tb.v拷贝粘贴过来。
修改代码。
做仿真设置。
明知它有问题,但是我们还要试一遍。
lcytms
发表于 2017-8-4 09:50:23
1157
查看仿真结果。看一下wave。
什么都没有。
并且报错。
右上角出现红色的倒三角。
报什么错呢?
它说迭代受限。
我们已经理解了,不必做过多的解释,同学都已经知道了。
就是因为代码里面出现了,赋值号的两侧出现了同名信号,形成了迭代。
小舍YZ
发表于 2017-8-7 16:39:38
有限状态机称之为Finite State Machine,它是描述各种复杂的时序行为的一种机制,一种方法。
有限状态机的理论在数字电路的时候,就得到了长足的发展。
而引入EDA以后呢,更是几乎是做了革命性的变化。
赞,,,,,,,,,,,,谢谢分享。。。。。。。。。。。。。。。:lol
lcytms
发表于 2017-8-13 23:17:11
1158
因为它是一个ON,形成了迭代。
这段英文的解释就是迭代受限。
什么叫迭代受限呢?
输入发生变化,输出变化。
输出变化了,会导致输入变化。
这个仿真器它就忙不迭了。
它就不停地用堆栈,用它内部的堆栈来处理这件事情。
这个是一个无限的循环,它的堆栈用完了。
所以它说迭代受限。得不到确定的结果。
好,这张图我们就知道它不能用于两段,我们来看看三段能不能用。
将两段的代码另存为divider_fsm3s_mealy.v。
我们知道三段的输出是CN。
它是闭节点的,三段。
设置为顶层。
名字换过来。
lcytms
发表于 2017-8-13 23:20:07
1159
现在两段、三段都在。三段的代码呢,先把原来2s2的部分注解掉。
因为3s2和3s3就是在原来2s2的基础上增加来的。
原来2s1直接变成了3s1,一模一样。
复制原来2s2的部分,去掉注解。
拆分了。
lcytms
发表于 2017-8-13 23:21:51
1200
最后一张图,就是三段式的3s2,是ON。
信号敏感表里面是*,没有问题。
我们看一下最后一张图,只有next_state。
其它的都不应该出现在赋值号的左侧。
在这段语句块里面,只允许一个信号出现在赋值号的左侧,就是next_state。
是不是?
刚才那张图。
我们把所有的输出删掉,就留下一行。
lcytms
发表于 2017-8-13 23:23:18
1201
只有一行的时候,把begin end删掉。
把它对齐。
这就构成了3s2。
在3s2的代码里面,只有next_state出现在了赋值号的左侧。
跟我们的代码模型完全吻合了。
对这张图你就知道,在这段代码里面,只允许有一个信号,出现在左侧。
这个信号已经标示出来了,就是next_state。
现在我把剩下的这个部分还注解,改成3s3。
3s3是一个闭节点,cn。