您当前的位置:首页 > 今日分享头条 > 正文

Verilog中clk为什么要用posedge而不用negedge

Verilog中clk为什么要用posedge而不用negedge

取信号的上升沿或下降沿信号取信号的上升沿或下降沿信号。你可以通过延迟信号得到上升沿信号或者下降沿信号,然后对原始信号和延迟信号进行不同的NAND运算:Stage 1:reg delay;//延迟信号always @ (posedgclk或negedgrstn) if(!rstn)延迟=0;else delay=orig//orig是原信号线pos _ signal=orig(~ delay);//原信号上升沿产生的脉冲信号wire neg _ signal=(~ orig)delay;//原信号级2的下降沿位置产生的脉冲信号:上述操作会出现亚稳态的问题,得到的上升沿信号pos_signal和下降沿信号neg_signal无法被原采样时钟clk采样。正确的做法是将原始信号用采样时钟延迟两次(拍两次)得到与采样时钟在同一时钟域的信号延迟2,然后按照上述方法得到上升沿和下降沿信号,那么得到的上升沿或下降沿就可以用原始采样时钟采样了。例如:reg ori _ signal//需要取上升沿或下降沿的原始信号reg delay1注册延迟2;always @ ( posedge clk或negedge rstn ) if(!rstn)delay 1=0;else delay1=ori _ signalalways @ ( posedge clk或negedge rstn ) if(!rstn)delay 2=0;else delay2=delay1//delay2与clk reg delay3具有相同的域;always @ ( posedge clk或negedge rstn ) if(!rstn)delay 3=0;else delay3=delay2wire pos _ signal=delay 2(~ delay 3);//原信号上升沿产生的脉冲信号wire neg _ signal=(~ delay 2)delay 3;//原信号下降沿位置产生的脉冲信号的上升沿电路如下:注意:前两个触发器是用来将一个信号同步到采样时钟域的,以后使用时要注意。阶段3:阶段2中的语句会比较复杂,可以用下面的语句来简化:reg[2:0]delay;always @ ( posedge clk或negedge rstn ) if(!rstn)延迟=0;else delay={ delay[1:0],ori _ signal };//ori_signal是原信号wirepos _ signal=delay[1](~ delay[2]);//原信号上升沿产生的脉冲信号wire neg _ signal=(~ delay[1])delay[2];//原始信号下降沿产生的脉冲信号

为什么Verilog中clk是negedgeposedge而不是negedge?posedge是上升沿,电平从低到高跳变。

Negedge是下降沿,电平由高到低跳变。

对于典型的计数器逻辑

always @(posedge sys_clk或negedge sys_rst_n)开始

如果(!sys_rst_n)

counter=24 d0;//十进制0

否则如果(计数器led_time)开始

flag _ counter=1 B0;

计数器=计数器1 B1;

结束

否则开始

counter=24 d0;

flag _ counter=1 B1;

结束

结束

clk为什么要用posedge而不是negedge?

一般在系统中统一使用posedge,避免使用negedge,降低设计复杂度,减少误差。

ModelSim仿真中对时钟要求很严格,但真实晶振产生的时钟并不严格,比如高电平和低电平的时间跨度不同,甚至还有非周期性的轻微波动。如果只使用posedge,那么整个系统的节拍是按照clock的上升沿对齐的。如果使用negedge,系统的节拍就没有统一到一点。上升沿到上升沿肯定是一个时钟周期,但是上升沿到下降沿很可能不是半个周期。会有问题。

FPGA的独特之处:全局CLK。有一个特别的CLK line 在FPGA内部,不同于一般的逻辑门。目的是保证整个FPGA芯片内的时钟一致。这个东西叫GlobalCLK。

编辑:李倩

标签:信号时钟rstn


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 色带芯怎么换视频教程(打印机色带怎么换)

下一篇: lga1155(CPU是LGA1155好还是LGA775好)



推荐阅读