|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、问题:使用xilinx的ZYNQ7010的PL部分实现类似双边沿单稳态触发电路。% K# O1 @# ?; B, B
已知输入信号频率在7.9KHz~8KHz之间波动,波形为方波。当上升沿到来时跳变为高电平,在下降沿到来前降为低电平。当下降沿到来时跳变为高电平,在上升沿到来前降为低电平。6 c, X# c" x# \0 B
波形类似
* [9 V A* m) W: s8 {' M6 R: x) K3 Y t7 w+ |0 \9 e& z
2、要求
" }% f+ G, U; z9 z输出的脉宽要求大致为输入信号的一半,但并不严格要求。
* c1 V4 i- x8 w) M* e- Q要求输出信号的上升沿与输入信号的上升沿与下降沿严格对齐。
$ U- Z& N/ Q! {5 s9 @/ K5 C, b/ d$ tFPGA上是新手,试了好多次没成功所以前来提问。希望大佬可以回答。7 D( h/ Q6 w7 y/ t% s: b
3、尝试做法; M* p6 n9 V# M! {6 P' s
reg[10:0] timer_cntp;//计数器1
. d2 I8 y, e% B1 }) M reg[10:0] timer_cntn;//计数器24 _$ s% ?3 x5 {# x6 u1 P
reg flagp;//判断上边沿 ; Z! u, m( F; S6 `: C
reg flagn;//判断下降沿
3 d8 I: z2 b2 G$ o- }! h- N wire flag;
, |9 W" b3 U" Q6 A1 s3 C always@(posedge sys_crs or posedge sys_clk)//同步信号上升沿,sys_crs为输入信号,sys_clk为时钟" R8 y5 j5 O9 P- g% b8 I+ y& V0 t
begin3 J5 t8 E% V- ]6 Q6 D
IF (sys_crs)
?2 O/ z( \: Q- F! F' J4 K/ \ begin
9 }' m& }+ N. {5 i flagp <= 'b1;//标志位
. V5 S$ ?% P( ^1 ^: y% U; f timer_cntp <= 11'd0 ;//计时开始+ K$ ^4 M" Q7 p$ V/ w
end, r+ f6 `4 _1 F+ ]- j' w' z
else if(timer_cntp >= 11'd1562&flagp==1'b1) //(1/8000/4)*50000000=1562.5
) D" w- d% P4 w0 }9 c: c, ~- o5 h- A begin5 O6 V) R: b& u
flagp <= 'b0;//下个同步信号边沿前回复3 y- Y/ y8 r g
timer_cntp <= 11'd0 ;2 s% Z" \ h1 l1 T% j
end
: j. h& V C3 k else
0 V1 W Z; X+ N- o& \ begin
+ k, U$ E- b& k+ J timer_cntp <= timer_cntp + 11'd1;
2 B( w; Q- ~( D7 b- ~ end2 u2 h* }+ c/ j, n
end " a, |& ?( ^+ t, e: g' _3 }
& c1 o; ]8 @$ h$ i6 Y( u/ z9 o0 k
always@(negedge sys_crs or posedge sys_clk)//同步信号下降沿/ L, R0 p5 n( u7 e' y
begin
6 |. X+ q$ A) u3 S if (!sys_crs)
% x* t0 Z+ R. f) h# | begin% u6 Y$ p/ y" N- a% x
flagn <= 'b1;//标志位
2 F( F( G, m4 T: e! |/ x1 p- f4 X: F timer_cntn <= 11'd0 ;//计时开始9 J2 V! u- g$ \
end: A. v/ ?, f1 n# ?5 ?* O; Q5 t
else if(timer_cntn >= 11'd1562&flagn==1'b1) //(1/8000/4)*50000000=1562.5
& B0 q& E! k2 q% A0 x) i: k- { begin
4 q- I" B2 X; O P flagn <= 'b0;//下个同步信号边沿前回复
2 M, ]. f* ]0 K/ g& a J# @ timer_cntn <= 11'd0 ;. {9 Q5 Q! o7 L( G
end
" f, a. Q) R H/ w' h! w& g: Z, d else: ~; L- C! | l4 ?
begin3 {" O* g1 x7 [2 O3 N. d' G
timer_cntn <= timer_cntn + 11'd1;
, p& b( X8 B- S end! j. f! ~" n c, ]9 ]" V0 p
end ! {. T0 w9 S x: X- ?! L7 t
assign flag=flagn|flagp;' D9 O! l. [1 [/ \- R+ ~5 k
4、失败原因分析# s, U! p6 ~2 P. `' e" O3 m
一直在执行 if (!sys_crs)和if (sys_crs); ]" L0 R, P( `2 {* |% }/ m1 J
5、fpga上是新手,试了好多次没成功所以前来提问。希望大佬可以回答,解决这个双边沿单稳态触发电路的问题。
i* v4 P! ~2 i" k) m& K) G* R3 {- I- B4 x: l: U. R
& T; f0 g* G/ R! `/ ~7 S+ @
|
|