|  | 
 
| 
如题 我最近写了一个比较简单的verilog串口 但一次性只能发送8位数据  (通过串口调试助手发送),如果我发送16位数据,后8位就会产生乱码  求高人指点  代码如下:系统50M时钟 波特率 115200
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  , D6 o! v/ @! f% K; \2 U3 p接受模块:
 ( A/ c5 ]# i  j: Qmodule uartrx(clk,rx,dataout0,rdsig,dataerror,frameerror);9 L; H& ?7 L( s6 P
 
 ' v) c4 ^4 [2 `1 T% C& Tinput clk;
 " @" U7 y- _% _9 tinput rx;
 S! Q3 D- I" Y. n" L  k3 L% Z6 n# F# joutput dataout0;) \1 P/ d' Q( a7 C4 u7 q+ p
 output rdsig;
 , O4 D) r9 o- ]1 Z! _) }output dataerror;6 e( K5 t/ D+ j: s5 j
 output frameerror;0 i  Z2 o+ F% @! T# {
 7 M2 r7 T) `7 g' Y6 n  e
 reg[7:0] dataout0;
 8 W# U  g5 K( R2 w& \+ Sreg rdsig,dataerror;
 5 x2 h5 A! x' I' lreg frameerror;
 1 x+ W# }* x2 e4 ]% C/ H; G1 [: b2 e7 Q6 l
 reg [7:0] cnt;
 ' L' Y9 k  G' M: I" preg rxbuf,rxfall,receive;
 / Z. ^) P; ^6 k% L, f5 E5 b* [
 6 s1 R. G3 L" Z5 k' v/ |' q1 I( nparameter paritymode = 1'b0;
 1 T( {" z0 e8 _3 U6 u( Greg presult,idle;$ M# r& J3 `8 ?: @/ c
 : N8 ^0 {& @9 Q9 }8 f3 f+ p- _
 always @(posedge clk)! _1 [# d2 w' Y9 k7 V. X% ~
 begin- w% ~- A- L+ z! V* w
 rxbuf<=rx;
 , E) ^2 ~$ M1 @: W3 l7 x' \4 v( F# grxfall<=rxbuf & (~rx);
 . I# ~) B6 B% {$ nend6 F6 A  J# |' o( H: V  j% w
 
 " z1 ]* C' s  ]* x' U2 u, S# malways @(posedge clk)
 & B  g7 f" g6 S5 A* f7 abegin
 / V1 |. c7 P" m0 S& l! H. d7 N3 z( u* Fif(rxfall && (~idle))
 5 o" S+ @5 d2 t) \! q% I1 S/ u! Ybegin
 , B9 u; i* R, d" Sreceive <= 1'b1;( J; w/ q  N0 s7 m: U2 `. X! M
 end
 8 h8 w) n* O  e2 P1 Oelse if(cnt == 8'd159)
 5 c! m1 j; N! |' w* j* _/ vbegin
 $ e8 M, `; P. [receive <= 1'b0;, V% P& g: W5 q7 O9 L
 end6 \: D5 ^) @% p% N
 end4 n2 j% p! m# Y2 J  S
 8 R6 J5 w" ]9 F& S: ?# s
 always @(posedge clk)
 % G# [: U% @  i+ dbegin 5 i. ]2 {) Z8 O' s# i; f: _
 if(receive == 1'b1)
 4 U' U/ O  t) o8 l6 n6 Mbegin
 7 R4 d+ t2 _: I8 Rcase(cnt)
 " Y2 {2 O' t/ i& C* u8'd0:* B* ]: _5 F- J' r4 ^/ `
 begin
 $ U2 Y- a3 s1 Y7 e8 J5 f+ {idle <= 1'b1;
 ' m% S3 Q# P; W9 `cnt <= cnt+8'd1;7 [1 K' b2 f! H: O( ^
 rdsig <= 1'b0;5 i: o* I* {5 }6 K* q! U9 [* @
 end
 / M( y, A; S' ~- {7 c, {8'd24:. a- o* E! {% I+ w
 begin
 8 l, u( i( b/ Y, nidle <= 1'b1;
 * h. M0 W9 S" k! v* V8 v3 `dataout0[0] <= rx;8 D+ V+ b" F1 m# D8 v- N
 //presult <= paritymode^rx;6 l  F# h; _" G9 J- V( [% Q1 l
 cnt <= cnt + 8'd1;
 + j2 ^' B8 c% f/ W6 @5 t  i1 s, xrdsig <= 1'b0;5 m3 Z/ k2 J9 @; v2 B9 {$ {6 B/ j
 end
 & H6 F% S- ]) s5 b8'd40:
 - C8 K& a  T0 D! L$ O$ C0 b  Ebegin
 * j2 L8 _* J9 G3 gidle <= 1'b1;
 : n1 m; T; |, [7 h8 z2 a( O" Q7 a' F! M4 Rdataout0[1] <= rx;. o& A$ O" }! D% t8 ?
 //presult <= presult^rx;, b/ k3 C8 T. L3 [& T8 a
 cnt <= cnt + 8'd1;5 w+ d. P6 {6 A
 rdsig <= 1'b0;! Y9 L2 [" p+ d7 c
 end4 m8 W5 R! u) c4 N( k! |7 Q3 i
 8'd56:
 9 F7 F& F# t/ y- S6 n- Xbegin
 , E0 ]# Q( Y6 V# didle <= 1'b1;; H. W6 R( j0 C0 i' J* [$ Y2 i
 dataout0[2] <= rx;: ~( p, n1 {: O" z9 p
 //presult <= presult^rx;
 ! E+ h7 b6 T1 }: a1 |& ^: qcnt <= cnt + 8'd1;
 3 J6 P7 v4 X7 S3 A& \. @( b# \rdsig <= 1'b0;
 5 u/ |) J4 u4 x- I4 lend
 " C0 \9 v6 d& `/ U' |8'd72:
 7 a/ |1 ]* N4 X/ s0 k  E0 ibegin
 & {1 @1 M. [8 bidle <= 1'b1;
 ! a5 F, B  q8 bdataout0[3] <= rx;/ Q+ B4 i, e8 @2 T
 //presult <= presult^rx;5 ]% e# ~0 `% P/ b# D
 cnt <= cnt + 8'd1;
 - @0 Y- q( W) wrdsig <= 1'b0;
 / g, I0 _- P# l+ L* X2 B- L. iend. F/ }7 p0 P8 x' S: l
 8'd88:7 I4 b% H* ?4 i) i( r$ }
 begin
 , a7 z: ^, Z/ U0 B7 {& q( Midle <= 1'b1;, q! C2 r5 }3 d: d1 x
 dataout0[4] <= rx;2 M2 r5 l6 O  `
 //presult <= presult^rx;
 / ~' c" }# q, S3 c; Ncnt <= cnt + 8'd1;! R) Q' C3 v7 ]2 J; C  B
 rdsig <= 1'b0;2 Z7 L) p$ P: |* N0 \+ S
 end
 0 |& g" g2 k  O6 n. ^' `: y7 I2 C8'd104:
 3 C% ?* W) C0 p# p3 l9 Fbegin
 ; a( Q. G$ \2 s) J, S$ didle <= 1'b1;
 2 }6 V+ T9 J7 K5 ]/ t, bdataout0[5] <= rx;
 0 K! ^+ I. \- m# [: P9 k//presult <= presult^rx;
 " e6 T! j1 Q8 l' u& ucnt <= cnt + 8'd1;4 J# s$ W, i; \7 ~! w* N. ^
 rdsig <= 1'b0;" u: k2 T( P! J' w# F, `) o
 end( p5 A$ r* X2 X2 r  e6 ^
 8'd120:0 o1 J- Z. C  H
 begin& m) K, G1 D2 s
 idle <= 1'b1;4 a; E1 E: L3 ?' @2 \
 dataout0[6] <= rx;
 ; V1 F4 N7 L. O# }$ A//presult <= presult^rx;9 e, }$ j) ^2 |# Q8 v  g4 f* J0 x+ h1 q
 cnt <= cnt + 8'd1;7 r. c& d6 m% C  @& {
 rdsig <= 1'b0;% w" o/ b8 g) p0 ~! W4 u: V1 b& E
 end
 ' {. n" X1 G* w. g5 J$ D( @8'd136:" m+ X$ e8 Y  d$ ?% e# i
 begin( ^+ G' r# g; }# ?
 idle <= 1'b1;
 ?# Y" \- ^' P. a5 ydataout0[7] <= rx;
 8 h9 b6 r6 E, X//presult <= presult^dataout0[7];# d3 a/ \1 F5 D: @0 x% n5 a
 cnt <= cnt + 8'd1;2 E3 s/ G* S6 Z! Y
 rdsig <= 1'b0;
 . w& |, j0 c0 Z/ }+ dend5 K; p2 Q: J2 i3 Y" R
 /*8'd152:
 . X0 Y) A% s+ xbegin
 l& E. F  k8 `" A6 U% H" pidle <= 1'b1;% w6 }: [5 D: c  ?7 d) P5 P* e
 if(presult == rx); w' j& y, M  @, V4 X' H
 dataerror <= 1'b0;7 K6 s' @3 g: @4 g, @# N
 
 , r. \: [9 P9 Q1 Nelse
 ' W) x9 a; J+ `/ K' ]5 R( U
 6 ^* ~& ]$ X+ d; U9 @6 t" |dataerror <= 1'b1;' V! C4 N; X' P" y' ]
 
 5 h! X0 G; D+ P( u% Q5 W. Zcnt <= cnt +8'd1;2 B$ N, h+ u: B" x1 Q, T7 f( O
 rdsig <= 1'b1;$ i! V5 Z+ Y- H3 |; ~- B; L
 end
 5 I5 e5 W8 M6 n( G% G6 l" {& D*/% x3 h. e; I" |) B7 g6 v* v6 ^
 8'd152:
 9 f8 M/ r$ r. Ibegin
 3 n- b8 }' n* B. r1 [" _7 ~3 a( ?idle <= 1'b1;
 : h) c) y$ \7 S6 vif(1'b1==rx)
 ; W+ Q6 O, l* u7 h) o! d; Gframeerror <= 1'b0;
 : p. L: ~6 Z3 _9 x6 J: a% telse
 4 e: ]4 ^' j( @- b2 Aframeerror <= 1'b1;
 ! B6 x. ?0 i7 ~
 ! E1 X& V6 |3 S; Bcnt <= cnt + 8'd1;9 b% Y2 u$ z( ?7 z2 a
 rdsig <= 1'b1;
 % r8 u* T3 [, Q6 D6 l! Send
 7 |! c* z0 I# U. x$ Sdefault:
 7 v0 K+ `  H7 p1 J, v: E3 Wbegin% d% n& }+ ~. `4 G
 cnt <= cnt + 8'd1;+ c( h# Z' u; s
 end
 - ]6 h  C. }4 c/ v" d) E1 mendcase
 9 d# |) w7 p( g; t6 W9 d end * J* n/ H  @7 Z/ Z7 i6 p
 7 M# s1 e9 w. O' G
 else
 4 x3 ^+ a5 T* c/ F  begin
 5 l% F- p0 I1 C9 c. n4 R  cnt <= 8'd0;6 ?7 x  V- y! }, J
 idle <= 1'b0;
 6 D+ q; V( t/ v3 ]  rdsig <= 1'b0;
 % `* Z1 v; D7 ?  v- l  end
 $ m- h; ~- k5 d3 D- j7 A# J' { end
 + t- Z# L3 g7 ?/ ]
 $ S8 q( K: {: w- D- u/ g+ x1 I9 ? endmodule, D5 x% y! }: S/ R
 
 4 t5 @) U! N5 x6 o2 i) E  d发送模块:
 6 P/ y; V6 E5 i$ L: i' I# W. P0 d: b1 \5 E# p
 module uarttx(clk,datain,idle,tx,wrsig);, d% m/ @' i! ]. f
 input clk;
 : z4 E  F# O9 _4 \+ i6 O: Ninput[7:0] datain;" x1 W3 g: ^! {. T3 G
 output idle;
 ; l6 D) v' l1 ]; w  K8 Aoutput tx;
 % t/ w$ `% ]# ]) P, ainput wrsig;. p! ~  p3 p8 |- Y9 _6 R1 h' \
 ; K' z6 w% z5 L( e- ~) \; K
 reg idle;3 |- ~2 a$ q) s+ H
 reg tx;
 ) D, D5 ?* c9 k; U3 Z, e4 q* breg [7:0] cnt;
 4 R7 `& J# x4 A4 Qreg send;2 z- z: f' l) X( I  A
 reg wrsigbuf;2 `' q& R2 l+ l# ?7 u+ T. W. |. i
 reg wrsigrise;
 ; e, c5 Y4 r/ n9 ureg presult;
 : S% M, w/ Q, F, @, |. @* C3 [parameter paritymode = 1'b0;
 $ a8 k3 g2 l' F/ z% C% E& X6 d$ U: [  m$ U' |! ~& {, P+ B1 g
 " x: ?; v* c/ V: \5 K
 always @(posedge clk)
 7 q2 o# q/ G8 @) j! y8 S: Mbegin% Z4 E: J  Q! k  Q( z
 wrsigbuf<=wrsig;
 : C2 w$ v- k' v1 swrsigrise<=(~wrsigbuf) & wrsig ;. @# e# u. y" o/ b& D
 end
 6 l0 o) ?( o) y! W- K! ]/ b5 L$ _8 f6 [  ^5 s" ^( @  w) b
 
 / H4 o2 D0 ^2 e1 balways@(posedge clk)
 % Q6 E5 T+ G; O6 t# r9 ~, W/ b  begin( W! \1 }$ h) d$ P+ V
 if(wrsigrise && (~idle))
 , C% a4 Q. R5 a% Q2 R  begin
 7 r' @9 e7 `4 s3 h0 X1 X  send<=1'b1;4 t) b4 o8 ^! K. b  P  H
 end
 4 [0 n8 {; T, l/ X7 e3 n  else if (cnt==160)
 ; ]) @( f% e5 R! q  begin
 : m- _' E/ B. N4 O1 Q" O  send<=1'b0;; E# U! j- }/ V9 U& e+ }
 end$ t1 E, X/ i, Y& R9 k0 B. V
 end
 ! ^4 y9 \+ j' l, Q. N7 K
 3 f' k! \8 `3 W& e; x% Q always @(posedge clk)
 1 i% i- j' X8 K3 Z/ p- R begin
 - a  M: s$ b9 I% K, s  if(send==1'b1)
 ' N: Q4 z+ U8 ?" _$ l: w  begin
 ) F/ }: w" [# ?2 Y& q  case(cnt)) t& E6 m$ t2 E" a2 r. {# h. @
 8'd0:& y6 ?5 ~% S  z$ h
 begin
 & \/ y0 @# q$ U) o  tx<=0;( F  X: h7 x# ^! N
 idle<=1'b1;" _1 V( y: z0 f/ U; ]
 cnt<=cnt+8'd1;, G  H" G* G1 f; L/ `3 v& {' ?* I
 end
 ) x) q+ `6 n2 p. F# x# @+ W  8'd16:
 , B. ^8 i, j# \- h- I! k# s2 v  begin: c; p$ q$ ~$ D
 tx<=datain[0];7 x, p: C" n  A9 }) y$ y3 g
 idle<=1'b1;7 S4 a; N; M7 b  [7 a  J
 //presult<=datain[0]^paritymode;$ F: ~. {' {: \9 J1 v4 N
 cnt<=cnt+8'd1;$ I/ {5 G3 y; t, Q6 M& o
 end# M' p3 [. B; Z  _
 8'd32:
 , s$ i7 G" P: ]5 P' A3 V2 v  begin
 3 O8 r9 y: ]; Q: N9 P5 g3 R+ O  tx<=datain[1];8 c# U8 K2 p7 i# `, d4 M
 idle<=1'b1;2 d* H" Q6 `2 F2 s' a/ ?
 //presult<=datain[1]^presult;
 * |/ Q0 A, a0 a: Q# s  cnt<=cnt+8'd1;9 g8 L% Q9 T6 n# {5 R- n4 k% Z
 end
 ! b) J' Q0 f  c* E& V% M' H' F  m% W  8'd48:4 H6 e7 j4 ]$ g8 i% t
 begin, p6 B# s1 {5 M, ^' P
 tx<=datain[2];* l$ s- N) g2 M$ j
 idle<=1'b1;" |- N- X; g2 k8 {( |$ O, B; D
 // presult<=datain[2]^presult;* k' q, c1 i5 n7 D2 z+ L) V
 cnt<=cnt+8'd1;. e8 A' Y' w& J& W- Q' P
 end
 9 `; w. z/ a5 k4 J1 r$ M2 e  8'd64:
 l" i" U' V, d3 H  begin
 8 \- g  m) U  M" N. F  tx<=datain[3];: y4 D9 j, Y- A9 ?0 Y$ E
 idle<=1'b1;
 9 e5 v3 O! e3 y$ @0 n- L    //presult<=datain[3]^presult;$ F4 R$ Q" D# e/ Q5 D
 cnt<=cnt+8'd1;
 % W8 P  C* z/ k0 `$ s1 Q, x  end
 4 v- v3 g- a+ s6 U% b: O' S- Q- `  8'd80:$ w, N6 P1 K" P+ O( ^& u& u
 begin
 ! X* W+ X3 p$ O9 X# M( ~5 t  tx<=datain[4];
 * Q% U; p: i) j$ P+ O& E  idle<=1'b1;
 . a' N' i! r* t   // presult<=datain[4]^presult;1 |) r3 i  \: o2 O* M9 z2 `
 cnt<=cnt+8'd1;# O8 C) w% P6 g, E' T; s
 end
 + f- o. E/ o+ o: j. y9 N  8'd96:
 & V) O# c2 c5 r9 R5 Z% g) P6 Y  begin
 ' W8 W' W) {7 S  k+ ]: B% d1 S  tx<=datain[5];
 ; s: o) o0 A5 `7 Q, g# k* @  idle<=1'b1;
 4 a  y9 ]1 Z/ H0 \$ P- I: A) ~% w    //presult<=datain[5]^presult;' M& r1 e# K- ^5 }) {# f) B2 _
 cnt<=cnt+8'd1;! E2 h  v+ X' m0 P- c! t
 end
 " C8 Y% c4 \' ?  P0 u  D) {4 k  8'd112:
 . k# f. Y, R5 F) C9 z+ E  begin! b/ t# W- B& U$ {
 tx<=datain[6];
 5 g; m- z  a+ i  idle<=1'b1;
 2 w$ z3 s" R0 _     //presult<=datain[6]^presult;# y0 V" Z1 v+ [: P4 X3 A
 cnt<=cnt+8'd1;
 3 {$ e! c1 A2 e1 N+ V  end$ N" s; _. J  s# V1 b6 r
 8'd128:4 g" P, l0 j. O! C/ {
 begin
 / t  X% T# u! H! \3 Q& p  tx<=datain[7];/ g; i. m1 Q1 Z7 z& q
 idle<=1'b1;# n. q8 i' i! y/ a0 D3 G! T, k
 //presult<=datain[7]^presult;
 1 z8 B; i/ T4 ?2 e3 }! n  cnt<=cnt+8'd1;
 4 _% j1 l$ u. ^( D0 [& m3 ^% R  end, o" [0 J+ `: `8 O+ r
 /*8'd144:
 ) s4 G# P" L$ |* n( r  O. y  begin5 a5 D7 F  M% j
 tx<=presult;$ v1 d. G" z! U# {( d4 i
 idle<=1'b1;% u- u; `! T) r' Q. l2 k1 B
 cnt<=cnt+8'd1;
 7 s& p- w- c  j( L  R) p  end*/4 m" M5 p- i4 B6 P1 f5 u
 8'd144:) ^+ I  P; I5 i, D- U
 begin
 " w* p5 ]6 I( C, M0 o  tx<=1;
 - H. G3 M9 \/ `0 T7 l& a8 G7 W  idle<=1;, z& Q  T. m! u5 D7 h3 k- n
 cnt<=cnt+8'd1;0 X$ ?' P  l. [& H
 end$ {2 b" P) m0 y  ]9 K+ |  |  }) F
 8'd160:8 I3 A) o( `" B- o( s% _4 O9 a( o$ s
 begin  b/ E1 y9 B$ _
 tx<=1;
 ) t+ O" q. D% L" i7 a* f: o! S  idle<=1'b0;& H% ?4 U7 L, W# I1 ~& r4 w
 cnt<=cnt+8'd1;1 Z' Z' q, g  _" x
 end
 4 b  Z- u- V3 z9 {  default:
 ; J: [, k/ i" a8 N( c  begin+ v8 o2 V. I+ K" Q3 u0 \
 cnt<=cnt+1;- i+ U( F, b+ B1 X& f; r
 end
 8 p$ K8 W8 ?. b  endcase. ?& G0 G8 N2 }8 n
 end; z) i$ f$ h9 H
 else/ G- E0 i; h0 @) h6 o  I/ z
 begin# I2 ^: l( o5 _# S* ?- j$ d
 cnt<=8'd0;
 6 g9 P/ }( J1 ]8 d  idle<=1'b0;
 * w+ f! d/ n8 E  tx<=1;% l1 H# ]3 |! a2 O; q* `9 v
 end7 Q0 C! l! z; {. S  o( F( P
 end" a9 x9 s4 U( s- ?3 S7 s# l* v# O: X
 endmodule
 1 O( U4 s$ S& z+ k  O ' o+ g$ F+ L+ R+ t# W* v' R/ i4 g
 分频模块:$ u0 u3 b# v# w2 e3 z
 module clkdiv(sysclk,clkout);5 Y: s9 j2 y. |1 W7 q# G- C* I+ |8 _
 input sysclk;# J! t' R6 j8 k" q8 h
 output clkout;4 s9 i5 m/ J& d% P8 T( |5 n
 reg [7:0] cnt;
 & E- Y; b, ^/ nreg clkout;
 * D  k; c: Z0 F8 ]always @(posedge sysclk)+ a' T* f2 Y$ D. l2 W* H! K
 begin0 O, T9 T* S4 ?
 if(cnt==8'd12)
 5 ]' d  S: I* P5 b( {& B7 L    begin
 . l4 N8 u* @, h6 }2 U" M( n5 j& lclkout=1'b1;
 0 Q% ]9 }( }9 R" n( @8 K8 _. Gcnt=cnt+8'd1;6 ?! r0 W% @! z
 end
 ' H8 L# G* z9 T. w  N5 i$ Delse if(cnt==8'd26)8 ?" J& I6 c. t1 k
 begin3 u( F$ r3 L& O( q
 clkout=1'b0;
 . Q1 ?9 k5 W+ _+ fcnt=8'd0;) W% T5 r6 m& N# `6 n5 H; T
 end/ @+ [  E9 S- r) l  h
 else
 2 i* s/ L( N( T  U    begin# Q+ l" K) `. [
 cnt=cnt+8'b1;
 # ^# K8 C( d3 }2 j& g& L( bend
 $ C8 ~  d, n) tend
 9 R0 g; D4 H6 K* l6 Tendmodule
 | 
 |