verilog 新手导航

本文是针对Verilog初学者的导航,强调将其视为硬件描述语言的重要性。介绍了不可合成的代码如延迟和for循环,强调分清时序电路与组合电路的区别,并给出了编写可合成代码的建议,如在if和case语句中使用else和default,避免组合电路中的反馈。此外,还提醒注意变量声明、位拼接运算符的使用以及部分初始化的问题。
摘要由CSDN通过智能技术生成

写在前面

verilog不同于其他编程语言,它是一种硬件描述语言。我在verilog的学习中、烧板中走过了许多弯路。

试过写个简单的ALU花了15h+的时间,几天几夜debug无数次。也试过写学号循环,仿真通过了,烧板时灯完全不亮。期间各种google和stackoverflow,最终才渐渐地对verilog有所感悟。

我略总结了几条准则,在写verilog时应该反复在心里确认。

把verilog看成硬件描述语言

简介

verilog这个语言的作用是描述硬件。因此在写代码时,应该反复确认代码能否与硬件构成一一对应的关系。

有些代码能够通过综合(synthesis)和仿真(simulation),但在烧板时却无法达到预期的效果。烧板无法达到预期的代码,称为不可合成的代码(non-systhesizable),这些代码没有真正地”描述“硬件如何工作,无法根据代码产生对应的硬件。

烧板能正确工作的代码,称为可合成代码(synthesizable)。下面我们会讨论如何写出正确的可合成的代码。

写出可合成代码的诀窍是,时刻把verilog看成描述硬件的语言
下面简单举几个例子

延时(delay)不可合成

下列代码

    reg [20:0]cnt = 0;
    always begin
        #1000000;
        cnt = cnt + 1;
    end

在时间单位是1ns的情况下,他企图每1ms增加cnt的值。然而在烧板时它无法正确工作。

试想一下,作者希望延迟 10<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值