|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本人在研究一个RS422接收程序的时候,发现程序中有一个波特率的产生进程。在这个进程中进行了小数分频。(将12MHz的系统时钟分频成9600*16的波特率)因此程序里面出现了78.112的分频语句。/ a: E1 w5 a; m! `: c8 u$ I" ^
signal baud16ACC: std_logic_vector(16 downto 0);9 X& M5 F& E0 ~" k6 ~
begin+ K( ~. u: k- |# Q1 }+ _, X# {7 v
baud16x<=baud16acc(16);
$ Y* P8 x5 ~9 }4 C/ o& @% b process(clk_12M,rst)+ `, M2 M, |2 m& b
begin1 e0 s' Y. ?* x# l
if (rst='0')then
: H2 ~9 N0 K; N5 y+ v- _4 u$ M3 e baud16ACC<=(others=>'0'); 4 ~; m% A# W/ w. k
elsif rising_edge(clk_12M) then- e8 W% T: a2 @4 \
baud16acc<=("01111111111111111"and baud16acc)+839;9 _* [. J. W: a+ `
end if;
0 H6 u$ V6 m* p, r. j end process;/ k# s! v/ Z/ M8 I
. d. R6 e) w/ U
这个程序是将频率进行2的16次方除以839等于78.112分频。输出时钟就可以是接近9600*16但是这样有任何好处吗?. [- F9 J4 m0 n6 x' i
因为程序是在上升沿触发的,因此有时候时钟是78个上升沿来一次,有时候会是79个上升沿来一次,这样我感觉单纯的增加技术难度,万一出错了呢?为什么不直接进行78分频呢,又简单,大神指点一二。1 `7 [$ @; G1 A' h7 J) n7 K
|
|