TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
两个28MHz分频到1秒的分频程序对比 ! i+ Z. T, k ?
) y7 c# L# D, G! M0 z$ R4 [ 两个程序,一个是直接用REG时序进程单进程写的分频程序把28兆个周期分成14兆个和14兆个,其中一半输出0,另一半输出1,正好1秒。仿真结果很好,无竞争,无毛刺,下载DEII验证正常,用它来驱动16进制计数器现实也正常。
$ u2 E7 j8 [3 Z 另外一个程序是把REG单进程分为两个进程,一个是REG进程,另一个是COM进程,设计思路如前,仿真结果是这样,当输入频率为2的幂级数时,无毛刺无竞争,但是输入频率非2的幂级数时,就会在1秒的0和1各0.5秒内产生一个正向和反向毛刺,下载DEII开发板,显示也是正常,1秒1秒的闪烁,但是用它来驱动16进制计数器,发现问题,就是计数不是一个一个的计,会显示0,4,8,C,F,0这样,很有规律。仔细研究波形仿真,发现了这个问题。就是多加的那个COM进程产生毛刺,正好多了那两个毛刺,计数才0完就计4。% \. j3 J5 k6 u {9 b1 M
VHDL状态机时也会有这个问题,多进程状态机会出现毛刺,要消除,就是因为COM进程存在。把COM进程和REG进程合并,写成混合进程REGCOM就可以消除毛刺了,这就是单进程状态机的优势。
+ n0 K) ^& N- J+ G: f
2 O0 ^0 a3 W, j 两个程序里大家可以修改输入频率的大小,由于仿真时间过久,建议大家选用256Hz和280Hz进行仿真,就可以看到偶发的那三个波形了。可以看出单进程不论输入256还是280Hz都不会有毛刺,而双进程输入256Hz很好,无毛刺,但是输入280Hz时,就会出现毛刺,这就是我说的提供给16进制计数器做时钟出现计数0,4,8,C,F,0的原因了。, F' X* `1 n' y, b/ U7 ^
一点建议,仅供大家参考。希望有所帮助。
4 A, _! }. d; b" P, T3 Z
) ?' i* y. g& X; C. ^* x3 g |
|