初识 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语言有许多相通之处,所以学习并掌握这种语言应该不是特别困难。

相关文章
|
存储 机器学习/深度学习 监控
物联网平台常见类别及对应平台(二)
物联网平台常见类别及对应平台(二)
638 21
|
物联网 智能硬件
物联卡如何选择
选择物联卡需综合考量设备类型与数量、流量需求及卡种特性。明确设备属性后,挑选适宜流量套餐,并了解普通物联网卡、语音卡、NB-IoT卡及陶瓷卡等不同类型的应用场景。同时考虑网络覆盖、服务质量及成本预算,优选性价比高且售后服务完善的运营商,确保物联卡兼容设备并顺利完成实名认证。
物联卡如何选择
|
存储 JSON 物联网
设备管理组件功能介绍
设备管理组件功能介绍
640 2
|
监控 安全 物联网
物联卡安全问题
物联卡安全性涵盖技术、管理和使用安全。技术上,通过专用通道和加密技术保障数据传输安全;管理上,实施实名认证与风险防控措施;使用中需合规操作、警惕诈骗并定期检查更新。尽管如此,仍需防范管理漏洞、诈骗及非法流量风险,确保安全运行。
|
人工智能 监控 算法
基于蓝牙iBeacon定位技术与3DCIS技术的室内定位导航系统,助力智慧空间管理
**维小帮室内定位导航系统**采用3D可视化、蓝牙iBeacon、AI路径规划及物联网技术,提供精准室内导航。系统支持3D/AR导航、实时定位、电子围栏功能,广泛应用于商场、医院、办公楼和园区,提升用户体验并优化管理。例如,商场中的精准营销,医院的智能导诊,办公楼的效率提升,园区的综合管理。通过智能路径规划,确保用户在复杂环境中无碍通行。
745 1
基于蓝牙iBeacon定位技术与3DCIS技术的室内定位导航系统,助力智慧空间管理
|
数据可视化 定位技术 vr&ar
商场3D楼层导视软件功能详解与实施效益
**维小帮3D楼层导视软件**提供创新的商场导航体验:3D地图清晰呈现楼层布局,跨楼层导航智能规划路径;实时定位防止迷路;AR实景导航增强沉浸感;广告推送及可视化招商平台助力商业运营。软件结合VR、AR技术,优化顾客导航,促进营销,实现智慧化管理与招商,引领商场服务升级。
795 1
商场3D楼层导视软件功能详解与实施效益
|
人工智能 自然语言处理 小程序
政务VR导航:跨界融合AI人工智能与大数据分析,打造全方位智能政务服务
政务大厅引入智能导航系统,解决寻路难、指引不足及咨询台压力大的问题。VR导视与AI助手提供在线预览、VR路线指引、智能客服和小程序服务,提高办事效率,减轻咨询台工作,优化群众体验,塑造智慧政务形象。通过线上线下结合,实现政务服务的高效便民。
466 2
政务VR导航:跨界融合AI人工智能与大数据分析,打造全方位智能政务服务
|
消息中间件 分布式计算 网络协议
从管道路由到共享内存:进程间通信的演变(内附通信方式经典面试题及详解)
进程间通信(Inter-Process Communication, IPC)是计算机科学中的一个重要概念,指的是运行在同一系统或不同系统上的多个进程之间互相发送和接收信息的能力。IPC机制允许进程间共享数据、协调执行流程,是实现分布式系统、多任务操作系统和并发编程的基础。
355 1
从管道路由到共享内存:进程间通信的演变(内附通信方式经典面试题及详解)
|
存储 C语言 索引
【实战编程】学生信息管理系统:一键实现数据插入、智能排序、精准查询与成绩统计(附完整源码,即学即用!)
结构体数组是C语言中一种复合数据类型,它结合了结构体的灵活性和数组的有序集合特性,允许你定义一组具有相同结构的数据项。结构体定义了一组不同数据类型的变量集合,而结构体数组则是这种结构的连续内存块,每个元素都是该结构类型的实例。这种方式特别适合管理具有相似属性的对象集合,如学生信息、员工记录等。
299 1
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
674 1