我用的是XILINX CPLD,VERILOG 编程.
有三个信号: 2个周期信号A和B,占空比不一样,要测量他们的沿差; 1个时钟clk.
思路如下: 当第1个信号A上升沿到来的时候,记数器清0,并且允许计数; 当第2个信号B上升沿到来的时候,记数器停止计数,读出计数结果.
困难的地方: 1.在时钟信号clk下,如何判断A和B的上升沿呢? 如果不置于clk框架内,又会造成在不同always模块内,对同一变量赋值的错误. 2. 当A和B的上升沿很靠近时,会产生毛刺吗?
我的代码如下: always @ (posedge clk) begin if (!A) EdgeA=1; if (!B) EdgeB=1; if (A && EdgeA) begin start=1; //start 计数开关 cnt=0; EdgeA=0; end if (B && EdgeB) begin start=0; result=cnt; //保存结果 EdgeB=0; end
if (start) cnt=cnt+1; end
|