lcytms
发表于 2017-4-19 14:22:13
1105
如果HW=LW,50%的占空比,那么HW=LW=fin/(2fout)。
现在我们要设计这样的一个电路逻辑。
如果实现任意分频的电路,EDA的设计非常强调,就是Intellectual Property,就是可重用的代码。
尽量地用可重用的代码,而不是自己再写一段。
你需要分频器,就写一段分频器,你需要led的driver,就写一段led的driver。
lcytms
发表于 2017-4-19 14:31:47
1106
那么,不仅效率低,面积浪费,而且更重要的是不稳定。
现在这段逻辑我们是调试出来了,是稳定的。
现在我们来写它的状态转移图。
STG,用状态机设计的方法。
数字电路告诉我们,就是讨论电路逻辑的规律,哪些事情先发生,哪些事情后发生,因果关系弄清楚即可。
现代的状态转移图里面,一定有一件事是状态或者复位。
复位是不是状态,我记得在数字电路那个年代有讨论。
有些学者认为是,有些学者认为它不是。
EDA基本上确认,复位一定是个状态,复位是个特殊的状态。
这个节点就是状态,我们把状态名写上,是复位的状态,RST。
lcytms
发表于 2017-4-19 14:49:10
1107
叫什么名字不重要。
看得懂,不相同。
然后呢,我们写它的NBD。
NBD是一个分式,分子是节点名,节点名就是复位,分母是驱动。
我们现在看看,驱动怎么做。
在电路初始化,复位信号为真值的时候,负逻辑,应该是0,我们希望它输出什么信号呢?
我们当然让它输出0了。
Clk_out为低电平。
其次,我们要考虑一件事实。
就是,它必须要计数高电平的宽度和低电平的宽度。
一定要有一个计数的功能。
高3低2。
我们还有2500呢,还有2.5k呢,它要一拍一拍数啊,你必须要一个计数啊,数的方式啊。
所以说它内部必须要有一个count。
lcytms
发表于 2017-4-19 15:03:03
1108
复位为真值的时候,输出清零,内部寄存器清零。
描述出来了。
之后指向第一个状态。
置位以后,现代的STG,EDA的STG,状态转移图它说,所有的锋都要描述。
虽然我们看到的有些锋是没有描述的,它是相对描述的,它是相对条件的、无驱动的描述。
唯独不描述的,现在就是指复位,实际上是两个没有描述,就是状态转移图上不需要绘制出来的,全世界如此。
第一是置位的这个锋,从复位到置位的这个锋,这个锋不用描述。
其次呢就是在正常状态下面转复位的锋不描述。
lcytms
发表于 2017-4-19 15:14:00
1109
都不用描述。
但是我们看到工具上给我们显示出来。
然后到s0做什么?
我们知道要低电平2拍、高电平3拍地周而复始。
从复位开始,复位的时候是低电平,是输出为0的,所以说我们先计数低电平的周期,比较合理。
低电平是多少呢?
是LW。
所以说这个时候,我们做一个指向自己的转移,s0出发,指向自己。
写它的EBD,我们讨论发生转移的时候做什么。
lcytms
发表于 2017-4-19 15:24:44
1110
转移的时候,条件是什么呢?
这个时候是count<LW-1,考虑到LW是从0开始计数的。
这是它的条件,在低电平状态,我们指定在s0上输出低电平的时候,可以这么做。
让它数低电平的周期。
分母是什么呢?
由于count是由状态机直接管理的,我们当然要让它计数了,让它数低电平的周期了。
我们会执行对应的count=count+1的动作。
我们C++的时候,直接写成++的符号,system verilog支持,verilog不支持。
那么这样一拍一拍数下去,一定会数到有一拍,到达LW-1。
lcytms
发表于 2017-4-19 15:39:58
1111
那么这个时候,我们让它指向下一个状态,指向s1。
这个锋也要对它进行描述,这个锋的条件显然是这个锋的条件的相对。
Count≥LW-1,相对的条件。
分母是什么呢?
分母是驱动。
到了这个转移的时候我们做什么?
就是到了这一拍,做什么事情,低电平数到了做什么事情。
显然,低电平数到,clk_out的低电平结束啦,接着我们要让它抬高,让clk_out指向高电平。
lcytms
发表于 2017-4-19 15:47:49
1112
其次,如果我们只有一个计数器,我们计数器数完了低电平,接着要数高电平了,要对它清零,从0开始数。
现在到s1上,也是同样如此,s1进来的时候已经是高电平了,所以说我们接着要数高电平的周期。
类似,写s1指向自己,count<HW-1,分母是同样如此,数的时候让它加一。
那么这样的话,一定会数到HW-1,高电平一定会数到。
数到了以后会怎么样呢?
高电平结束,当然回到低电平,回到s0。
lcytms
发表于 2017-4-19 15:55:40
1113
然后再描述这个锋,EBD。
S1指向s0的这个锋。
条件仍然是相对的条件。
分式,分子是条件,相对的,上面是<,下面就应该是≥HW-1。
然后它的分母是驱动。
到了这一拍做什么事情?
当然,数到高电平就结束了,clk_out转向低电平,周而复始嘛。
clk_out清零,同样高电平数完了以后,count接着清零。
lcytms
发表于 2017-4-19 16:24:44
1114
这样呢,我们就完成了这张图。
这张图,现代的EDA所提供的这张改进的制式的STG,有个好处。
从图上我们就看得到,它是米利还是摩尔。
这张图可不可以用CN,可不可以用ON?
首先我们来看看,它是米利还是摩尔,有没有同学能够告诉我?
米利是什么?
米利就是输出和输入有关,摩尔就是输出与输入无关,至于状态有关。
也就是说,我们在代码里面,我们写输出的时候,会引入输入。
什么是输入呢?就是被引用的部分,被这个代码引用的部分。