FPGA|CPLD|ASICwilliam hill官网
直播中

谈仕豪

5年用户 19经验值
私信 关注
[问答]

求助:关于实现类似双边沿单稳态威廉希尔官方网站 的办法,使用的是xilinx的ZYNQ7010。

1、问题:使用xilinx的ZYNQ7010的PL部分实现类似双边沿单稳态触发威廉希尔官方网站
已知输入信号频率在7.9KHz~8KHz之间波动,波形为方波。当上升沿到来时跳变为高电平,在下降沿到来前降为低电平。当下降沿到来时跳变为高电平,在上升沿到来前降为低电平。
波形类似
捕获.PNG
2、要求
输出的脉宽要求大致为输入信号的一半,但并不严格要求。
要求输出信号的上升沿与输入信号的上升沿与下降沿严格对齐
FPGA上是新手,试了好多次没成功所以前来提问。希望大佬可以回答。
3、尝试做法

    reg[10:0] timer_cntp;//计数器1
    reg[10:0] timer_cntn;//计数器2
    reg flagp;//判断上边沿  
    reg flagn;//判断下降沿
    wire flag;
    always@(posedge sys_crs or posedge sys_clk)//同步信号上升沿,sys_crs为输入信号,sys_clk为时钟
    begin
    if (sys_crs)
        begin
        flagp <= 'b1;//标志位
        timer_cntp <= 11'd0 ;//计时开始
        end
    else if(timer_cntp >= 11'd1562&flagp==1'b1) //(1/8000/4)*50000000=1562.5
         begin
           flagp <= 'b0;//下个同步信号边沿前回复
           timer_cntp <= 11'd0 ;
         end
    else
        begin
           timer_cntp <= timer_cntp + 11'd1;
        end
    end   
   
    always@(negedge sys_crs or posedge sys_clk)//同步信号下降沿
    begin
    if (!sys_crs)
        begin
        flagn <= 'b1;//标志位
        timer_cntn <= 11'd0 ;//计时开始
        end
    else if(timer_cntn >= 11'd1562&flagn==1'b1) //(1/8000/4)*50000000=1562.5
         begin
           flagn <= 'b0;//下个同步信号边沿前回复
           timer_cntn <= 11'd0 ;
         end
    else
        begin
           timer_cntn <= timer_cntn + 11'd1;
        end
    end  
    assign flag=flagn|flagp;
   4、失败原因分析
一直在执行 if (!sys_crs)和if (sys_crs)
5、fpga上是新手,试了好多次没成功所以前来提问。希望大佬可以回答,解决这个双边沿单稳态触发威廉希尔官方网站 的问题。     




  • 无标题.png

回帖(5)

卿小小_9e6

2020-4-29 18:24:24
01.错误
程序错误细节没看,主要是你的编码风格不太规范。
一般在always语句中采用时序控制,并且赋值采用非阻塞方式赋值(<=);而你的用法是在always语句中引入了事件控制(posedge sys_crs)。
假如在always语句中引入事件控制,一般用作组合逻辑,并且赋值采用阻塞方式赋值(=),例如always@(a,b,c or d)或者always@(*)。
可以用你的方式编码,但是更要加强逻辑状态的控制。
//------
02.源码及仿真波形如下,输出波形的占空比我设置了百分之50和百分之八十,仿真时间1ms。
注释部分的代码,是另一种实现方式,可以替代它上面的对应代码。具体怎么学习就看你自己了。

另,william hill官网 这个帖子也可以学习一下。
https://bbs.elecfans.com/jishu_1890462_1_1.html


2 1 举报
  • edge_check_sim_0.5duty_run1ms.png
  • edge_check_sim_0.8duty_run1ms.png

卿小小_9e6

2020-4-29 18:52:55
本帖最后由 卿小小_9e6 于 2020-4-29 19:16 编辑

明天给你程序。
1 举报

谈仕豪

2020-4-30 11:29:38
捕获.PNG 用的vivado2017.4
举报

卿小小_9e6

2020-4-30 11:50:26
你得告诉我代码改动哪里了。
我这边不改代码可以正常出仿真波形。*.v的仿真与开发环境没有太大关系。
//------
你先参考如下步骤添加top的信号到窗口,看看哪个信号有问题。
2 举报
  • 谈仕豪: 我一个字都没改,我先自查一下吧,看看是不是哪儿设置的有问题。
  • 卿小小_9e6: 我将将代码下载之后也能正常跑仿真。你肯定是改哪里了。
  • add_signal_to_window.png

卿小小_9e6

2020-4-30 12:03:28
代码重新下载后仿真结果。
你看看是不是波形没有显示全,调整一下波形。
1 举报

更多回帖

发帖
×
20
完善资料,
赚取积分