找回密码
 注册
关于网站域名变更的通知
查看: 204|回复: 1
打印 上一主题 下一主题

EDA实验与实践 uart_test

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-8 07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
EDA实验与实践 uart_test

9 r: N( n, `1 E7 U
0 f* b6 H# l2 K1 c1 c2 kmodule uart_test(clock,key,rdata,wen,sdata,seg,dig);. c3 ?: C$ X7 J) p7 b1 z
input clock;                            //系统时钟(48MHz)& D! u( H% \) R2 n2 w+ F$ {
input[2:0] key;                            //按键输入(KEY1~KEY3)
& Z2 \3 W( B1 [# g& finput[7:0]rdata;                        //接收到的数据3 {2 m. c6 V( ]( C& L+ w
output wen;                                //发送数据使能
( \% G% x0 N) s3 Joutput[7:0]sdata;                        //要发送的数据
7 a/ v/ V( D# ]( h8 ]output[7:0]seg;                            //数码管段码输出+ L) s+ R# g. O( S
output[7:0]dig;                            //数码管位码输出5 T' P( u# Y4 h' I% p5 r
//I/O寄存器+ S) s# y  _6 {  V# N9 {; i
reg[7:0]sdata;    " w) X4 L( m. v; i
reg[7:0]seg;        8 ?8 c$ }3 Q4 f8 t
reg[7:0]dig;        : K4 {9 B; G, A! Z+ G/ g
//内部寄存器) U4 }% Z8 O- h4 v0 k+ E- W
reg[16:0]count;                            //时钟分频计数器  C/ a( @5 ]' G3 P# N/ B7 B  X
reg[2:0]dout1,dout2,dout3,buff;            //消抖寄存器4 }8 f2 a; n& _! e
reg[1:0] cnt;                              //数码管扫描计数器    * p  _+ o3 w- a" @7 c5 O. v
reg[3:0]disp_dat;                        //数码管扫描显存        
( g. a0 j# A( Y; @# F) Rreg div_clk;                            //分频时钟$ d9 c( Z& y& `; l- p$ [/ S
wire[2:0]key_edge;                        //按键消抖输出
$ }* y: G, c8 p. F. B; H! S( M5 U% X) I/ @6 T" }
//时钟分频部分" }% @! T0 Q, I9 [% D1 E
always @(posedge clock)
5 H, V% e3 [/ u) ~/ Q% Qbegin
9 y3 p% `- ?8 e( L0 o6 X5 }    if (count < 17'd120000)
" t. D' S. w0 g; K) O# D: q2 w7 w    begin
0 |5 S# h# p: a# H- C: W         count <= count + 1'b1;
& A) b9 o7 |$ t& l4 p- r+ Q' Q& W         div_clk <= 1'b0;
7 m: p& t# |. S& I4 Z% y     end/ Q, `6 ~9 Z* q, `3 t5 j" P
     else' X! a0 Y1 X& x. a& h
     begin- ]: m6 y3 P% {$ \$ W4 n$ A
         count <= 17'd0;
) V* H6 b& N: K2 E! B         div_clk <= 1'b1;
9 P. o; i, A: m     end
7 b8 ?7 J2 Q9 o0 r/ Yend* n6 `% e3 t' r
8 P: B" P2 o5 s1 T
//按键消抖部分
. E; v# T( J) m5 L* K) _- T/ B- Lalways @(posedge clock)4 Y; l9 Q) B& f! N' R2 S/ n
begin
+ J& `" r+ Z" Y( w! E$ t5 V    if(div_clk)
$ l2 _) n) E5 k) O    begin
9 ?0 h1 l/ B3 i0 a! y# L        dout1 <= key;
8 J0 S" V( O: J# V$ N2 ]& E        dout2 <= dout1;
2 H1 k; d6 \8 ?7 y% Z        dout3 <= dout2;
; M1 G8 m: p7 i$ [+ I    end    6 k6 F+ A0 M5 T$ R
end9 _, V4 u+ n# f9 u* [5 ?
  Z$ U' r( p! c
//按键边沿检测部分
. m6 m1 ~% E" |9 Calways @(posedge clock): g( c' v! w2 K/ L. v
begin- |" x8 |# i! |; T7 j7 _9 u- E
    buff <= dout1 | dout2 | dout3;' S3 W4 G( r% v/ |4 a; Y' b
end; x  w6 S* f( ^! S' V/ g( I4 T; e
. y; J6 r: y& \0 m
assign key_edge = ~(dout1 | dout2 | dout3) & buff;! s  p1 D/ l9 M9 s: t, c4 Z

' ]9 F6 n/ [% z. f7 K7 y3 H//2位16进制数输出部分
, P, S& p& n% r. Talways @(posedge clock)                            //按键1
4 B% s* G/ K% J0 Ubegin
( T/ S1 }# D5 Z4 ?    if(key_edge[0])    + ]3 z( F8 _5 E
        sdata[7:4] <= sdata[7:4] + 1'b1;4 Z/ C2 T0 \( Y0 ]% r/ {
end
4 s4 L3 g0 r, }( L' m" D
* w, I3 V" V) `1 S) I$ N. O$ R5 ^always @(posedge clock)                            //按键26 v: |2 h* P. r/ G: ]
begin
& e" ~' N' n) z7 G    if(key_edge[1])   
2 }2 s7 w, H' ~4 m+ [- g        sdata[3:0] <= sdata[3:0] + 1'b1;
4 J6 s" ?5 x2 J9 qend( Q: m" ^" r- |- y2 C( E

/ ^2 R! I! l& E) {assign wen = key_edge[2];                        //按键3% Z" l5 a: P) M. E3 ?9 J
" ^& ]- J' ~$ ^+ C# V
//数码管扫描显示部分
8 n7 i9 N" R6 i1 e* P+ I# Valways @(posedge clock)                   //定义上升沿触发进程8 I6 V& o5 A% g& Q2 W
begin
, _% F2 c7 p" ]$ c! |    if(div_clk)% P0 g) y! k) J0 z7 x- Z
        cnt <= cnt + 1'b1;
- [- h$ a5 Q9 I7 i+ {0 wend
7 e4 }3 H) j: q, n3 A# Q0 e- p9 c$ _
always @(posedge clock)                           
% S" g' c) @4 H$ _9 N: i# H6 Wbegin
2 F, A; e) L( E( h% P' T" k( v    if(div_clk)
, p# W* ^# x1 W' c    begin
" R! P( ~0 j+ y- E/ @) v) A        case(cnt)                                //选择扫描显示数据
: j) B/ f4 o' Y            2'd0:disp_dat = sdata[7:4];            //第一个数码管2 n, m1 x* r! y4 [9 M  L" e
            2'd1:disp_dat = sdata[3:0];            //第二个数码管
- i. i! g0 }' U) c2 d            2'd2:disp_dat = rdata[7:4];            //第七个数码管0 u6 `2 J# K. U7 q  l6 _# M
            2'd3:disp_dat = rdata[3:0];            //第八个数码管
$ _# l  H# _9 L9 l1 }        endcase( u+ p! F& G, Q$ ~# [$ v) [
        case(cnt)                                //选择数码管显示位
8 C0 {/ B. b# ~  z3 m. c            2'd0:dig = 8'b01111111;                //选择第一个数码管显示1 x! l% a! J! c1 v' w/ N0 ]
            2'd1:dig = 8'b10111111;                //选择第二个数码管显示
- }7 }3 @1 `% z& O9 z7 V+ A; K            2'd2:dig = 8'b11111101;                //选择第七个数码管显示4 E5 ?5 A- y) H* J) Y3 d3 N' ~1 O
            2'd3:dig = 8'b11111110;                //选择第八个数码管显示6 q9 t" Y4 ^9 P
        endcase   
/ T) o0 N) J( z6 F  v. k9 }+ C    end
3 @& N9 S. i7 t* p/ ^6 J, Q! o2 R3 Qend
# ^* ~. h) c  r" T. e* k" Y+ a7 z% J$ g2 a& d% ?' J1 u5 Z! g/ P
always @(disp_dat)
( }; H8 [& Y1 d/ I! q) z- a( cbegin
) ?: |& z' [) {% N$ j" I    case(disp_dat)                        //七段译码
$ M5 Y0 e' |/ P  f( h+ ~6 {        4'h0:seg = 8'hc0;                //显示0
1 D' V& _, V& e+ d3 j        4'h1:seg = 8'hf9;                //显示1
3 l* M. Q3 W% {9 G        4'h2:seg = 8'ha4;                //显示2
3 J9 d; ]8 ^4 J+ W) [        4'h3:seg = 8'hb0;                //显示34 G9 N! ^0 z. \& u* D
        4'h4:seg = 8'h99;                //显示4* p5 z' p$ O" e# P
        4'h5:seg = 8'h92;                //显示5
/ p6 _' p* w% P9 E" M! w        4'h6:seg = 8'h82;                //显示6
; L4 `% ]/ a9 R        4'h7:seg = 8'hf8;                //显示7
4 v# s- F5 y7 }, x  c+ P        4'h8:seg = 8'h80;                //显示8- U& ?; y( I' d% I& c
        4'h9:seg = 8'h90;                //显示9
3 F- ]( S9 }! T4 L8 C# p* y9 E        4'ha:seg = 8'h88;                //显示a; R; {9 W2 t+ }4 O" o. M9 m
        4'hb:seg = 8'h83;                //显示b
9 g5 l1 L  L  {3 [        4'hc:seg = 8'hc6;                //显示c1 A. D2 Q) i$ Y% c' U
        4'hd:seg = 8'ha1;                //显示d
; C3 K# [. ]+ Z. m' \* E9 F        4'he:seg = 8'h86;                //显示e
# ]4 @. ?8 E2 a/ [$ Y" u5 B) h- t        4'hf:seg = 8'h8e;                //显示f- B* _" I. d& a9 N
    endcase; t- y- H5 T5 V- G
end* J5 r3 E5 d, E: X, H( x' k5 J. Z

2 B% X! {# E7 {% }7 a7 m1 lendmodule/ F: c4 A, J0 v/ e
" f! R/ U. W0 L* ~) K  R
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 15:20 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表