lcytms
发表于 2017-8-13 23:40:24
1212
因为增加了一个节点,在s1上我们写它的NBD,s1做什么?
到了这个状态做什么?
显然到了这个状态,低电平数完了,转高电平,对不对?
我们要clk_out=1,同时我们要做一件事情,用相同的计数器来计数高电平的周期,清零。
这个时候我们不必写count清零,它是让cnt_en清零。
当cnt_en为0,这个计数器就会让count为0。
这是s1要做的动作,接着s2,s1指向s2。
这个锋也完全是无动作,s1的NBD也是无条件、无驱动的。
然后呢,指向s2。
lcytms
发表于 2017-8-13 23:41:34
1213
在s2上也是类似,s1已经把clk_out打开了。
所以说,在s2上等待的条件,仍然是这样,cnt<HW-2,无驱动。
它的分母省略,没有分母。
分数线也省略。
之前,cnt_en是关上的,s2上要写它的NBD。
S2,到了这个状态,要做什么事呢?
要把cnt_en打开。
然后s2,这个时候一定会数到相对的条件,数到s3。
然后我们写s3的NBD。
S3,到这一拍做什么事情?
数到了嘛,当然clk_out指向低电平,同时再次地对它清零。
lcytms
发表于 2017-8-13 23:42:43
1214
让它高电平数完了以后,接着数低电平,cnt_en=0。
S3数完,同样,就像s1指向s2一样,s3也是无条件、无驱动地指向s0。
好了,我们现在这张图就做完了。
在这张图上我们可以看见,第一,我们没有出现在赋值号两侧出现同名信号。
所以说它是允许CN在ON条件下被驱动的。
CN肯定没有问题,我们可以试一下,ON它可以用,因为在赋值号的两侧没有同名信号。
它不会形成迭代。
这是第一点。
lcytms
发表于 2017-8-13 23:43:31
1215
第二点,所有的输出都跟输入无关,也就是在它的分子的部分,在有输出信号驱动的EBD或者NBD上,分子的部分没有信号。
或者说,我们的所有的输出都是写在NBD的形式下面。
有一种说法,就是写摩尔的时候,用NBD来写是比较合适的。
因为NBD的时候,非常容易分辨。
NBD的分子的部分只有状态名,输出只跟状态有关,s0上,我们后面的s1,s2,s3,没有带冒号,没有带条件,没有带输入的信号。
也就是说只跟状态有关,到了这个状态,就做对应状态要做的输出的动作,这就是摩尔。
以后我们就会看得到,在时序电路以后我们可以做分析,米利和摩尔的关系,莫尔的电路要跑得快得多,因为它非常单纯,到了这个状态就产生对应的输出。
lcytms
发表于 2017-8-13 23:44:06
1216
而米利呢,到了这个状态,还要判断输入是否有变化。
输入的变化会导致输出的一个时序上的一个延时。
有可能导致这个节拍里面完不成对应的动作,从而导致两拍。
所以说这个时候我们会看成是摩尔的一个过程。
上午我们先到这,下午呢,我会给大家把这张图做出来。
下午我们会讨论如何用有限状态机的理论以及状态转移图来设计一个流水灯。
(午休)
lcytms
发表于 2017-8-13 23:45:51
1341
我们接着上午做完,我们是用两段来做。
状态转移图已经做完了。
接着我们就把原来两段米利的这段代码,改成摩尔,divider_fsm2s_mealy.v另存为divider_fsm2s_moore.v。
现在是两段的摩尔。
lcytms
发表于 2017-8-14 00:00:57
本帖最后由 lcytms 于 2017-8-14 00:02 编辑
1342
切换顶层。名字换过来。
然后呢,我们把下面的都直接删掉,因为都没有借鉴意义了。
我用的不是同一张图。
lcytms
发表于 2017-8-14 00:03:52
1343
端口是一样。
状态的编码现在应该是有s0、s1、s2、s3这四个状态。
至少要两位,1:0。
我们把它的编码声明出来。正好是2个bit,4个状态。
lcytms
发表于 2017-8-14 00:05:07
1344
然后我们用两段来写,先写2s1的部分。
我们要做一个外置的计数器。
外置的计数器我们写成隐模,隐式建模。
那么就要用隐式建模,我们声明一个中间信号,cnt_en。
cnt_en是谁输出的呢?
是我们的隐模输出的。
隐模的行为输出就是reg。
首先我们来写隐模。
lcytms
发表于 2017-8-14 00:06:06
1345
Begin做一个外命名,这个是外置的计数器。
我们只需要用cnt_en来驱动它。
Cnt_en是正逻辑,所以说,当它为假值的时候,我们让cnt清零。
它为真值的时候,让它加一。