Verilog入门学习笔记:Verilog基础语法梳理 您所在的位置:网站首页 语法知识梳理怎么写 Verilog入门学习笔记:Verilog基础语法梳理

Verilog入门学习笔记:Verilog基础语法梳理

2024-06-30 17:40| 来源: 网络整理| 查看: 265

无论是学IC设计还是FPGA开发,Verilog都是最基本、最重要的必备技能。但任何一门编程语言的掌握都需要长期学习。并不是简简单单的随便读几本书,随便动动脑筋那么简单。Verilog是一门基于硬件的独特语言,由于它最终所实现的数字电路,具备着硬件与生俱来的并行性,所以Verilog的设计思想与思维方式和绝大多数基于软件的编程语言截然不同。

什么是Verilog?

Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。

Verilog 继承了 C 语言的多种操作符和结构,与另一种硬件描述语言 VHDL 相比,语法不是很严格,代码更加简洁,更容易上手。

Verilog 不仅定义了语法,还对语法结构都定义了清晰的仿真语义。因此,Verilog 编写的数字模型就能够使用 Verilog 仿真器进行验证。

在这里插入图片描述

Verilog的用途

Verilog的主要应用包括: – ASIC和FPGA工程师编写可综合的RTL代码 – 高抽象级系统仿真进行系统结构开发 – 测试工程师用于编写各种层次的测试程序 – 用于ASIC和FPGA单元或更高层次的模块的模型开发

学习VerilogHDL之前必须学习数字电路相关的知识。比如数字逻辑、微机原理(硬件)、电路分析、模拟电路(初级)这些。后续学一点数字信号处理的课程是有益的补充。再往前的基础就到高中的电学知识了。

在Verilog编程中需要注意以下几点:

所有的Verilog程序都以Module(模块、组件)的方式存在,一个简单的逻辑可以由一个Module组成,复杂的逻辑可以包含多个Modules,每个Module有独立的功能,并由输入、输出端口被其它module调用。通过Module的方式可以将一些比较独立、可以复用的功能进行模块化,代码阅读起来也比较直观;

Verilog的信号分为wire和register两种类型,wire可以看成直接的连接,而register具有对某一个时间点状态进行保持的功能,因此在设计逻辑的时候要明确定义每个信号是wire还是reg属性;

并行执行:Verilog描述的主要是硬件而不是软件,因此也就意味着其描述的各个功能之间可以并行执行,比如在你的设计中你有3个计数器,每一个计数器都连接到不同的时钟上,这是没有问题的,每一个时钟都干自己的事。不像MCU,只有一个线程按照顺序执行。 在这里插入图片描述

基础Verilog语法

Verilog语法比较多,但我们常用的也就那么几种,简单在此罗列一下。

(1)module(建议一个.v文件只写一个module) module “.v文件名”( “port” ); “用户Verilog程序” endmodule module模块,从软件思想上,可以理解为函数,顶层文件module就是主函数,其他文件module就是被主函数调用的函数。从硬件思想上,可以理解为电路板,顶层文件为电路主板,其他文件是从板,module中的“port”就是主从板之间的跳针。

(2)Port定义 Port有三种类型,input、output、inout。很好理解,input就是外部进入module的信号,output就是module输出到外部的信号,inout表示这个端口既能接收外部信号,也能向外部发出信号。 Port在module中的定义有多种,我们在这里只介绍一种。

(3)内部变量声明 Verilog内部变量有两种:wire型和reg型。 其中wire型变量可以理解成电路板中的布线,reg型变量可以理解成电路板中的电阻元件或者电容元件等。

(4)assign语句 assign语句可以给wire型变量赋值。 例如: wire out ; reg in ; assign out = 0; ///assign out = in; 上面语句表示给out变量接地,//这一行后面的东西都表示注释,表示将寄存器in的值赋值给out变量。

(5)always语句 always语句经常给reg型变量赋值,内部经常有if语句和case语句,我觉得可以理解成一块电路板上的芯片元件。

out_reg为reg型变量,这个always模块可以理解成一个6bit的加法器。上述语句的总体意思为:在osc_clk这个信号上升沿的时候进行判定,若rst_n = 0,则out_reg = 0;否则,out_reg = in1 + in2。 其实always语句里还有涉及到阻塞性赋值和非阻塞性赋值的问题,这里我建议新手只要遇到always,就尽可能使用非阻塞性赋值(



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有