|
两个程序,一个是直接用REG时序进程单进程写的分频程序把28兆个周期分成14兆个和14兆个,其中一半输出0,另一半输出1,正好1秒。仿真结果很好,无竞争,无毛刺,下载DEII验证正常,用它来驱动16进制计数器现实也正常。 另外一个程序是把REG单进程分为两个进程,一个是REG进程,另一个是COM进程,设计思路如前,仿真结果是这样,当输入频率为2的幂级数时,无毛刺无竞争,但是输入频率非2的幂级数时,就会在1秒的0和1各0.5秒内产生一个正向和反向毛刺,下载DEII开发板,显示也是正常,1秒1秒的闪烁,但是用它来驱动16进制计数器,发现问题,就是计数不是一个一个的计,会显示0,4,8,C,F,0这样,很有规律。仔细研究波形仿真,发现了这个问题。就是多加的那个COM进程产生毛刺,正好多了那两个毛刺,计数才0完就计4。 VHDL状态机时也会有这个问题,多进程状态机会出现毛刺,要消除,就是因为COM进程存在。把COM进程和REG进程合并,写成混合进程REGCOM就可以消除毛刺了,这就是单进程状态机的优势。
两个程序里大家可以修改输入频率的大小,由于仿真时间过久,建议大家选用256Hz和280Hz进行仿真,就可以看到偶发的那三个波形了。可以看出单进程不论输入256还是280Hz都不会有毛刺,而双进程输入256Hz很好,无毛刺,但是输入280Hz时,就会出现毛刺,这就是我说的提供给16进制计数器做时钟出现计数0,4,8,C,F,0的原因了。 一点建议,仅供大家参考。希望有所帮助。
|
|