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

news2024/11/24 2:50:46

无论是学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,就尽可能使用非阻塞性赋值(<=)。

(6)if语句与case语句
这两个语句比较简单,相信看过c代码的人都了解,我就不再一一讲述。

Verilog学习的过程

学习的过程,每个人都不太相同。首先是软件的使用,比如QuartusII的使用应该放在所有的学习之前(学过数字电路的同学,如果没有学过的话,先把一些基本概念学一下,在学习到《数字逻辑基础与VERILOG设计》的时候开始用原理图设计的方法学习使用该软件),然后就是学习Verilog了,建议在学习的过程中把书中的例子都用软件做一次,也利用Quartus提供的仿真功能进行仿真。

基本的语法知识学习的同时,书上很多仿真的例子在Quartus里面并不能实行,这个时候就需要学习使用ModelSim了。进一步学习Verilog的高级编程知识,利用软件多做一些例子程序。

书看的差不多的时候,就可以到板子上编一些实际的应用程序了。参考电路板上的硬件,针对不同的部件进行编程和验证。

然后就是根据自己的兴趣爱好和专业方向,找一个题目用Verilog去实现,这个过程中需要学习更多其他方面的知识,这样才能做成真正的应用系统。

这个时候可能手上的CPLD的资源可能就不那么够了,也许就该用FPGA来做了。此外FPGA和CPLD还是有区别的,两个器件应用的场合有所不同,这个在学习的过程中也要逐步积累这些知识和经验。此外,还可以学习一些SOC方面的知识,这里不仅仅是指的Nios II。

需要注意的是学习是一辈子的事情,不是花上那么几个月你就能把所有的技能学到手,更多的时候是通过实践不断提升自己的能力。

想要获取更多学习资料,可以私信留言。学习之路上,IC修真院与你同行!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于AVDTP信令分析蓝牙音频启动流程

前言 公司项目edifier那边需要在原来音频SBC,AAC基础上增加LHDC5.0编码&#xff0c;在打通lhdc协议栈之前&#xff0c;学习记录一番AVDTP音频服务流程。 一、AVDTP音频流基础知识 分析音频流程首先应具备的最简单基础概念知识&#xff1a;AVDTP信令signal&#xff0c;流端点se…

【JVM】垃圾回收机制详解(GC)

目录一.GC的作用区域二.关于对象是否可回收1.可达性分析算法和引用计数算法2.四种引用类型三.垃圾收集算法1.标记-清除算法2.复制算法3.标记-整理算法4.分代收集算法四.轻GC(Minor GC)和重GC(Full GC)一.GC的作用区域 可以看jvm详解之后&#xff0c;再来理解这篇文章更好 堆和…

[附源码]计算机毕业设计农村人居环境治理监管系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ASP.NET Core 3.1系列(18)——EFCore中执行原生SQL语句

1、前言 前一篇博客介绍了EFCore中常见的一些查询操作&#xff0c;使用Linq或Lambda结合实体类的操作相当方便。但在某些特殊情况下&#xff0c;我们仍旧需要使用原生SQL来获取数据。好在EFCore中提供了完整的方法支持原生SQL&#xff0c;下面开始介绍。 2、构建测试数据库 …

Radare2 框架介绍及使用

Radare2 框架介绍及使用 欢迎入群交流 radare2 这是整个框架的核心工具&#xff0c;它具有debugger和Hexeditor的核心功能&#xff0c;使您能够像打开普通的文件一样&#xff0c;打开许多输入/输出源&#xff0c;包括磁盘、网络连接、内核驱动和处于调试中的进程等。 它实现了…

旧版本金庸群侠传3D新Unity重置修复版入门-lua”脚本“

金庸3DUnity重置入门系列文章 金庸3dUnity重置入门 - lua 语法 金庸3dUnity重置入门 - UniTask插件 金庸3dUnity重置入门 - Cinemachine 动画 金庸3dUnity重置入门 - 大世界实现方案 金庸3dUnity重置入门 - 素材极限压缩 (部分可能放到付费博客&#xff09; 2022年底~20…

Apifox和Eolink两个测试工具谁最实用?

目前行业内有 postman、jmeter 为代表开源 Api 工具派系&#xff0c;我想对大家对这两个词并不陌生。虽然它们能解决基本的接口测试&#xff0c;但是无法解决接口链路上的所有问题&#xff0c;一个工具难以支持整个过程。在国内&#xff0c;我们可以看到有国产 API 管理工具&am…

Spring Cloud 微服务讲义

Spring Cloud 微服务讲义第一部分 微服务架构第 1 节 互联网应用架构演进第 2 节 微服务架构体现的思想及优缺点第 3 节 微服务架构中的核心概念第二部分 Spring Cloud 综述第 1 节 Spring Cloud 是什么第 2 节 Spring Cloud 解决什么问题第 3 节 Spring Cloud 架构3.1 Spring …

CCES软件做开发,如果仿真器连不进目标板怎么解决?(Failed to connect to processor)

ADI的DSP调试&#xff0c;我在Visual DSP软件下写过一个详细的帖子&#xff0c;来说明仿真器如果连不进目标板&#xff0c;可能存在的几种问题以及解决办法&#xff0c;现在在CCES软件下遇到了同样的问题&#xff0c;所以准备再写一个帖子说明一下。 我们都知道ADI的DSP&#…

智慧工地管理平台系统厂家哪家强|喜讯科技

喜讯科技针对施工现场涉及面广&#xff0c;多种元素交叉&#xff0c;状况较为复杂&#xff0c;如人员出入、机械运行、物料运输等工程项目管理在一定程度上存在着决策层看不清、管理层管不住、执行层做不好的问题。 围绕施工现场管理&#xff0c;构建全方位的智能监控防范体系弥…

Redis——Linux下安装以及命令操作

一、概述 redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 是一款高性能的NOSQL系列的非关系型…

每日一题:冒泡排序

每日一题&#xff1a;冒泡排序每日一题:冒泡排序第一种写法&#xff1a;第二种写法&#xff1a;每日一题:冒泡排序 冒泡排序是八大排序中较为简单的一种&#xff0c;具体详细可见&#xff1a;冒泡排序_百度百科 (baidu.com) 我们重点来看冒泡排序的步骤&#xff1a; 冒泡排序…

程序员如何写游戏搞钱?

ConcernedApe&#xff0c;一个叫做Eric Barone的程序员研发了一款叫做星露谷的小游戏&#xff0c;以乡村经营生活为核心&#xff0c;打造了一个虚拟的小世界&#xff0c;在这个小世界&#xff0c;你可以种植农作物&#xff0c;经营农场并挖矿钓鱼。 其中钓鱼的玩法是十分新颖的…

Git常见问题

1.拉取的项目很大&#xff0c;如1G以上&#xff0c;此时报错early EOF 具体报错如下&#xff1a; Cloning into csp-doc... remote: Counting objects: 6061, done. remote: Compressing objects: 100% (4777/4777), done. error: RPC failed; curl 18 transfer closed with …

Spring - FactoryBean扩展实战_MyBatis-Spring 启动过程源码解读

文章目录PrePreMyBatis-Spring 组件扩展点org.mybatis.spring.SqlSessionFactoryBeanInitializingBean扩展接口 afterPropertiesSetFactoryBean 扩展接口 getObjectApplicationListener扩展接口 onApplicationEvent扩展点org.mybatis.spring.mapper.MapperFactoryBeanSqlSessio…

【Linux基本命令归纳整理】

Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。严格来讲&#xff0c;Linux 这个词本身只表示 Linux 内核&#xff0c;但实际上人们已经习惯了用 Linux 来形容整个基于 Linux 内核&…

Day40——Dp专题

文章目录三、01背包8.分割等和子集9.最后一块石头的重量 II10.目标和11. 一和零三、01背包 8.分割等和子集 题目链接&#xff1a;416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;我们构造两个子集使得两个子集的和相等&#xff0c;其实就是让我…

JavaScript:初始JS 以及 基础语法

前端三件套&#xff1a; HTML: 生成网页控件 例如&#xff1a;生成 文本框 多选框 下拉列表 等 (人的身体) CSS: 修饰网页上的控件 例如&#xff1a;修饰文本框为圆形 &#xff08;人的衣服&#xff09; JavaSript: 在这些控件上添加逻辑 例如&#xff1a;获取文本框的值 然…

哈工大体系结构lab3 —— 流水线处理器的verilog实现

流水线处理器的verilog实现 是的我刚刚验收完最后一个实验&#xff0c;所以怀着激动的心情&#xff0c;把当时其中一个留档的代码发出来&#xff0c;还算较为清晰&#xff0c;仅供没有思路的同学参考。造完cache&#xff0c;我的生活终于可以恢复正轨了&#xff0c;这几天折磨的…

web安全之SQL盲注的靶场练习和分析

目录 SQL盲注-报错回显盲注 SQL盲注-时间盲注 SQL盲注-布尔盲注 SQL盲注-报错回显盲注 在burp里面进行动态抓包&#xff0c;判断符号闭环&#xff0c;如图明显为闭环 列数3时报错&#xff0c;判断当前列数为2 强行报错注入 &#xff0c;如图获取到版本号 uname1212 unio…