FPGA学习篇——Verilog学习3(关键字+注释方法+程序基本框架)

1 Verilog常用关键字

大概知道以下哪些是关键字就好,如何使用还是得在编写代码中来学习。

2 Verilog注释方法

Verilog有两种注释方式:

2.1 “ // ”

单行。

2.2 “ /*  ...  */ ”

可扩展多行。

3 Verilog程序基本框架

Verilog 的基本设计单元“模块”( block),模块就类似于C语言中的函数

每个Verilog程序包括4个主要的部分端口定义IO说明内部信号声明逻辑功能定义。

module  模块名字(端口定义);

    ...(IO说明)

    ...(内部信号声明)主要描述一些内部可能用到的信号,定义出来

    ...(逻辑功能描述)

endmodule

PS:其中,端口定义可以省略,或者说与IO说明合在一起(见例子1中abcd为端口定义),内部信号声明依具体情况而定也不一定存在。因此,其实一个模块主要的部分是:一部分描述接口(IO说明即端口说明),另一部分描述逻辑功能

3.1  例子1:

这个例子没有内部信号声明这一块,给出了对应的硬件电路图和模块图,比较简单易于理解。

 (1)看上图左侧图,为一个模块的程序:

  • module开始,endmodule结束。
  • IO说明(描述接口部分):红色框,用关键字input定义a,b为模块的输入;用关键字output定义a,b为模块的输出。
  • 逻辑功能定义(描述逻辑功能部分):绿色框,用关键字assign描述逻辑功能。

(2)看上图中间图和右侧图。

  • 中间图就可以看作是你编写的这个程序的模块描述接口的情况,一个黑匣子,输入为你定义的a、b,输出为你定义的c、d。
  • 右侧图就是描写的这个程序实现的硬件电路,程序中assign描述的就是ab连接一个或门,输出为c;ab连接一个与门输出为d。(注意,当程序编写的是可综合模块能够生成对应的硬件电路,不可综合的模块则不行,但可以在仿真中使用不可综合的模块程序。这个不太懂,后续学了再补)

3.2  例子2:

以上例子省略了端口定义这一部分

  • module开始,endmodule结束。
  • IO说明(描述接口部分):黄色框。
  • 内部信号声明:粉色框,这里定义了一个寄存器类型的计数器。
  • 逻辑功能定义(描述逻辑功能部分):蓝色框,这里有两个always,描述了两个逻辑功能。

3.3  总结:

以上两个例子,总结出Verilog程序框架的一些特点吧。

  • 每个Verilog程序包括4个主要的部分端口定义IO说明内部信号声明逻辑功能定义。
  • IO说明默认端口是wire类型,如果要改成reg类型,要写出来(如例子2程序中的output定义。)
  • 逻辑功能定义可多个,且多个逻辑功能是并行的,即例子2中的两个always逻辑功能段谁前谁后无所谓,是同时编译完成逻辑功能的,这和C语言不一样,C语言要强调顺序问题。

另外逻辑功能定义部分有三种方法。

1、assign语句描述组合逻辑。

2、always语句描述组合/时序逻辑。

3、例化实例元件(可理解为画出一个逻辑单元)

       比如这个例子就是先了一个二输入的与门。


PS:组合逻辑电路的输出仅取决于当前的输入状态,与电路之前的状态无关;时序逻辑电路的输出不仅取决于当前的输入,还受到电路原来状态的影响。


注:本文学习及图片来源于哔哩哔哩“正点原子”,如有侵权,请联系我,欢迎指正~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

扩展------项目中集成阿里云短信服务

引言 在当今数字化时代,短信服务在各种项目中扮演着重要角色,如用户注册验证、订单通知、营销推广等。阿里云短信服务凭借其稳定、高效和丰富的功能,成为众多开发者和企业的首选。本文将详细介绍如何在项目中集成阿里云短信服务,帮…

XHR请求解密:抓取动态生成数据的方法

在如今动态页面大行其道的时代,传统的静态页面爬虫已无法满足数据采集需求。尤其是在目标网站通过XHR(XMLHttpRequest)动态加载数据的情况下,如何精准解密XHR请求、捕获动态生成的数据成为关键技术难题。本文将深入剖析XHR请求解密…

STM32-I2C通信协议

目录 一:什么是I2C通信协议 二:I2C通信 三:I2C时序图 四:面试常见问题 一:什么是I2C通信协议 I2C(Inter-Integrated Circuit)协议是一种串口通信协议,用于在集成电路之间传输数…

Jenkins在Windows上的使用(一):用户配置

(一)下载jenkins和jdk 下载地址 https://www.jenkins.io/download/ jdk下载地址 https://www.oracle.com/java/technologies/downloads/安装jenkins的时候会提示需要的jdk版本(二)windows下创建用户账户 1. 创建jenkins用户 …

MQTT协议下温度数据上报观测云最佳实践

MQTT 介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的、基于发布/订阅模式的消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计,广泛应用于物联网(IoT&#xf…

立即释放 Mac 空间!Duplicate File Finder 8 重复文件高速清理工具

Duplicate File Finder 专业的 Mac 重复文件清理工具。查找并删除重复的文件、文件夹,甚至相似的照片。 不要让无用的文件占用磁盘上的宝贵空间。 整理你的 Mac。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…

一文对比RAGFLOW和Open WebUI【使用场景参考】

一、RAGFLOW与Open WebUI RAGFLOW是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不…

SpringBoot整合Caffeine本地缓存

本文章摘自 Java技术小馆https://www.yuque.com/jtostring/am5oq3/ac34uu2liy50t042?singleDoc#LyUGd 在现代的微服务架构中,缓存已经成为提升系统性能、降低数据库压力和提高响应速度的关键技术之一。对于Java开发者而言,Spring Boot作为一种开发框架…

腾讯 TDF 即将开源 Kuikly 跨端框架,Kotlin 支持全平台

今天,在腾讯的 Shiply 平台看 Flutter 动态化自研框架 Conch 时,在侧边栏看到了有「跨端开发框架」的介绍,点开发现有两个产品: Hippy:面向前端技术栈的跨端开发框架,Web原生开发体验,支持 Rea…

性能案例经验总结

数据库案例总结案例一:索引创建不合适导致性能问题背景接口getResourceByRoleID在单交易测试时,发现接口响应时间过长,DB 消耗资源比较严重。 关键字db2advis 、执行计划、runstat 、权限接口 问题分析首先是找出接口调用的SQL语句,有两个方法通过DB2top 命令 查找通过以下提…

【哇! C++】类和对象(三) - 构造函数和析构函数

目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数: 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有,简称为空类。 空类中…

分布式存储—— HBase数据模型 详解

目录 1.3 HBase数据模型 1.3.1 两类数据模型 1.3.2 数据模型的重要概念 1.3.3 数据模型的操作 1.3.4 数据模型的特殊属性 1.3.5 CAP原理与最终一致性 1.3.6 小结 本文章参考、总结于学校教材课本《HBase开发与应用》 1.3 HBase数据模型 在开始学习HBase之前非常…

WebSocket:实现实时通信的利器

在现代Web应用中,实时通信变得越来越重要。无论是聊天应用、在线游戏,还是实时数据推送,传统的HTTP请求-响应模式已经无法满足需求。WebSocket作为一种全双工通信协议,应运而生,成为实现实时通信的利器。本文将深入探讨…

Aruco 库详解:计算机视觉中的高效标记检测工具

1. 引言:Aruco 在计算机视觉中的重要性 在计算机视觉领域,标记(Marker)检测和识别是许多应用的基础,包括 机器人导航、增强现实(AR)、相机标定(Calibration)以及物体跟踪…

SQL_语法

1 数据库 1.1 新增 create database [if not exists] 数据库名; 1.2 删除 drop database [if exists] 数据库名; 1.3 查询 (1) 查看所有数据库 show databases; (2) 查看当前数据库下的所有表 show tables; 2 数据表 2.1 新增 (1) 创建表 create table [if not exists…

react中的fiber和初次渲染

源码中定义了不同类型节点的枚举值 组件类型 文本节点HTML标签节点函数组件类组件等等 src/react/packages/react-reconciler/src/ReactWorkTags.js export const FunctionComponent 0; export const ClassComponent 1; export const IndeterminateComponent 2; // Befo…

AutoGen学习笔记系列(七)Tutorial - Managing State

这篇文章瞄准的是AutoGen框架官方教程中的 Tutorial 章节中的 Managing State 小节,主要介绍了如何对Team内的状态管理,特别是如何 保存 与 加载 状态,这对于Agent系统而言非常重要。 官网链接:https://microsoft.github.io/auto…

Compose Multiplatform+Kotlin Multiplatfrom 第四弹跨平台

文章目录 引言功能效果开发准备依赖使用gradle依赖库MVIFlow设计富文本显示 总结 引言 Compose Multiplatformkotlin Multiplatfrom 今天已经到compose v1.7.3,从界面UI框架上实战开发看,很多api都去掉实验性注解,表示稳定使用了!…

[Java基础-线程篇]7_线程设计模式与总结

摘要:懒汉单例模式怎么变得线程安全?Master-Worker归并模式,工作窃取算法。Java线程相关源码使用了什么设计模式? 资料引用:《Java高并发核心编程卷2》 目录 线程安全的单例模式 Master-Worker模式 工作窃取算法 …

Kubermetes 部署mysql pod

步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…