Verilog中一个always@可以用几个边沿触发

不是几个的问题,是要能map到实际的基本cell。

1:写1个edge, 基本就是clock,用同步复位寄存器;

2:写2个edge,一个clk,一个复位(0)或置位(1)。用异步复位寄存器;

3:写3个edge,一个clk,一个复位,一个置位。用同时带有异步置位/复位的寄存器(这个用的很少,ASIC可以有对应的基本cell);这时候除了第一个的时钟沿,其他2个沿均为异步(置位/复位)

标准写法推荐设计中最多两个沿触发,语法本身是支持的,仿真没有问题,但考虑底层的单元(FPGA/ASIC)均不建议这样写,这样会导致综合映射出问题!

推荐一个数字IC/fpga设计深度入门课:http://bbs.eetop.cn/thread-854132-1-2.html
(以上来自eetop某作者)

以下为转载:

满足Verilog语法的设计并不一定能够综合,因为Verilog本质上描述的是硬件,因此应该转变思维,只有立足于实际电路而不是语法,设计的功能才能够综合并落地;
硬件描述语言:Verilog本质上是硬件描述,设计的本质仍是硬件设计。因此必须始终记住您正在使用寄存器传输语言(RTL)来合成推断硬件,心中有电路。Verilog HDL几乎可以做任何事情,但是满足语法要求的描述不一定能够综合。 因为进行综合设计时,代码必须映射到FPGA上的可用硬件。

触发器与always@()语句:
    FPGA中很常见的器件就是触发器;触发器是一个具有一个时钟且仅对该时钟的一个边缘敏感的器件。 因此,当灵敏度列表为always@(posedge clk)形式时,综合工具只能映射到此设备。 我们有触发器的变种,即可以进行异步预置/清除的触发器,其将映射到always@(posedge clk或<posedge / negedge> rst)语句。
    即实际存在的触发器只有两种:一种只对一个时钟边沿敏感;另一种除对一个时钟边沿敏感外,还有一个异步控制端;
    这就意味着,always@()中最多只能有一个时钟边沿项;双时钟沿触发虽然语法无误,但是无法综合;因为实际中压根就不存在这样的原件,虽然仿真无误,但是综合成对应电路时就会暴露出这一问题;

如之前奇分频电路的实现:奇偶分频电路设计
实现1:上升沿分频,下降沿移位,后两者相或方式
实现2:双边沿计数取反方式(实际是不能综合的)
两种方式均有双边沿触发问题,注意Verilog描述是否能够综合;

参考

感谢前辈大神Reborn Lee在博客中的精彩讲解,原文如下:
【 Verilog 】always@()的敏感源中为什么不能双边沿触发?为什么不能双时钟触发?

</article>

满足Verilog语法的设计并不一定能够综合,因为Verilog本质上描述的是硬件,因此应该转变思维,只有立足于实际电路而不是语法,设计的功能才能够综合并落地;
硬件描述语言:Verilog本质上是硬件描述,设计的本质仍是硬件设计。因此必须始终记住您正在使用寄存器传输语言(RTL)来合成推断硬件,心中有电路。Verilog HDL几乎可以做任何事情,但是满足语法要求的描述不一定能够综合。 因为进行综合设计时,代码必须映射到FPGA上的可用硬件。

触发器与always@()语句:
    FPGA中很常见的器件就是触发器;触发器是一个具有一个时钟且仅对该时钟的一个边缘敏感的器件。 因此,当灵敏度列表为always@(posedge clk)形式时,综合工具只能映射到此设备。 我们有触发器的变种,即可以进行异步预置/清除的触发器,其将映射到always@(posedge clk或<posedge / negedge> rst)语句。
    即实际存在的触发器只有两种:一种只对一个时钟边沿敏感;另一种除对一个时钟边沿敏感外,还有一个异步控制端;
    这就意味着,always@()中最多只能有一个时钟边沿项;双时钟沿触发虽然语法无误,但是无法综合;因为实际中压根就不存在这样的原件,虽然仿真无误,但是综合成对应电路时就会暴露出这一问题;

如之前奇分频电路的实现:奇偶分频电路设计
实现1:上升沿分频,下降沿移位,后两者相或方式
实现2:双边沿计数取反方式(实际是不能综合的)
两种方式均有双边沿触发问题,注意Verilog描述是否能够综合;

参考

感谢前辈大神Reborn Lee在博客中的精彩讲解,原文如下:
【 Verilog 】always@()的敏感源中为什么不能双边沿触发?为什么不能双时钟触发?

猜你喜欢

转载自blog.csdn.net/weixin_43274923/article/details/122301617
今日推荐