Verilog初级教程(2)Verilog HDL的初级语法

前言

学习Verilog和学习任何一门编程语言一样,都需要从语法开始,不会语法去学习设计是几乎不可能的,当然从另一门类似语言转来的除外(例如VHDL是你的第一门硬件描述语言)。学会了语法不懂硬件思维也不可以,因为你不能使用软件思维来设计硬件电路。

本系列其他博文:

Verilog初级教程(1)认识 Verilog HDL

初学者值得一读的博文:

FPGA/ASIC初学者应该学习Verilog还是VHDL?

Verilog以及VHDL所倡导的的代码准则

FPGA基础知识极简教程(2)抛却软件思维去设计硬件电路

本文以极简的风格来谈谈这一篇博文的话题,verilog中的初级语法。

正文

注释

Verilog提供了两种注释的方式,分别为:

  • 单行注释
//This is a single line comment

当然,你这样写也可以:

/// This is Okay!

这是因为双斜杠后面的都是注释!

  • 多行注释
/* this is a
multiple line 
comments!
*/ 

空格

verilog中的空格是起到缩进的作用,基本没有什么要求,你可以使用TAB键,空格键,回车键在代码中的任何位置,它几乎会被语法忽略,但是为了代码的可读性,还是建议遵守一定的规则。

注:空格在字符串中不会被忽略!

例如:

always@(*) begin
//--------
c = a + b;

adder inst_adder(
.i_a(i_a),
.i_b(i_b),
.o_dout(o_dout),
.o_sum(o_sum)
);

end

以美观易读为准,或者和公司标准保持一致,做个正常人。

操作符

操作符分为三种,本文不详细展开:

  • 一元运算符应显示在其操作数的左侧
  • 二进制运算符应出现在其操作数之间
  • 条件运算符有两个单独的运算符,它们将三个操作数分开

例如:

//一元操作符
b = ~a;
//二元操作符
assign c = a & b;
//条件操作符
assign z = en ? a : b;

数字格式

我们最常见的数字表示为十进制,然而,数字还可以表示为二进制,八进制,以及十六进制等,其中二进制和十六进制较为常见。
默认情况下,Verilog仿真器会把数字默认为十进制,除非你使用特定的格式告诉它,你使用的是二进制,八进制或者十六进制。
例如:

3'b001;

3表示的是这个数字有多少位;b表示的是进制,这里表示的是二进制,八进制用o来表示,十六进制用h,十进制用d,当然如果不写进制,而默认为十进制。
例如:

reg [3:0] b = 10;
则b被初始化为十进制10;

如下分别为二进制,十六进制,八进制以及十进制的表示方法:

```c
3'b001; // this is binary
8'ha0; // this is hexadecimal
6'o12; // this is octal
4'd15; // this  is decimal

Verilog 2001标准更新了一些用法,例如可以省去位宽也可以:

initial begin
a = 'b001; // this is binary
b = 'ha0; // this is hexadecimal
c = 'o12; // this is octal
d = 'd15; // this  is decimal

end

这时,编译器会根据左边变量的位宽来自动扩展右边数值或者截位后赋值给左边。

还有需要注意的是,如果需要给一个有符号reg型变量赋值一个负数值,如何表达呢?
如下:

reg signed [7:0] a = -8'd21;

也就是说,负号必须放在位数的前面,如下这种写法就是错误的:

8'd-4;            // Illegal

参考:算术运算的RTL代码规则总结

字符串

Verilog中的字符串使用场景大多数是在仿真时使用,它由双引号包裹着(位于双引号之间)。字符串中的一个字符使用一个字节来存储。

"Hello World!"        // String with 12 characters -> require 12 bytes
"x + z"               // String with 5 characters

字符串中的字符不能分割成多行来写,如下是不合规的:

"How are you
feeling today ?"      // Illegal for a string to be split into multiple lines

标识符

标识符就是变量的名字以及模块的名字,它们可以有大小写字母,数字,美元符号,下划线构成,但是美元符号$以及数字不能作为标识符的开头,如下:

integer var_a;        // Identifier contains alphabets and underscore -> Valid
integer $var_a;       // Identifier starts with $ -> Invalid
integer v$ar_a;       // Identifier contains alphabets and $ -> Valid
integer 2var;         // Identifier starts with a digit -> Invalid
integer var23_g;      // Identifier contains alphanumeric characters and underscore -> Valid
integer 23;           // Identifier contains only numbers -> Invalid

关键字

关键字是保留用于定义语言结构的特殊表示符,用小写字母表示,每一种语法都有其关键字,Verilog语法也不例外,你在给模块以及变量命名的时候应该避开这些关键字:

verilog中的关键字

verilog修订

多年来,Verilog进行了一些修订,从1995到2001年进行了更多的添加,如下图:

Verilog修订对比

写在最后

参考资料

我的微信公众号:FPGA LAB

我的知乎二维码 :
知乎二维码

我的同行邀请

  • 20
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 对于华为Verilog HDL入门教程的下载,您可以按照以下步骤进行操作: 1. 打开您的网络浏览器,并访问华为官方网站。 2. 在网站的搜索框中输入“华为Verilog HDL入门教程”。 3. 单击搜索按钮,系统会显示与您搜索相关的结果。 4. 从搜索结果中选择与您需求最符合的教程链接,并单击进入。 5. 在页面上找到下载链接或指示,可能是以PDF或文本文件的形式提供。 6. 单击下载链接,并等待下载完成。 请注意,华为官方网站是最可靠和安全的资源来源,确保您从该网站下载教程。此外,您可能需要通过华为账户进行登录或注册,然后才能下载教程。 如果以上步骤不适用或无法找到相关教程,请您尝试通过其他渠道获取帮助。您可以到华为官方论坛、技术社区或与华为客服联系,以获取更多关于Verilog HDL入门教程的信息和支持。 ### 回答2: 华为Verilog HDL入门教程可以在华为官方网站上进行下载。以下是下载教程的步骤: 1. 打开浏览器,访问华为官方网站(www.huawei.com)。 2. 在网站首页的搜索栏中输入“华为Verilog HDL入门教程”。 3. 在搜索结果中找到与入门教程相关的链接。 4. 点击链接进入教程页面。 5. 浏览页面,找到下载按钮或链接。 6. 点击下载按钮或链接,选择下载到您的计算机或设备上的位置。 7. 根据提示完成下载过程。 请注意,华为官方网站通常提供多种语言的下载选项,您可以选择适合您的语言版本进行下载。 通过下载华为Verilog HDL入门教程,您将有机会学习到使用Verilog HDL进行硬件设计的基本知识和技巧。这个教程将引导您了解Verilog HDL的基本语法、模块化设计、时序和组合逻辑等概念。同时,教程还提供了一些示例代码和案例,帮助您更好地理解和应用所学内容。 通过学习华为Verilog HDL入门教程,您将能够掌握Verilog HDL的基础,从而能够进行更复杂的硬件设计和开发。无论您是从事硬件设计的工程师,还是对硬件设计有兴趣的初学者,这个教程都会为您提供一个很好的起点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值