verilog里可不可以同时对上升沿和下降沿计数
always@(posedgeeocornegedgeI/O_CLK)i<=i+1;这个可以实现吗...
always@(posedge eoc or negedge I/O_CLK)
i<=i+1;
这个可以实现吗 展开
i<=i+1;
这个可以实现吗 展开
2个回答
展开全部
你这种写法可以实现,不过变量I/O_CLK,这种写法不合法,建议写成IO_CLK,还有verilog中一般不建议直接使用negedge去检测除复位信号以外的信号的下降沿,因为FPGA中的寄存器基本上都是上升沿敏感的,如果直接使用negedge去检测下降沿会多产生额外的一个非门,建议使用如下方法:
//电平检测模块
1 reg F1,F2; // F2 Previous State, F1 Current State
2 always@(posedge CLK or negedge RSTn)
3 if(!RSTn)
4 begin
5 F1<=1'b0;
6 F2<=1'b0;
7 end
8 else
9 begin
10 F1<= A;
11 F2<= F1;
12 end
13
14 wire Aup = F1 & !F2; //当Aup为1时,表明产生了一个上升沿
15 wire Adown = F2 & !F1//当Adown为1,时表明产生了一个下升沿
注意Aup,Adown变高后,只会持续一个时钟周期,就会归零,所以你可以
再做一个计数器,专门检测Aup,Adown,从而到达计数的目的。
对了,如果你想检测eoc 的上升沿,同时检测I/O_CLK的下降沿,可以这么写,
充分利用FPGA的并行特性嘛。
//------------------------------------------------------------------------------
1 reg F1,F2; // F2 Previous State, F1 Current State
2 always@(posedge CLK or negedge RSTn)
3 if(!RSTn)
4 begin
5 F1<=1'b0;
6 F2<=1'b0;
7 end
8 else
9 begin
10 F1<= eoc;
11 F2<= F1;
12 end
13
14 wire eocUp = F1 & !F2; //检测eoc的上升沿
//-------------------------------------------------------------------------------------
1 reg F3,F4; // F4 Previous State, F3 Current State
2 always@(posedge CLK or negedge RSTn)
3 if(!RSTn)
4 begin
5 F3<=1'b0;
6 F4<=1'b0;
7 end
8 else
9 begin
10 F3<= IO_CLKDown;
11 F4<= F3;
12 end
13
14 wire IO_CLKDown = F4 & !F3; //检测IO_CLK的下降沿
纯手打,望采纳,欢迎追问~~
//电平检测模块
1 reg F1,F2; // F2 Previous State, F1 Current State
2 always@(posedge CLK or negedge RSTn)
3 if(!RSTn)
4 begin
5 F1<=1'b0;
6 F2<=1'b0;
7 end
8 else
9 begin
10 F1<= A;
11 F2<= F1;
12 end
13
14 wire Aup = F1 & !F2; //当Aup为1时,表明产生了一个上升沿
15 wire Adown = F2 & !F1//当Adown为1,时表明产生了一个下升沿
注意Aup,Adown变高后,只会持续一个时钟周期,就会归零,所以你可以
再做一个计数器,专门检测Aup,Adown,从而到达计数的目的。
对了,如果你想检测eoc 的上升沿,同时检测I/O_CLK的下降沿,可以这么写,
充分利用FPGA的并行特性嘛。
//------------------------------------------------------------------------------
1 reg F1,F2; // F2 Previous State, F1 Current State
2 always@(posedge CLK or negedge RSTn)
3 if(!RSTn)
4 begin
5 F1<=1'b0;
6 F2<=1'b0;
7 end
8 else
9 begin
10 F1<= eoc;
11 F2<= F1;
12 end
13
14 wire eocUp = F1 & !F2; //检测eoc的上升沿
//-------------------------------------------------------------------------------------
1 reg F3,F4; // F4 Previous State, F3 Current State
2 always@(posedge CLK or negedge RSTn)
3 if(!RSTn)
4 begin
5 F3<=1'b0;
6 F4<=1'b0;
7 end
8 else
9 begin
10 F3<= IO_CLKDown;
11 F4<= F3;
12 end
13
14 wire IO_CLKDown = F4 & !F3; //检测IO_CLK的下降沿
纯手打,望采纳,欢迎追问~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询