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上是新手,试了好多次没成功所以前来提问。希望大佬可以回答,解决这个双边沿单稳态触发电路的设计。
没有回复内容