|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本人在研究一个RS422接收程序的时候,发现程序中有一个波特率的产生进程。在这个进程中进行了小数分频。(将12MHz的系统时钟分频成9600*16的波特率)因此程序里面出现了78.112的分频语句。* f+ W( H, ?" R6 L
signal baud16ACC: std_logic_vector(16 downto 0);
$ _, V# h( b& ]% ]+ f$ B$ Obegin
/ p9 ~$ V* w$ Sbaud16x<=baud16acc(16);
2 }$ {1 c0 Z. ^% A4 M process(clk_12M,rst)+ F L9 j: M7 u2 I1 g
begin
* E2 P) b- I$ P1 ` if (rst='0')then
' z6 S0 g6 X9 G7 k. `* \ baud16ACC<=(others=>'0');
' N: I9 M$ \! i- t9 ^ elsif rising_edge(clk_12M) then; w; y, I3 F, v, e! M
baud16acc<=("01111111111111111"and baud16acc)+839;* t, g) f7 n& {# F2 t7 G( M9 ~
end if;
. y% Y7 R5 q, Q end process;$ U% U" {3 }+ [& l
J' `$ a8 S$ ?% f, W
这个程序是将频率进行2的16次方除以839等于78.112分频。输出时钟就可以是接近9600*16但是这样有任何好处吗?( a# [. f6 W `: \8 k
因为程序是在上升沿触发的,因此有时候时钟是78个上升沿来一次,有时候会是79个上升沿来一次,这样我感觉单纯的增加技术难度,万一出错了呢?为什么不直接进行78分频呢,又简单,大神指点一二。# ^- p* Y! x0 Y4 k
|
|