FPGA学习篇——Verilog学习1

1 数电基础知识(后续可能还会继续补充)

1.1 逻辑电平

        这张图比较重要以及陌生的应该是高阻态Z,他是一个未知值,不一定为高也不一定为低电平,X是只能高电平和低电平中二选一。

1.2 进制

        进制有常见的二进制(b)、八进制(o)、十进制(d)、十六进制(h)

        十进制就是我们日常生活常用的阿拉伯数字0~9,而计算机中主要存储的是二进制,所以主要是二进制与十进制的转换,而八进制和十六进制可以先转换为二进制,进而转换为10进制。

1.2.1 十进制 and 二进制

(1)二进制\rightarrow十进制:加权求和

(2)十进制\rightarrow二进制:不断除2取余,逆序排列

1.2.2 八进制 to 二进制(八进制\rightarrow二进制)

        八进制代表数字0~7,对应的是二进制加权系数的1~8,即下图:

        二进制与八进制的换算,只需将二进制串划分成每三个位一组(如果需要的话,在前面补零),然后按照上表的对应关系进行转换。

        

PS:八进制也可直接转换为十进制:

1.2.3 十六进制 to 二进制

        十六进制代表阿拉伯数字的0~15,其中0~9同阿拉伯数字一样,10~15则有abcdef代替,即十六进制有1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。

        二进制数与十六进制的换算,只需将二进制串划分成每四个位一组(如果需要的话,在前面补零),然后按照上表的对应关系进行转换。

        例如,十六进制数1A3F转换为二进制数为0001 1010 0011 1111。

进制的表示:

如下图,4代表对应的二进制数数据的位宽(因为在数字电路中数字都是以二进制存储的),b是进制前缀,这里是二进制(在Vreilog语言中,若没有指定位宽,则默认为32,若没有指定进制,则默认为十进制d)

2 Verilog语言——基本语法

2.1 Verilog中的标识符(可理解为起个名字)

 在Verilog语言中标识符就相当与C语言的变量名,简单理解就是给参数,函数等起个名字。

2.2 Verilog中的数据类型

在Verilog语言中,主要三大数据类型:寄存器数据类型,线网数据类型,参数数据类型。

2.2.1寄存器数据类型

        寄存器数据类型可简单理解为定义用Verilog语言编程定义一个寄存器在数电中学过寄存器,实际上就是抽象的硬件设计,相当于你写了这个代码,对应着就生成一个硬件寄存器)。

        定义方法: reg [a:b]  标识符(寄存器名称);

        其中,a:b为寄存器的位宽(高位在前,低位在末),如以下例子中31:0即定义了32位的寄存器。当未定义位宽时,默认位宽为1。

        

  • 寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器储存的值,即寄存器可存储值。reg 类型数据的默认初始值为不定值x(即高电平或者低电平)。
  • reg类型的数据只能在 aways 语和initial 语句中被赋值
  • 如果该过程语句描述的是时序逻辑,即alwavs语句带有时钟信号,则该寄存器变量对应为触发器。
  • 如果该过程语句描述的是组合逻辑,即alays语句不带有时钟信号,则该寄存器变量对应为硬件连线。

2.2.2 线网数据类型

        线网数据类型可理解为用Verilog编程定义一条线,对应于硬件电路中结构实体(如门与门之间)的连线。线网数据包括wire和tri类型(用法完全一致),基本我们用到的是wire类型,故以下只讲wire类型。

      定义方法: wire [a:b]  标识符(寄存器名称);

      同样,这里a:b为寄存器的位宽(高位在前,低位在末),当未定义位宽时,默认位宽为1。

  • 线网类型的变量不能储存值,它的值是由驱动它的元件所决定的。可以理解为电路时连线上的值(如电压和电流值)跟元件有关。
  • 驱动线网类型变量的元件有门、连续赋值语句、assign等(这里可将连续赋值语句和assign语句是一个抽象的电路元件,故其可以给连线传递值)。
  • 如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,即其值为z(即不定态)。

2.2.3 参数数据类型

        参数其实就是一个常量,类似于C语言中define的作用。在 Verilog HDL 中用 parameter 定义常量。参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。

用参数数据类型的好处:

        比如上图是一个状态机的几种参数,当一个程序中需要多种类型的状态机(即参数不同),则可直接修改程序中的parameter部分,而不用到代码中具体去修改行同步等于多少...等等。

2.3 Verilog中的运算符

说白了就是编写代码时用什么符号来表示加减乘除等运算。

直接上图!!!

关系运算符:

        这个条件运算符是Verilog独有的,相当于C语言中简单的if语句,问号前面是判断条件,:左右两侧为两种选择结果,如下例:

上式表示如果a>b为真,选a,否则选b,即将a和b中的最大值赋给result。

注意:位运算是每位对应做运算,若ab位数不同,则高位补零至相同位数在再运算。

        拼接运算符也是Verilog中独有的运算符。举例讲解:

        假设ab都是8位数据,下例则是将a的所有八位和b的低四位拼接在一起,因此,c一共是12位数据。

除此之外,多个运算符使用时要注意运算符的优先级!!!可使用括号来提高优先级。

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

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

相关文章

C++的 I/O 流

本文把复杂的基类和派生类的作用和关系捋出来,具体的接口请参考相关文档 C的 I/O 流相关的类,继承关系如下图所示 https://zh.cppreference.com/w/cpp/io I / O 的概念:内存和外设进行数据交互称为 I / O ,例如:把数…

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)

目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…

《Python预训练视觉和大语言模型》:从DeepSeek到大模型实战的全栈指南

就是当代AI工程师的日常:* - 砸钱买算力,却卡在分布式训练的“隐形坑”里; - 跟着论文复现模型,结果连1/10的性能都达不到; - 好不容易上线应用,却因伦理问题被用户投诉…… 当所有人都在教你怎么调用…

【Elasticsearch】date range聚合

好的,继续之前的示例: json ] } } } } 4.3 自定义键(key) 通过为每个范围指定一个唯一的键(key),可以在结果中更方便地引用每个范围。这在使用keyed参数将结果以键值对形式返回时尤其有用。 j…

ElasticSearch 学习课程入门(二)

引子 前文已经介绍了ES的增删改查基本操作,接下来,我们学习下高级点的用法。OK,那就让我们开始吧。 一、ES高级操作 1、条件查询 (1)GET https://127.0.0.1:9200/shopping/_search?qcategory:小米 (2&…

6.PPT:魏女士-高新技术企业政策【19】

目录 NO1234​ NO567 ​ NO1234 创建“PPT.pptx”考生文件夹Word素材文档:选中对应颜色的文字→选中对应的样式单击右键按下匹配对应文字:应用所有对应颜色的文字开始→创建新的幻灯片→从大纲:考生文件夹:Word素材重置 开始→版…

【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)

理解Linux系统内进程信号的整个流程可分为: 信号产生 信号保存 信号处理 上篇文章重点讲解了 信号的产生,本文会讲解信号的保存和信号处理相关的概念和操作: 两种信号默认处理 1、信号处理之忽略 ::signal(2, SIG_IGN); // ignore: 忽略#…

【算法篇】贪心算法

目录 贪心算法 贪心算法实际应用 一,零钱找回问题 二,活动选择问题 三,分数背包问题 将数组和减半的最小操作次数 最大数 贪心算法 贪心算法,是一种在每一步选择中都采取当前状态下的最优策略,期望得到全局最优…

SSM网上球鞋竞拍系统

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 js…

基于springboot河南省旅游管理系统

基于Spring Boot的河南省旅游管理系统是一种专为河南省旅游行业设计的信息管理系统,旨在整合和管理河南省的旅游资源信息,为游客提供准确、全面的旅游攻略和服务。以下是对该系统的详细介绍: 一、系统背景与意义 河南省作为中国的中部省份&…

人工智能|本地部署|ollama+chatbox快速Windows10下部署(初级篇)

一、 前言: 其实早一个月我已经使用过deepseek,并且也在自己的机器上通过ollama部署过,但一直没有太多动力,现在感觉还是的记录一下,省的自己给忘掉了 本文只是简单记录一下ollamaopen-webuichatbox部署通过网盘分享…

ZZNUOJ(C/C++)基础练习1061——1070(详解版)

目录 1061 : 顺序输出各位数字 C语言版 C版 1062 : 最大公约数 C C 1063 : 最大公约与最小公倍 C C 1064 : 加密字符 C C 1065 : 统计数字字符的个数 C C 1066 : 字符分类统计 C C 1067 : 有问题的里程表 C C 1068 : 进制转换 C C C(容器stack…

记录一下 在Mac下用pyinstallter 打包 Django项目

安装: pip install pyinstaller 在urls.py from SheepMasterOneToOne import settings from django.conf.urls.static import staticurlpatterns [path("admin/", admin.site.urls),path(generate_report/export/, ReportAdmin(models.Report, admin.site).generat…

使用Python和TensorFlow/Keras构建一个简单的CNN模型来识别手写数字

一个简单的图像识别项目代码示例,使用Python和TensorFlow/Keras库来训练一个基本的CNN模型,用于识别MNIST手写数字数据集,并将测试结果输出到HTML。 代码运行效果截图: 具体操作步骤: 1. 安装所需的库 首先,确保你已经安装了所需的Python库: pip install tensorflow…

2021.3.1的android studio版本就很好用

使用最新版的studio有个问题就是gradle版本也比较高,这样就容易出现之前项目不兼容问题,配置gradle可能会出现很多问题比较烦,所以干脆就用老版本的studio

控件【QT】

文章目录 控件QWidgetenabledgeometrysetGeometry qrcwindowOpacityQPixmapfonttoolTipfocusPolicystyleSheetQPushButtonRadio ButtionCheck Box显示类控件QProgressBarcalendarWidget 控件 Qt中已经提供了很多内置的控件了(按钮,文本框,单选按钮,复选按钮,下拉框…

【小鱼闪闪】做一个物联网控制小灯的制作流程简要介绍(图文)

1、注册物联网云平台,这里选用巴法云 2.、新建主题 “ledtest” 3、 使用Arduino或Mixly软件编写单片机程序(需要引用巴法云库文件),程序中订阅“ledtest”主题,用于接收单片机发送来的数据。此处会将连接的温度传感器…

KNN算法:从思想到实现(附代码)

引言 K最近邻算法(K Nearest Neighbors, KNN)是一种简单而有效的机器学习算法,用于分类和回归问题。其核心思想基于“近朱者赤,近墨者黑”,即通过测量不同特征值之间的距离来进行分类或预测数值。本文将详细介绍KNN的…

专业学习|一文了解并实操自适应大邻域搜索(讲解代码)

一、自适应大邻域搜索概念介绍 自适应大邻域搜索(Adaptive Large Neighborhood Search,ALNS)是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍: -自适应大领域搜索的核心思想是:破坏解、修复解、动…

TensorFlow深度学习实战(6)——回归分析详解

TensorFlow深度学习实战(6)——回归分析详解 0. 前言1. 回归分析简介2. 线性回归2.1 简单线性回归2.2 多重线性回归2.3 多元线性回归 3. 构建基于线性回归的神经网络3.1 使用 TensorFlow 进行简单线性回归3.2 使用 TensorFlow 进行多元线性回归和多重线性…