[求助]请帮我看看verilog的程序,万分感谢!

- UID
- 146921
- 性别
- 男
|
[求助]请帮我看看verilog的程序,万分感谢!
module cpld_code(encode_a,encode_b,pulse); input [0:0] encode_a; input [0:0] encode_b; output [15:0] pulse; reg [15:0] pulse_counta;
reg outabc; always begin outabc=((!encode_a)&encode_b)|((!encode_b)&encode_a);//两个信号的异或 end always @ ( outabc)//问题就出在这儿,我想在outabc的上升和下降沿计数,结果不对
如果我把这儿改为posedge或negedge就对了,为什么啊? begin
pulse_counta=pulse_counta+1; end assign pulse=pulse_counta;
endmodule
请问为什么always @ ( outabc)得不到我想要的结果啊 |
|
|
|
|
|

- UID
- 146921
- 性别
- 男
|
|
|
|
|
|

- UID
- 146921
- 性别
- 男
|
|
|
|
|
|

- UID
- 146921
- 性别
- 男
|
谢谢楼上的指教,我现在想设计双边缘触发的计数器,所以我想把下降沿也变成上升沿,这样我就只需对上升沿计数了.
我转换的方法是这么想的,将这个波形稍延迟一下,和原来的波形有个错位,这样再将两个异或,就可以得到两个上升沿了,也就是将原来的波形二分频了,我觉得这个方法想起来没错,但是实现延迟,我不知道该怎么办,我记得以前模拟电路用电阻和电容就可以了,具体的请看我发的另一个求助贴子:verilog 延迟问题,多谢了 |
|
|
|
|
|

- UID
- 146921
- 性别
- 男
|
非常感谢!我用的是cpld,我理解您的意思,如果对延时的精度要求不那么高,就可以用这个方法做啊
一般的实现方法是利用FPGA/CPLD的门级延迟(几个ns)也就是把输入时钟加几个buf,您能不能再说的具体点,就这句话我也不知道怎么实现 |
|
|
|
|
|

- UID
- 146921
- 性别
- 男
|
我想过对上升沿和下降沿分别计数,然后再把两个相加,就得到我要的计数了,这个方法最简单,但是我选的芯片资源太少了,实现不了,我又不想重新制版,所以想用这个二倍频的方法 |
|
|
|
|
|

- UID
- 146921
- 性别
- 男
|
|
|
|
|
|