chhaich 发表于 2015-10-12 23:33:34

verilog里面如何判断同一个时钟的上升和下降沿


如图所示,我想要从A时钟里面产生B和C时钟的波形。B时钟的波形容易,只要always里面判断A时钟的上升沿然后取反B就可以了。
但是C取反的时刻有时候在上升沿有时候在下降沿,我这样去描述的时候always@(posedge A or negedge A)编译就报错了。
我需要怎样去产生这样的波形呢?请各位指点一下迷津,谢谢!

snkaka 发表于 2015-10-13 07:34:23





直接always @ 啊

chhaich 发表于 2015-10-13 08:08:49

snkaka 发表于 2015-10-13 07:34
直接always @ 啊

谢谢啊,我试试看。

dr2001 发表于 2015-10-13 08:54:37

假定输入时钟是50%占空比的,如果要求输出时钟占空比抖动小,占空比稳定,那么建议时钟时钟模块倍频后分频获得。

如果要求不高,可以用LUT出,就是延迟半周期然后用LUT或:
reg div3 = 'b100;
always @(posedge CLK) begin
    div3 <= {div3, div3};
end

reg delay = 1'b0;
always @(negedge CLK) begin
    delay <= div3;
end

wire    clk_div3 = div3 | delay;

aammoo 发表于 2015-10-13 08:57:36

snkaka 发表于 2015-10-13 07:34
直接always @ 啊

你这个是组合逻辑的,不建议采用

aammoo 发表于 2015-10-13 09:00:51

4楼的方法可以,但clk_div3最好也用寄存器打一下

yuyu87 发表于 2015-10-13 09:06:10

2楼方法就行啊,@ a,上升,下降都有啊,

chhaich 发表于 2015-10-13 09:09:48

yuyu87 发表于 2015-10-13 09:06
2楼方法就行啊,@ a,上升,下降都有啊,

嗯,是的,刚刚试过可以。

dr2001 发表于 2015-10-13 09:32:18

aammoo 发表于 2015-10-13 09:00
4楼的方法可以,但clk_div3最好也用寄存器打一下

评论得很好。

对于FPGA而言,除非用2倍频时钟、空引脚或者未绑定引脚的ODDR,来实现;否则麻烦找个支持双沿的FF来呗。
如果有2倍频时钟,直接分就完了,什么都有。

dr2001 发表于 2015-10-13 09:33:48

yuyu87 发表于 2015-10-13 09:06
2楼方法就行啊,@ a,上升,下降都有啊,

仿真没问题;综合就不一定出啥了。

Moriarty_li 发表于 2015-10-13 09:43:51

3年没动数电,我竟然还能看懂,只能说明二楼太专业了

handkerchief198 发表于 2015-10-25 12:17:05

用@(posedge A or negedge A) 行不?

zxq6 发表于 2015-10-25 12:51:51

fpga?用pll成不?

chhaich 发表于 2015-10-25 19:36:47

zxq6 发表于 2015-10-25 12:51
fpga?用pll成不?

CPLD,没有PLL
页: [1]
查看完整版本: verilog里面如何判断同一个时钟的上升和下降沿