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

1、问题:使用xilinx的ZYNQ7010的PL部分实现类似双边沿单稳态触发电路。
已知输入信号频率在7.9KHz~8KHz之间波动,波形为方波。当上升沿到来时跳变为高电平,在下降沿到来前降为低电平。当下降沿到来时跳变为高电平,在上升沿到来前降为低电平。
波形类似双边沿
黑色为输入信号,黄色为输出信号。

2、要求
输出的脉宽要求大致为输入信号的一半,但并不严格要求。
要求输出信号的上升沿与输入信号的上升沿与下降沿严格对齐
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上是新手,试了好多次没成功所以前来提问。希望大佬可以回答,解决这个双边沿单稳态触发电路的设计。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
tsh12345hy 头像