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

关于实现类似双边沿单稳态电路的办法,使用的是xilinx的ZYNQ7010。

[复制链接]

该用户从未签到

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

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+ @

该用户从未签到

2#
发表于 2020-5-13 14:50 | 只看该作者
01.错误2 h0 E4 D# a8 V$ D
程序错误细节没看,主要是你的编码风格不太规范。3 t; d; Z' H! q* o! v# A( |6 d0 U
一般在always语句中采用时序控制,并且赋值采用非阻塞方式赋值(<=);而你的用法是在always语句中引入了事件控制(posedge sys_crs)。
; j+ }. Q- m5 [6 _$ M1 n假如在always语句中引入事件控制,一般用作组合逻辑,并且赋值采用阻塞方式赋值(=),例如always@(a,b,c or d)或者always@(*)。
, x9 {6 r1 H+ d  O- u" r4 r  V4 s可以用你的方式编码,但是更要加强逻辑状态的控制。
2 E7 a, B8 P1 `: s//------
; C- I8 I5 u' P1 Z02.源码及仿真波形如下,输出波形的占空比我设置了百分之50和百分之八十,仿真时间1ms。6 G' S/ Z; v8 [* C6 p! a
注释部分的代码,是另一种实现方式,可以替代它上面的对应代码。具体怎么学习就看你自己了。2 a/ _+ [( @# J8 z2 n( n

点评

如果我理解的输入输出关系有错误,请把问题描述详细一点。  详情 回复 发表于 2020-5-13 14:51
那其他的呢  详情 回复 发表于 2020-5-13 14:51

该用户从未签到

3#
 楼主| 发表于 2020-5-13 14:51 | 只看该作者
wuke8 发表于 2020-5-13 14:50; _. _+ R3 p6 g- n% ]" w
01.错误
; ~4 }$ k# k8 n% m+ A7 ^程序错误细节没看,主要是你的编码风格不太规范。
6 h5 t& [. B& ~" x$ N- K6 A一般在always语句中采用时序控制,并且赋值采 ...

5 f: Z. Y' @$ E  ~那其他的呢
# B' c. n# C$ Q; y# k2 R1 o

该用户从未签到

4#
 楼主| 发表于 2020-5-13 14:51 | 只看该作者
本帖最后由 zhishide7 于 2020-5-13 14:53 编辑
2 @. d( A3 B( p4 N% b% F7 M
wuke8 发表于 2020-5-13 14:50
6 k! [, z) g% W( z% E01.错误
( ~7 \) E: s% y7 |程序错误细节没看,主要是你的编码风格不太规范。
, p7 x+ A0 ?' M- Z# C! h5 x& I$ }) p一般在always语句中采用时序控制,并且赋值采 ...
/ F+ N. p! T0 i5 ]- m
如果我理解的输入输出关系有错误,请把问题描述详细一点。

点评

仿出来singal_out不知道为什么一直是低电平。[/backcolor]  详情 回复 发表于 2020-5-13 14:52

该用户从未签到

5#
发表于 2020-5-13 14:52 | 只看该作者
zhishide7 发表于 2020-5-13 14:51
% F0 z1 R. M# d如果我理解的输入输出关系有错误,请把问题描述详细一点。
8 l4 }: c$ c8 i( ?- s2 p) Y
仿出来singal_out不知道为什么一直是低电平。+ D; o  I9 S; U, R, m6 h

该用户从未签到

6#
发表于 2020-5-13 14:53 | 只看该作者
你得告诉我代码改动哪里了。
! g, c# i& _5 j5 C: W/ J我这边不改代码可以正常出仿真波形。*.v的仿真与开发环境没有太大关系。1 p/ H7 d/ L. ^5 ^/ a* U% s
//------$ Z( M3 U/ s- v5 d3 l' H" X
你先参考如下步骤添加top的信号到窗口,看看哪个信号有问题。

点评

我一个字都没改,我先自查一下吧,看看是不是哪儿设置的有问题。  详情 回复 发表于 2020-5-13 14:54

该用户从未签到

7#
 楼主| 发表于 2020-5-13 14:54 | 只看该作者
wuke8 发表于 2020-5-13 14:53
: W- R! c. y. {9 \& e6 Y9 P1 B你得告诉我代码改动哪里了。
8 F) \8 f9 ^: _: K2 A: A我这边不改代码可以正常出仿真波形。*.v的仿真与开发环境没有太大关系。
1 g0 e6 O$ C2 R6 Z/ k//- ...

7 W* Z4 m8 p. ^6 ?4 u7 F$ Q我一个字都没改,我先自查一下吧,看看是不是哪儿设置的有问题。6 l0 I' d. r8 j7 ?. Q: z

点评

我将将代码下载之后也能正常跑仿真。你肯定是改哪里了。  详情 回复 发表于 2020-5-13 14:54

该用户从未签到

8#
发表于 2020-5-13 14:54 | 只看该作者
zhishide7 发表于 2020-5-13 14:54
! _4 L. z+ d" P4 L2 t! U9 R我一个字都没改,我先自查一下吧,看看是不是哪儿设置的有问题。
8 P% m8 Y. s* b6 a8 ^) d
我将将代码下载之后也能正常跑仿真。你肯定是改哪里了。1 z; l8 {) O0 s" g! h

该用户从未签到

9#
发表于 2020-5-13 14:55 | 只看该作者
代码重新下载后仿真结果。8 X. c& l0 z1 K% N4 L4 c6 p, e
你看看是不是波形没有显示全,调整一下波形。

点评

波形没问题,谢谢大佬,  详情 回复 发表于 2020-5-13 14:55

该用户从未签到

10#
发表于 2020-5-13 14:55 | 只看该作者
bookbook 发表于 2020-5-13 14:55
% h2 l# g$ t- p& k代码重新下载后仿真结果。
# t& d& R5 Y, h% D你看看是不是波形没有显示全,调整一下波形。

* q; N6 _+ i# I波形没问题,谢谢大佬,0 A. d" k. ]4 D+ `# q+ G/ D1 l+ h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 13:26 , Processed in 0.140625 second(s), 31 queries , Gzip On.

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

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

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