TA的每日心情 | 开心 2022-1-29 15:04 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA 按键控制1秒计数器的启动与停止来控制LED[7:0],每当满一秒时,led[7:0]+1。编写程序后,对IO属性分配时,只有LED逻辑,缺少了key,clk这两个逻辑(如图),请问是什么原因?本人刚学习FPGA,希望大佬指点一下,非常感谢。
* {; @" o! p- F: U////////////////////////以下为代码部分,写的不好之处,请大佬批评指导,(FPGA资源为美高森美A3PE)
* ~; B: E) l) R' L' I$ Mmodule keyin( clk,led,key1);
" P3 M p% v& m9 y
4 p8 u7 e( k8 _: iinput clk;3 j9 U/ v6 `; \# k3 s" @
input key1;
# ]# @) c( i! [7 }
( T# ]1 \0 V: y0 l9 ooutput led;" e- I1 d; p4 F$ J5 a( o5 Y
5 b. m0 M& N ^6 s, s L
//software reset
/ Q! r4 e; d: s3 n# U7 Qreg [31:0]rst_cnt=0;5 s+ t# s! |! ^1 p3 K
reg rst_n; y" m: _& | E# a
& {4 ~( f* n( J; _always@(posedge clk)begin
5 l8 E N% k9 C5 w if(rst_cnt==32'd39999999). e0 Z1 N& q5 M
rst_n<=1'b1;; k, F0 q7 l: k0 H
6 L7 o1 H- O* x7 r+ o3 J% Q
else# ^! s: j8 _, f0 E! o) s
begin3 H8 A. E2 D$ @' Z; W
rst_cnt<=rst_cnt+1;: q. m! W, {! h$ A% `1 Q8 @
rst_n<=0;
6 ]9 H) z; W) s8 G* K, K end
* X' J8 F) a# kend. K' T4 \! s5 \- P: ?9 f8 [6 q
+ K. m" f1 ^) n( L& A//check key change
7 H* \7 W1 e0 E0 X2 D. ?) |- `reg low_sw1;3 H: U, r u ]& }
reg low_sw1_r;3 M4 V! J! H9 t1 R$ t
reg [19:0] sample_cnt;) t7 b; u# S& _" i& ~
# |3 Z! o3 G" ~; j T2 f% t) @
//key_a' z3 m! {; N8 s& U- h9 m
always@(posedge clk or negedge rst_n)begin' L% _- Q5 [5 @4 `; I" V
if(!rst_n)begin8 a! V) Z2 B' b0 b
low_sw1<=1'b1;
; f$ }, @% L5 a' M3 p3 h1 r2 m sample_cnt<=0;( o5 ~- \- m5 U0 t" v* p" A; H7 f) m
end
0 R& p/ ` p" g5 l. e7 L else if(sample_cnt==799999)begin
, P1 J' t) d5 A# z" S* l- D2 B. E" Z sample_cnt<=0;
7 N; H4 g5 o. n, M( B( k4 ?" k low_sw1<=key1;
! w" L1 X0 ]* x& Z9 J/ O2 v" r end# `* d4 `4 T- y" y$ G
else
. R# F0 x0 \1 Z" O' P sample_cnt<=sample_cnt+1;
, z6 J7 h, x: ^, [& v' q( U1 }5 xend5 q V, B# F- R
. s5 L% L) e# P! m1 Ualways@(posedge clk or negedge rst_n)begin. R" D- T) R* ~4 Z
if(!rst_n)begin
' d- D. L) y2 i% _ low_sw1_r<=1'b1;
5 a" m, |; o7 Z) L. I* k Oend# h1 p: q( q! L- ~. d, u( S
else; b a2 q1 T! {& e5 o
begin9 t5 d, c: C, K, g, J
low_sw1_r<=low_sw1;
: B1 q" \+ }3 i% ]9 G4 gend4 O. F/ o' ^# h$ r/ c' I& t
end! S( u$ @0 L6 l7 R
/ b s) }1 F8 q0 ?1 zwire key_en;
! L2 S% y0 n) G* I# @- |6 E& I, s. {+ x1 c' W
assign key_en=low_sw1_r&(~low_sw1); //pulse edge check, |. w' k" d# ^$ M; e/ e8 R
9 i$ h* O. f# V+ H
//1s timer
$ A B2 H( M: z9 O& ureg [24:0]time_cnt;5 q9 c4 U- g, y4 X
reg time_en;
: j$ d/ n+ y7 ^2 L; s+ ireg [7:0]led;0 k$ X! y) J1 G4 t4 n* s$ N
1 e) w0 F0 o% {# c! _$ _
. x: q( R8 d' t( l7 {0 Aalways@(posedge clk )begin //这里想用按键来控制计数器开始与停止
+ ^0 x' i4 ^* g+ w+ y if(!key_en)begin
2 q( k" C: Z S: _ time_cnt<=0;
/ q6 Y8 f+ o# [$ s //time_en<=0;
* C7 ?: z; F& D" Q' m( B$ n. H led<=0;
) e S' V: C& [0 I. g# d! l end/ P, L( i! Y( E
else begin
0 e6 H" o; D* I // if(key_en)
5 ~- h3 {; M5 @2 k! S8 t if(time_cnt==25'd39999999)begin
* P% g+ }0 e5 R& _9 b2 Y; \/ m time_cnt<=0;$ b# [5 u1 b# t6 ]' K
//time_en<=1;
2 b. n$ E0 }$ q led<=led+8'd1;
# F7 X# p& q ~! c5 E end; } o) o2 @# p' u
else begin
G: O7 N# s' f! i' L6 U+ | time_cnt<=time_cnt+1;& |+ I5 _% a0 X# Y- d9 a0 w s5 @2 |
//time_en<=0;: S! q* `! J& q- Z3 R$ [% J
led<=led;
9 V: n5 Y9 _: q* [ end i( L: C/ e _$ I0 _
// else! `3 Z7 u F E x) M$ g) b) X
// time_cnt<=time_cnt;, G, T8 o3 V: n) j b3 [
end
P5 d- B1 z& L% b4 {8 O5 J2 Tend z" v s4 W" m4 p/ @& }1 l
endmodule: C, X3 U" C7 i1 h
6 K4 P+ C3 ~& |. {' O I
|
|