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


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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

SyntaxError: Missing semicolon

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

游戏引擎学习第140天

回顾并为今天的内容做准备 目前代码的进展到了声音混音的部分。昨天我详细解释了声音的处理方式,声音在技术上是一个非常特别的存在,但在游戏中进行声音混音的需求其实相对简单明了,所以今天的任务应该不会太具挑战性。 今天我们会编写一个…

vue3如何配置环境和打包

很多新手友友们或刚从vue2切换到vue3的同学,对vue3不同环境配置和打包有很多困惑的地方,Jenna这就把vue3打包配置流程详细的写下来,你们只需要copy就好啦 1.创建环境文件 当我们把项目拿到手,只需要创建三个环境文件&#xff1a…

《AJAX:前端异步交互的魔法指南》

什么是AJAX AJAX(Asynchronous JavaScript and XML,异步 JavaScript 和 XML) 是一种用于创建异步网页应用的技术,允许网页在不重新加载整个页面的情况下,与服务器交换数据并局部更新页面内容。尽管名称中包含 XML&…

STM32-I2C通信协议

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

阿里推出全新推理模型(因果语言模型),仅1/20参数媲美DeepSeek R1

阿里Qwen 团队正式发布了他们最新的研究成果——QwQ-32B大语言模型!这款模型不仅名字萌萌哒(QwQ),实力更是不容小觑!😎 QwQ-32B 已在 Hugging Face 和 ModelScope 开源,采用了 Apache 2.0 开源协议。大家可通过 Qwen C…

GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程

源码仓库: https://gitcode.com/youlai/vue3-element-admin 后端仓库: https://gitcode.com/youlai/youlai-boot 开源助力,开启中后台快速开发之旅 vue3-element-admin 是一款精心打造的免费开源中后台管理前端模板,它紧密贴合…

接入DeepSeek,九牧开启AI卫浴新赛道!

2025年或可被称为AI新纪元元年,“具身智能”“智能机器人”“6G”等新词语出现在《政府工作报告》里,国家对制造业转型和“人工智能”的发展提出殷切期望。 近年来,围绕数智化,制造业开启了一场全球竞赛,在无人机、高…

概率、泛化与过拟合

1. 贝叶斯定理 (Bayes Rule) 贝叶斯公式,又称贝叶斯定理、贝叶斯法则,最初是用来描述两个事件的条件概率间的关系的公式,后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是,支持某项属性的事件发生得愈多&#…

基于Python实现的智能旅游推荐系统(Django)

基于Python实现的智能旅游推荐系统(Django) 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat 系统功能实现 总体设计 系统实现 系统首页模块 统首页页面主要包括首页,旅游资讯,景点信息…

php代码审计工具-rips

代码审计 代码审计就是检查所写的代码中是否有漏洞,检查程序的源代码是否有权限从而被黑客攻击,同时也检查了书写的代码是否规范。通过自动化的审查和人工审查的方式,逐行检查源代码,发现源代码中安全缺陷所造成的漏洞&#xff0…

深入剖析分布式事务:原理、方案与实战指南

引言:为什么分布式事务成为架构师的必修课? 在微服务架构大行其道的今天,单体应用被拆分成多个独立服务。当一次业务操作需要跨多个服务/数据库完成时,传统数据库事务的ACID特性不再适用。订单创建需要同时操作订单服务和库存服务…

C语言100天练习题【记录本】

C语言经典100题(手把手 编程) 可以在哔哩哔哩找到(url:C语言经典100题(手把手 编程)_哔哩哔哩_bilibili) 已解决的天数:一,二,五,六,八&#xf…

计算机毕设-基于springboot的物业管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

Trae IDE新建C#工程

目录 1 结论 2 项目结构 3 项目代码 1 结论 新建C#工程来说,Trae的Chat比DeepSeek的Coder好用。 2 项目结构 MyWinFormsApp/ │ ├── Program.cs ├── Form1.cs ├── Form1.Designer.cs ├── MyResources/ │ └── MyResources.resx └── MyWin…

Linux 进程管理

一.进程 1.基本介绍 在Linux中每一个执行的程序都称之为进程,每一个进程都会分配一个进程号(PID)。进程以前台和后台两种方式存在,前台进程就是我们可以在屏幕上操作的,后台进程我们无法在屏幕上看到。 程序是静态的…

最新版本TOMCAT+IntelliJ IDEA+MAVEN项目创建(JAVAWEB)

前期所需: 1.apache-tomcat-10.1.18-windows-x64(tomcat 10.1.8版本或者差不多新的版本都可以) 2.IntelliJ idea 24年版本 或更高版本 3.已经配置好MAVEN了(一定先配置MAVEN再搞TOMCAT会事半功倍很多) 如果有没配置…

fiddler everywhere 绿色永久版

目录: 1. 下载并安装 FiddlerEverywhere v5.16.02. 下载并安装 FiddlerEverywherePatcher 补丁3. 修改 FiddlerEverywhere 版本号4. 再打开 FiddlerEverywhere 即可正常使用 亲测有效!!!以 Windows 10 FiddlerEverywhere v5.16.0 …

TypeError: Cannot assign to read only property ‘xxx‘ of object ‘#<Object>‘

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…