|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本人在研究一个RS422接收程序的时候,发现程序中有一个波特率的产生进程。在这个进程中进行了小数分频。(将12MHz的系统时钟分频成9600*16的波特率)因此程序里面出现了78.112的分频语句。
: \) @* \/ }: l# @' M Wsignal baud16ACC: std_logic_vector(16 downto 0);
0 I- l, \' K8 j4 m3 F5 y# b! |begin! `1 Z1 w0 c" Y
baud16x<=baud16acc(16);9 l" b8 `3 y2 W; P/ ^2 f2 D, \4 m
process(clk_12M,rst)
& c9 p" X; v' e6 V: F begin/ r2 J. Q5 \, F4 v; @
if (rst='0')then5 f+ N, |* J/ R' {
baud16ACC<=(others=>'0');
( _& V5 b* n. l/ y" h( e elsif rising_edge(clk_12M) then( K- o* e7 R7 b3 ~8 F( o
baud16acc<=("01111111111111111"and baud16acc)+839;
7 W5 O" k' N8 A5 s5 Y" ?4 H end if;: _+ l: A) b( T# }
end process; H) H0 J1 G/ @' R' @% ?" a
# m+ d9 f& N4 U& Q) X这个程序是将频率进行2的16次方除以839等于78.112分频。输出时钟就可以是接近9600*16但是这样有任何好处吗?+ Y! U8 [8 U) C3 p0 r" L
因为程序是在上升沿触发的,因此有时候时钟是78个上升沿来一次,有时候会是79个上升沿来一次,这样我感觉单纯的增加技术难度,万一出错了呢?为什么不直接进行78分频呢,又简单,大神指点一二。& j# b1 J4 ]1 C# Y0 @
|
|