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

EDA实验与实践 sine_test 

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
EDA实验与实践 sine_test
2 u# Y! ^% {1 _& W  Q

* x2 B! e& P5 f  @2 Z- lmodule sine_test(clock,key,select,data,seg,dig);
4 I0 y8 ~; u; n# D  n# c3 Tinput clock;                            //系统时钟(48MHz)! m5 g! e9 s; g; K  }. c5 {
input[3:0] key;                            //按键输入(KEY1~KEY5)3 P6 u, A- N  M! k
output select;                            //发送数据使能
! |1 \2 l+ u0 Toutput[11:0]data;                        //要发送的数据9 f4 u* G1 M8 M  R
output[7:0]seg;                            //数码管段码输出
% l5 J5 R! {( q+ W$ B6 k/ Houtput[7:0]dig;                            //数码管位码输出1 d7 x: o. z$ n" w
//I/O寄存器
4 u3 E7 j# {+ A9 y* d- B4 Oreg[11:0] data;   
6 K' W3 R/ Q' u/ @& M# i# v  {5 Nreg select;
' f+ f+ B9 ]4 Freg[7:0]seg;        3 e9 U1 |7 B7 }) X( B
reg[7:0]dig;        # k8 z- V' q9 t
//内部寄存器
- A; S7 q8 v- Ireg[16:0]count;                            //时钟分频计数器- b% M) t! ]# I
reg[3:0]dout1,dout2,dout3;                //消抖寄存器
$ s7 G3 w8 d1 p% z3 lreg[3:0]buff;                            //边沿检测寄存器
% s2 M2 |/ j4 ]# l8 i. F2 r9 H1 [reg[1:0] cnt;                              //数码管扫描计数器    0 `. }' _! J* [% j9 A
reg[3:0]disp_dat;                        //数码管扫描显存        , x, i: R! M, K+ r3 f
reg div_clk;                            //分频时钟- F  ?% i( Y$ g4 n* s
wire[3:0] key_edge;! n+ Z6 ]) ~7 Y: y& A. f
. X* k% e2 G) C( N+ p
//时钟分频部分
) Y( C3 F+ n( O$ Z# q. Z* D8 Oalways @(posedge clock)& }+ I, N. F- {8 y1 c# X2 F; [( s
begin
' a" I9 _  R3 b6 V& t3 u7 C. R    if (count < 17'd120000). B+ V4 }* n6 Q; B5 i6 M9 }( O; ~% l
    begin9 P; Q+ _& R- U( H6 D$ |! f
         count <= count + 1'b1;
2 _. [3 k/ ~( }" X* |6 N: L% n0 Z         div_clk <= 1'b0;
5 L) P: g0 E+ _     end
+ i2 f. U0 n' h0 t6 o: p     else
% \" u* h/ g. s8 |  T     begin
) y* [/ G2 u. O5 o# l         count <= 17'd0;2 @! L. b6 ?9 W* v2 g* I1 W
         div_clk <= 1'b1;  V# s; j/ T# f) @8 ^1 m
     end
; P- l* c, Y" D# mend
) I* ?* B5 @6 T7 ~* T1 ?0 _* Z3 F9 \" u, @- l5 }3 r# U
//按键消抖部分& p, w* B6 U; \- p6 u* |# @
always @(posedge clock)# _" c" B" w2 m/ {9 Z7 }8 g
begin
" N- v2 `$ J- u$ B) b! U9 u    if(div_clk)/ f8 m/ \0 C; G; p7 a% i5 s
    begin
. _, F. q8 ]  c7 C5 Z        dout1 <= key;
0 e  `: X4 `2 w  c% _* N        dout2 <= dout1;
9 ~7 |* a- e3 V# D% b9 X- {        dout3 <= dout2;5 e$ b  Q  i, {) a* z' U
    end   
6 l' [9 k9 A5 G5 cend/ f5 j2 m: P4 j- }
; F6 {  c8 q4 h3 j, L, n
//按键边沿检测部分
8 {- e, O- l/ w0 halways @(posedge clock)
2 d1 B% H! N/ n. u) |: Hbegin" K% g' s! ?5 P
    buff <= dout1 | dout2 | dout3;
( k' R4 ^6 j8 U. t4 B' ?end
/ |4 L$ e: y: Q" \6 A- I
8 W" N0 I) s5 A0 bassign key_edge = ~(dout1 | dout2 | dout3) & buff;
4 k4 r" H  C; A% w+ n
- U) }+ U7 j) q" H* f; r4 o' E  C* d$ u0 m
always @(posedge clock)                            //按键1& j1 v, k( H0 T  e0 e. B
begin
0 D5 A0 A/ Z& [$ I/ @7 k* m( Z- `  _- J    if(key_edge[0])                                //下降沿检测
3 O- B) e9 w, s    data[11:8] <= data[11:8] + 1'b1;
( ?( L) j5 U* _5 F# Uend0 Y! Z/ y" h5 ^4 j# Z7 e+ G" \
- G% N0 \, \  I# R% }1 R! ^
always @(posedge clock)                            //按键2
# f8 B- z) `! G: O: Zbegin6 c' O2 `0 Z0 |
    if(key_edge[1])                                //下降沿检测
3 E" Y- R, p: w' E9 w5 r3 z    data[7:4] <= data[7:4] + 1'b1;
0 ?. n4 q0 O' G' V& mend
# R, p" q# n6 m+ L, U0 i5 b" I; B  Y/ t' H
always @(posedge clock)                            //按键3- `( g" N! m: u3 \3 \3 v2 P4 U" R/ |; a
begin" Q: Q1 w2 E( ]# f* @
    if(key_edge[2])                                //下降沿检测
+ N: R- V$ Z- O8 A4 U; U7 }    data[3:0] <= data[3:0] + 1'b1;  |% j5 Y& d. s) l: B3 p& D
end0 |; A7 ^. ?/ t

1 P3 r8 ]7 J" ~; Galways @(posedge clock)                            //按键4; C0 q2 s& d3 U5 t3 T* c' b
begin" r' |/ a6 F, ~1 }, `# m" L
    if(key_edge[3])                                //下降沿检测
4 B' H8 I# b0 M! V* A  l9 ~! B    select <= ~select;
; z* g" \- i/ P% K6 Y* R3 F( hend1 `, J) w- ?* \/ Y& x1 D; f9 ~  R

" m+ k) d! T2 l: N- Q# v- d- z% v
//数码管扫描显示部分9 [$ }1 D5 ]  P0 o
always @(posedge clock)                   //定义上升沿触发进程) T1 C# f% q! H. m9 h9 s
begin
% @( n; T9 }, X# P+ |' d. U. z0 k    if(div_clk)9 C2 G& t1 t" I9 n5 A. ~8 ]
        cnt <= cnt + 1'b1;3 E( Y( Y( k* r0 ^
end
- e& A2 A, q8 V* {
; y: g/ C, E+ m+ ]+ D+ M+ P: calways @(posedge clock)                           
" ^/ k0 Z7 v( l8 dbegin3 r6 Q' l; w) N& d
    if(div_clk)
+ l" ^  q+ z9 O3 L3 n$ ^    begin
" x, K, q5 P* C) x        case(cnt)                                    //选择扫描显示数据
4 n; W- {3 Q+ Q$ Q% E8 x9 L+ o            2'd0:disp_dat = data[11:8];                 //第一个数码管
* m# _6 Z$ F' M0 \( e            2'd1:disp_dat = data[7:4];                //第二个数码管
. G5 r4 {' m( a% t            2'd2:disp_dat = data[3:0];                //第三个数码管
' J1 Z+ [2 C. R( S# h2 A            2'd3:disp_dat = {3'b0,select};            //第八个数码管
" B% |: P; t5 x  Q: i/ A9 U: E        endcase: d0 Q! M0 ^$ e: W9 {" U% {4 v
        case(cnt)                                    //选择数码管显示位- p+ {" c' M. v1 G, i
            2'd0:dig = 8'b01111111;                    //选择第一个数码管显示
( x  ]0 ~* G6 ?" Z3 k6 O            2'd1:dig = 8'b10111111;                    //选择第二个数码管显示5 q  o' Z9 ^2 m- q: r) y
            2'd2:dig = 8'b11011111;                    //选择第三个数码管显示
3 K( _6 b1 y( n            2'd3:dig = 8'b11111110;                    //选择第八个数码管显示8 o: I( D: I8 c  ~3 L( b# v
        endcase   
4 P; d& K( v; H    end9 f& _4 H- @- b+ D* v
end
; n/ {! H5 a  a& U' e6 z6 a% `/ w
always @(disp_dat), f: w6 s. ?* o
begin
7 U5 Y1 r' `4 y6 Q8 d    case(disp_dat)                        //七段译码
* e1 t, w- H* z4 y        4'h0:seg = 8'hc0;                //显示0  B2 Y. V6 h, U& y$ _
        4'h1:seg = 8'hf9;                //显示1/ f- k5 B# o0 ?6 T
        4'h2:seg = 8'ha4;                //显示20 {; x- o6 A9 P+ @
        4'h3:seg = 8'hb0;                //显示3
: P5 P* T, Z6 l2 W4 ~) C# Q        4'h4:seg = 8'h99;                //显示4
% [0 s- R4 }: P5 E0 D9 Z        4'h5:seg = 8'h92;                //显示5
7 n( }$ m! y1 U2 W1 n2 Z" T) n0 W        4'h6:seg = 8'h82;                //显示6
9 Y9 a4 _7 ?# s) r. z        4'h7:seg = 8'hf8;                //显示7
& L$ h$ [7 c4 G8 a" M# [2 |/ G        4'h8:seg = 8'h80;                //显示81 b- a6 }, _, W5 S# s" ?
        4'h9:seg = 8'h90;                //显示9
# H+ U* {" N( l0 T, G        4'ha:seg = 8'h88;                //显示a
. s8 A4 u9 g" ~$ [6 V5 I1 v8 v) Y- P        4'hb:seg = 8'h83;                //显示b3 n+ N+ Q5 `" F- R- X
        4'hc:seg = 8'hc6;                //显示c; i% ]* K7 ^1 |! T0 x
        4'hd:seg = 8'ha1;                //显示d' l# C8 X9 _4 _
        4'he:seg = 8'h86;                //显示e
' R! d9 B- z4 j9 D# Z! N        4'hf:seg = 8'h8e;                //显示f' b% O! X5 l# H+ S& m: [7 B
    endcase# E5 g3 j. X, Z0 b
end, N4 s3 c% u. \' e( N+ l/ Z# p" `

! H: `9 ~' c; aendmodule
& k: t  Q. n2 r, t# O, S0 F% W1 g
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-2 22:47 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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