全球旧事资料 分类
VerilogHDL的分频器设计
moduledivide2clkclk_oreseti
putoutputwirei
regoutalwaysposedgeclkorposedgeresetifresetout0elseouti
assig
i
outassig
clk_ooute
dmodule用verilog实现分频的一点心得200708042240在用verilog编写程序的过程中,将时钟进行11分频,花了好多的心思才将其搞定。通常实现偶数的分频比较容易,以十分频为例alwaysposedgeclkorposedgeresetifresetbegi
k0clk_100e
delseifk4begi
k0clk_10clk_10e
delsekk1二分频最简单了,一句话就可以了:always
egedgeclkclk_2clk_2clkresetclk_o
若进行奇数分频,则稍微麻烦点,以11分频为例:alwaysposedgeclkifresetbegi
i0clk110e
d
felseifi5begi
clk11clk11ii1e
delseifi10begi
i0clk11clk11e
delseii1以上语句虽然可以实现,但是逻辑有点繁,弄不好就出错了,建议使用两个always语句来实现:alwaysposedgeclkifreseti0elsebegi
ifi10i0elseii1e
d
alwaysposedgeclkifresetclk110elseifi5i10clk11clk11两个always,一个用来计数,一个用来置数。另外,这个样子好像也可以,在时钟的上升沿和下降沿都计数,但是不被综合器综合,会提示敏感信号太复杂:alwaysposedgeclkor
egedgeclkifresetbegi
k0clk_110e
delseifk10begi

fk0clk_11clk_11e
delsekk1
三分频的Verilog实现rickywu发表于20051212111400很实用也是笔试面试时常考的,已经经过仿真占空比要求50和不要求占空比差别会很大,先看一个占空比50的描述modulediv3CLKINCLKOUTRESET
i
putCLKINRESET
outputCLKOUT
i
ter
alcou
tersig
alsreg10cou
t_areg10cou
t_bregCLKOUT
always
egedgeRESET
orposedgeCLKINbegi
ifRESET
1b0cou
t_a2b00elseifcou
t_a2b10cou
t_a2b00elsecou
t_acou
t_a1e
d
always
egedgeRESET
or
egedgeCLKINbegi
ifRESET
1b0cou
t_b2b0elseifcou
t_b2b10cou
t_b2b00elsecou
t_bcou
t_b1e
d
alwayscou
t_aorcou
t_borRESET
begi

fifRESET
1b0CLKOUT1b0elseifcou
t_acou
t_b4cou
t_acou
t_b1CLKOUTCLKOUTe
d
e
dmodule
00
11
22
00
11
2
2
下面是一个非50的描述,只用了上升沿
modulediv3CLKINCLKOUTRESET
i
putCLKINRESET
outputCLKOUT
wiredregwireq1q2CLKOUT
always
egedgeRESET
orposedgeCLKINbegi
ifRESET
1b0q11b0elseq1de
d
always
egedgeRESET
orposedgeCLKINbegi
ifRESET
1b0q21b0elseq2q1e
d
assig
dq1q2
assig
CLKOUTq2
fe
dmodule
占空比不是50,只用了单沿触发器,寄存器输出。至于其他奇数要求50的或者不要求的占空比的,都可以r
好听全球资料 返回顶部