|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
7 _- X( p1 ?2 N
2 @8 ^( w$ t' Y6 Q8 v! C9 V" |4 f# ?$ X4 Y
. P* h, e) C/ {4 |4 G
1
" s" h& S6 }, J1 J8 ?6 k/ F# p/ u1、问题:使用xilinx的ZYNQ7010的PL部分实现类似双边沿单稳态触发电路。
1 F3 B$ M1 e/ ?& }7 }已知输入信号频率在7.9KHz~8KHz之间波动,波形为方波。当上升沿到来时跳变为高电平,在下降沿到来前降为低电平。当下降沿到来时跳变为高电平,在上升沿到来前降为低电平。
$ Q, O& k" E" f4 l) R波形类似9 k! M# i1 X# M1 k: y* `/ H
7 ] w# Q. Y- H- d" e2、要求! ] L+ h& r l
输出的脉宽要求大致为输入信号的一半,但并不严格要求。
; u9 N% `# [9 \* j: O/ R要求输出信号的上升沿与输入信号的上升沿与下降沿严格对齐。
K6 Q) U/ Y" ^5 ? g! q* lFPGA上是新手,试了好多次没成功所以前来提问。希望大佬可以回答。: I) m7 |8 i$ [& S: L
3、尝试做法
8 C( c( Y q) {0 A5 \* u/ F2 ^ reg[10:0] timer_cntp;//计数器1* T, l$ s8 O7 E, O; e
reg[10:0] timer_cntn;//计数器2- \& g3 h. `8 [
reg flagp;//判断上边沿 ; ]/ W2 ]$ K$ P- I' o" c
reg flagn;//判断下降沿
& F; o/ R$ ?1 ~$ B# h" _ wire flag;
& `0 E1 R! l6 [ s1 d always@(posedge sys_crs or posedge sys_clk)//同步信号上升沿,sys_crs为输入信号,sys_clk为时钟3 K- o# P; a t' _
begin
+ l; n! ` Q: Q& B% i! V IF (sys_crs): b2 b6 E# R$ i6 {# _4 ^( B
begin
5 J3 z4 |, ]& {7 Q3 s, y% {% @! g flagp <= 'b1;//标志位' u. z; V! O) F1 F3 m, i
timer_cntp <= 11'd0 ;//计时开始
9 b) O% l7 N/ ?$ }2 X end
; f. m3 W& ~' ]( @' T" H2 ~ else if(timer_cntp >= 11'd1562&flagp==1'b1) //(1/8000/4)*50000000=1562.50 V6 Y3 |$ J7 Y. H
begin+ ]3 e# a7 A, I. L8 e% K& q( ^; s
flagp <= 'b0;//下个同步信号边沿前回复5 I% {$ F3 O( `0 o7 `& J
timer_cntp <= 11'd0 ;
: T7 K- s0 |- h4 s end
7 G3 s3 r% H o' y5 b3 z else
) |! n1 ?8 s7 p# u begin( O0 {2 a: [. a! B7 q: t
timer_cntp <= timer_cntp + 11'd1;' v1 t- D& i- _3 I1 ~$ K7 d
end; c( [. }) x( M3 \$ ^/ ]
end & ?( o. ~% |' p! I7 J( c& g
' }( f3 o" J0 `+ O, ` always@(negedge sys_crs or posedge sys_clk)//同步信号下降沿
; E! o4 E$ l0 m7 b$ i7 \ begin
, X+ ]5 t, r6 [; |6 i if (!sys_crs)
& X+ h% [* h( \: w3 d begin
$ c0 h$ d0 [" E# N1 e flagn <= 'b1;//标志位
( D) L% O$ u; ?$ {& u. v timer_cntn <= 11'd0 ;//计时开始% A' |' g" K6 B( J ~: `
end! b. Y1 P# O1 w3 s% a- ~: S: t$ e
else if(timer_cntn >= 11'd1562&flagn==1'b1) //(1/8000/4)*50000000=1562.5
4 x) h% n, j0 F& a- { begin
3 O- D1 H! X- V Z$ s9 Z flagn <= 'b0;//下个同步信号边沿前回复, @2 y7 \$ p* y- o
timer_cntn <= 11'd0 ;
: u2 l. o- U+ M L2 O; z end1 [% L2 R2 x/ V0 e- K
else
0 q9 t* X" X+ b5 @0 o( ] begin9 @1 s% V" a( X8 s" L9 m
timer_cntn <= timer_cntn + 11'd1;
) k8 N: g. p, N5 q end
1 P3 s0 R% f7 ` end
2 C9 ]% E' d9 A" X m- \+ T3 Q0 L% i assign flag=flagn|flagp;
8 Z1 @1 a |5 `3 o! h. o7 k- y 4、失败原因分析
) h9 r$ \4 ?: `& _0 w# C8 h- a" d( d一直在执行 if (!sys_crs)和if (sys_crs)) c) h/ g2 ]% i( i2 m
5、fpga上是新手,试了好多次没成功所以前来提问。希望大佬可以回答,解决这个双边沿单稳态触发电路的问题。 $ I4 ]5 E6 u9 F! j! K/ h# t
/ Q( o2 I* Y# a9 ~9 T( K+ k# D
. u& p$ X: _% y L( ]. h
9 [* ~; c3 Q' S |
% F2 }) d7 |8 M6 Q |
|