verilog里可不可以同时对上升沿和下降沿计数

always@(posedge eoc or negedge I/O_CLK)
i<=i+1;
这个可以实现吗

你这种写法可以实现,不过变量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个回答  2013-11-01
不可综合,但是可以行为仿真。
如果要实现综合的话,需要2组寄存器分别作用于一个clock, 然后输出用加法器。
相似回答