初识 Verilog HDL , 什么是verilog HDL?

简介: 这是一篇关于Verilog HDL的学习笔记摘要。Verilog是一种硬件描述语言,用于数字系统的多层抽象设计,包括行为、数据流和结构。设计流程包括功能设计、Verilog描述、软件模拟、逻辑综合和硬件实现。模块是Verilog的基本单元,代表逻辑实体,通过并行运行和分层连接实现复杂系统。模块包含端口列表和定义,通过模块调用(实例化)实现子模块连接。Verilog的参数声明和预处理指令(如`define、`include和`timescale)增加了代码的可读性和灵活性。笔记指出Verilog与C语言有相似之处,易于学习。

2010年学习FPGA编程时候,写的读书笔记。 搬运到这里。




什么是verilog HDL?

      verilog是一种硬件描述语言,可以在算法级、门级到开关级的多种抽象设计层次上对数字系统建模。它可以描述设计的行为特性、数据流特性、结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。此外,verilog提供了编程语言接口,通过该接口用户可以在模拟、验证期间从外部访问设计,包括模拟的具体控制和运行。

      verilog不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用verilog仿真器进行验证。verilog从C语言中继承了多种操作符和结构,所以从结构上看两者有很多相似之处。

设计流程:功能设计-->用verilog描述电路-->软件模拟与仿真-->考察结果--->逻辑综合-->代码下载到硬件电路--->完成。

1. 基本机构

1.1 模块

      模块(module)是verilog最基本的概念,也是v设计中的基本单元。每个v设计的系统都是由若干模块组成的。

A:模块在语言形式上是以关键词module开始,以关键词endmodule结束的一段程序。

B:模块的实际意义是代表硬件电路上的逻辑实体。

C:每个模块都实现特定的功能。

D:模块的描述方式有行为建模和结构建模之分。

E:模块之间是并行运行的。

F:模块是分层的,高层模块通过调用、连接低层模块的实例来实现复杂的功能。

G:各模块连接完成整个系统需要一个顶层模块(Top-module)。

无论多么复杂的系统,总能划分成多个小的功能模块。因此系统的设计可以按照下面三个步骤进行:

(1)把系统划分成模块;

(2)规划各模块的接口;

(3)对模块编程并连接各模块完成系统设计。

模块的结构是这样的:

module <模块名>(<端口列表>);

<定义>

<模块条目>

endmodule

其中:

模块名是模块唯一的标识符;

端口列表是输入、输出和双向端口的列表,这些端口用来与其他模块进行连接。

定义 则是一段程序,用来指定数据对象为寄存器型、存储器型、线型以及过程块,诸如函数块和任务块;

模块条目 也是一段程序,将上面定义的东东和端口组合起来,是说明这个模块要做什么的语句;

标识模块结束的endmodule之后没有分号。

需要注释时,用//即可,这和c语言一样。

1.2 模块的调用

     在做模块划分时,通常会出现这种情形:某个大的模块中包含了一个或多个功能子模块。verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的。下面是通过两个NAND门实现一个与门的代码:

module AND(in1, in2, out);

input in1, in2;

output out;

wire w1;                                   //一个模块内部连线

NAND NAND1(in1, in2, w1);      //调用(实例化)一个NAND子模块

NAND NAND2(w1, w1, out);      //调用(实例化)一个NAND子模块

endmodule                                 //AND模块结束

调用模块实例的一般形式为:

<模块名><参数列表><实例名>(<端口列表>);

其中参数列表是传递到子模块的参数值,参数传递的典型应用是定义门级时延。

1.3 测试模块

2. 程序设计基础

    Verilog其实是最容易学会的一种编程语言,因为它的结构和语法都比较简单而且和C语言相似。

2.1 参数声明

    程序中经常多次出现某些数字,如延迟时间或变量的宽度,有时可能要改变这些值,这种情况下经常要用到参数。参数一经声明,就视其为一个常量,在整个仿真过程中不再改变。

parameter LINELENGTH = 132, ALL_X_S = 16'bx;

parameter BIT = 1, BYTE = 8, PI = 3.14;

parameter STROBE_DELAY = (BYTE+BIT)/2;

使用参数可以提高程序的可读性,也利于修改。

2.2 预处理指令

和C相似,V也有预处理指令,不过它的预处理指令以反引号“`”开头。

(1)`define和`undef :前者相当于C中的#define,后者取消`define所做的定义。

(2)`ifdef、`else和`endif :这三个编译器指令通常一起出现,和普通的if-else结构类似,这些编译器指令用于条件编译。

(3)`include

这个`include要注意一下,它用于嵌入“内嵌文件”的内容,这里的内嵌文件通常也是verilog文件。如下所示,在文件adder.v中有如下内容:

`include "../../halfaddr.v"

module adder;

...........

endmodule

在编译时,adder.v中的`include这一行将由halfadder的内容代替。

(4)`timescale

在Verilog模型中,所有时延都用单位时间表示。`timescale编译器指令定义时延单位和时延精度,其格式为:

`timescale time_unit / time_precision

其中,time_unit和time_precision由值1、10和100以及单位s、ms、us、ns、ps和fs组成。前者定义了时延单位,后者定义了时延精度。

当设计中多个模块带有自身的`timescale编译指令时会发生什么呢?在这种情况下,模拟器总是定位在所有模块的最小时延精度上,并且所有时延都相应的换算成最小的时延精度。

小结一下:

这一章比较简单,其实verilog与C语言有许多相通之处,所以学习并掌握这种语言应该不是特别困难。

相关文章
|
芯片
计算机组成原理实验二 存储器实验(上)
计算机组成原理实验二 存储器实验
1724 0
|
12月前
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
21255 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
18天前
|
人工智能 弹性计算 安全
Hermes Agent 爆火!部署教程 + 与 OpenClaw 核心差异全解析
2026年爆火的Hermes Agent是由Nous Research推出的开源自主智能体,主打“自我进化”:具备跨会话持久记忆、自动创建并优化技能、内置安全沙箱与定时调度。相比OpenClaw的强执行弱学习,Hermes真正实现“越用越聪明”。阿里云计算巢支持一键部署,开箱即用。
438 0
|
数据采集 XML JavaScript
Python爬虫:从人民网提取视频链接的完整指南
Python爬虫:从人民网提取视频链接的完整指南
|
机器学习/深度学习
神经网络与深度学习---验证集(测试集)准确率高于训练集准确率的原因
本文分析了神经网络中验证集(测试集)准确率高于训练集准确率的四个可能原因,包括数据集大小和分布不均、模型正则化过度、批处理后准确率计算时机不同,以及训练集预处理过度导致分布变化。
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
670 10
|
机器学习/深度学习 PyTorch TensorFlow
DGL(0.8.x) 技术点分析
DGL是由Amazon发布的图神经网络开源库,支持TensorFlow、PyTorch和MXNet。DGL采用消息传递范式进行图计算,包括边上计算、消息函数、点上计算、聚合与更新函数等。其架构分为顶层业务抽象、Backend多后端适配、Platform高效计算适配以及C++性能敏感功能层,确保高效、灵活的图神经网络开发。
|
机器学习/深度学习 人工智能 自然语言处理
大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解
|
网络协议 安全
QT多线程
本文详细介绍了在Qt中如何正确使用QThread以及信号槽跨线程的使用方式,包括线程的正确退出方法和QObject在不同线程中创建子对象时可能遇到的问题。同时,文章还提供了相关博客和资料的链接,用于进一步学习和参考。
468 3
|
存储 算法 异构计算
m基于FPGA的多功能信号发生器verilog实现,包含testbench,可以调整波形类型,幅度,频率,初始相位等
使用Vivado 2019.2仿真的DDS信号发生器展示了正弦、方波、锯齿波和三角波的输出,并能调整幅度和频率。DDS技术基于高速累加器、查找表和DAC,通过频率控制字和初始相位调整产生各种波形。Verilog程序提供了一个TEST模块,包含时钟、复位、信号选择、幅度和频率控制输入,以生成不同波形。
656 18

热门文章

最新文章