跟我一起学FPGA (二) 语法讲解

news2024/9/20 14:26:42

本章讲解

1 、Verilog 概述和基础知识;
2 、Verilog 程序框架和高级知识点;
3 、Verilog 编程规范。

1.Verilog 概述和基础知识

Verilog 是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能.
verilog的逻辑值:
逻辑 0 :表示低电平,也就是对应我们电路的 GND
逻辑 1 :表示高电平,也就是对应我们电路的 VCC
逻辑 X :表示未知,有可能是高电平,也有可能是低电平;
逻辑 Z :表示高阻态,外部没有激励信号是一个悬空状态。

verilog标识符

标识符 (identifier )用于定义模块名、端口名和信号名等。
Verilog 的标识符可以是任意一组字母、数 字、$ _( 下划线 ) 符号的组合。
       1. 标识符的第一个字符必须是字母或者下划线。
        2. 区分大小写。
        
        不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写,另外信号命名最好体现信 号的含义。

Verilog 的数字进制格式

二进制表示如下: 4’b0101 表示 4 位二进制数字 0101
十进制表示如下: 4’d2 表示 4 位十进制数字 2 (二进制 0010 );
十六进制表示如下: 4’ha 表示 4 位十六进制数字 a (二进制 1010 ),十六进制的计数方式为 0 1 , 2…9, a b c d e f ,最大计数为 f f :十进制表示为 15 )。
当代码中没有指定数字的位宽与进制时,默认为 32 位的十进制,比如 100,实际上表示的值为 32’d100

 Verilog 的数据类型

寄存器类型、线网类型和参数类型

寄存器类型

        表示一个抽象的数据存储单元,它只能在 always 语句和 initial 语句中被赋值。

//reg define
reg [ 31 : 0 ] delay_cnt ; //延时计数器
reg key_flag ; //按键标志
线网类型
        Verilog 结构化元件间的物理连线。它的值由驱动元件的值决定。
        其中最常用的就是 wire 类型
 
//wire define
wire data_en ; //数据使能信号
wire [ 7 : 0 ] data ; //数据
       
参数类型
        参数其实就是一个常量,常被用于定义状态机的状态、数据位宽和延迟大小等。
//parameter define
parameter DATA_WIDTH = 8 ; //数据位宽为8位

 Verilog 的运算符

七种:
1 、算术运算符、 2 、关系运算符、 3 、逻辑运算符、
4 、条件运算符、 5 、位运算符、
6 、移位运算符、 7 、拼接运算符

2.Verilog 程序框架

关键字

程序框架

3.Verilog 高级知识点

阻塞赋值(Blocking        

        阻塞赋值,顾名思义,即在一个 always 块中,后面的语句会受到前语句的影响,具体来说,在同一个 always 中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被 阻塞
        阻塞赋值 “= ” 在 begin end 之间的语句是顺序执行,属于串行语句

非阻塞赋值(Non-Blocking

        符号“<=”用于非阻塞赋值(如:b <= a;

非阻塞赋值是由时钟节拍决定,在时钟上升到来时,执行赋值语句右边,然后将 begin-end 之间的所有赋值语句同时赋值到赋值语句的左边。
注意:是 begin—end 之间的所有语句,一起执行,且一个时钟只执行一次,属于并行执行语句。

区分

        在描述组合逻辑电路的时候,使用阻塞赋值,比如 assign 赋值语句和不带时钟的 always 赋值语句。这种电路结构只与输入电平的变化有关系。

        在描述时序逻辑的时候,使用非阻塞赋值。

 assign always 区别

assign 语句使用时不能带时钟。
always 语句可以带时钟,也可以不带时钟。
        在 always 不带时钟时,逻辑功能和 assign 完全一致,都是 只产生组合逻辑。比较简单的组合逻辑推荐使用 assign 语句,比较复杂的组合逻辑推荐使用 always 语句。

latch 锁存器

是一种对脉冲电平敏感的存储单元电路。
锁存器和寄存器都是基本存储单元:
        锁存器是电平触发的存储器,组合逻辑产生的。
        寄存器是边沿触发的存储器,时序电路中使用,由时钟触发产生的。
latch 的主要危害是会产生毛刺(glitch),这种毛刺对下一级电路是很危险的。并且其隐蔽性很强, 不易查出。因此,在设计中,应尽量避免 latch 的使用。  

 状态机

        状态机相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。

 4.Verilog 编程规范

工程组织形式

        工程的组织形式一般包括如下几个部分,分别是 docparrtl sim 四个部分。

        doc:一般存放工程相关的文档        

        par:主要存放工程文件和使用到的一些 IP 文件;

        rtl:主要存放工程的 rtl 代码,这是工程的核心,文件名与 module 名称应当一致。
        sim:主要存放工程的仿真代码

文件头声明

        每一个 Verilog 文件的开头,都必须有一段声明的文字。包括文件的版权,作者,创建日期以及内容介绍等。
        我们建议一个.V 只包括一个 module ,这样模块会比较清晰易懂。

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

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

相关文章

Vivado2018.3版本_将bit文件转化为bin文件

Vivado2018.3版本_将bit文件转化为bin文件 1、配置转换文件 2、下载到flash中

用 count(*)哪个存储引擎会更快?

InnoDB 引擎执行 count 函数的时候&#xff0c;需要通过遍历的方式来统计记录个数&#xff0c;而 MyISAM 引擎执行 count 函数只需要 0(1 )复杂度&#xff0c;这是因为每张 MyISAM 的数据表都有一个 meta 信息有存储了row_count值&#xff0c;由表级锁保证一致性&#xff0c;所…

[数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;25215 标注数量(xml文件个数)&#xff1a;25215 标注数量(txt文件个数)&#xff1a;25215 标…

给P人一点小小震撼!铁威马UI全新设计!更友好更美观~

开学了&#xff0c;小马居然发现有学校竟然玩起了新花样&#xff0c;通过MBTI来分宿舍&#xff0c;这脑洞大开的创意简直让人直呼内行&#xff01; 你是P人还是J人&#xff1f; 在MBTI人格分类中&#xff0c;J人喜欢条理清晰的计划&#xff0c;而P人则倾向于随性所欲。 想象…

第十五届北京青年相声节宣传片发布

第十五届北京青年相声节宣传片&#xff0c;围绕相声演员的四个基本功&#xff1a;说、学、逗、唱&#xff0c;搭建四个生活场景&#xff0c;编创四个微短故事&#xff0c;演绎四组人物关系&#xff0c;向大众普及“相声就在我们身边”的深刻内涵。

如何轻松的步入编程的第一课?相信你就是那个伟大的天才!

第一次编程&#xff0c;会让初学者感到既兴奋又有些紧张。以下是一些建议 明确学习目标&#xff1a;首先&#xff0c;思考你为什么想学编程。是为了职业发展、兴趣爱好、还是仅仅想了解新技术&#xff1f;明确的目标能帮你保持学习的动力。选择合适的编程语言&#xff1a;对于…

【持续更新】Solid Explorer premium2.8.48.200291文件管理器最新免费高级解锁版

Solid Explorer文件管理器高级版解锁&#xff0c;拥有诸多增强功能和额外特性&#xff0c;使其区别于标准版。 ▨ 解锁版主要特点 • 解锁高级功能&#xff1a;无限制地访问所有高级功能 • 无广告体验&#xff1a;享受无任何烦人广告的流畅用户界面 • 增强安全性&#xff1a…

软件性能测试重要性简析,好用的性能测试工具有哪些?

软件性能测试是软件开发和维护过程中一个至关重要的环节。通过性能测试&#xff0c;企业能够评估软件在不同负载下的表现&#xff0c;预测其在真实环境中的表现&#xff0c;以确保用户能获得优秀的使用体验。 软件性能测试可以被定义为一种评估软件系统的快速性、响应性、稳定…

【ShuQiHere】重新定义Linux桌面生态:Gnome-Pie与Touché的双剑合璧

【ShuQiHere】 从期待到失望的初体验 当我第一次拿到Logitech Master 3S鼠标时&#xff0c;心中的兴奋感油然而生。它精致的做工、独特的造型&#xff0c;以及舒适的握感&#xff0c;让我感觉它不仅是一款鼠标&#xff0c;更是一件工艺品。再加上令人期待的自定义手势功能&am…

RR隔离级别下还有幻读吗

文章目录 1 背景2 验证2.1 验证准备2.1.1 环境信息2.1.2 数据准备 2.2 当前读场景验证2.2.1 前言2.2.2 场景验证2.2.3 小结 2.3.快照读场景验证2.3.1 前言2.3.2 场景验证2.3.3 小结 3 分析4 总结 1 背景 InnoDB默认的事务隔离级别是REPEATABLE-READ&#xff0c;它为了解决该隔离…

数学 小朋友按如图所示的规则练习数数,1大拇指,2食指,3中指,4无名指,5小指,6无名指,…,一直数到2024的时候,是哪一个手指?

1、先上一张图&#xff1a; 如图&#xff0c;一个小朋友按如图所示的规则练习数数&#xff0c;1大拇指&#xff0c;2食指&#xff0c;3中指&#xff0c;4无名指&#xff0c;5小指&#xff0c;6无名指&#xff0c;…&#xff0c;一直数到2024时&#xff0c;对应的指头是&#xf…

UE的Gameplay框架(三) —— Level和World

这篇文章关注于Level和World&#xff0c;对其在Gameplay框架中的作用及使用做简单讲解。 文章目录 Level和World的作用关卡流送关卡流送体积蓝图加载 参考资料 Level和World的作用 在UE里&#xff0c;Level 可以看作是 Actors 的容器&#xff0c;其有一个LevelScriptActor用于处…

【Netty】实战:基于WebSocket的聊天室

​ 本文将使用Netty快速实现一个聊天室应用&#xff0c;该应用基于WebSocket协议&#xff0c;用户可以在浏览器内聊天。 实现过程很简单&#xff0c;就几步。 一、处理Http请求 package cn.md.netty.websocket.groupchat;import io.netty.channel.*; import io.netty.handle…

yolov8目标检测pyside6可视化图形界面+检测源码ui文件——用于计数统计

项目结构 YOLOv8模型加载&#xff1a;加载预训练的YOLOv8模型。PySide6 GUI&#xff1a;设计图形用户界面&#xff0c;用于显示检测结果和控制选项。摄像头/视频输入&#xff1a;从摄像头或视频文件读取图像帧。目标检测&#xff1a;使用YOLOv8模型对输入图像进行实时目标检测…

Explorer++:轻量级高效文件管理器!!

项目简介 Explorer 是一款专为Windows操作系统设计的轻量级且高效的文件管理器。作为Windows资源管理器的强大替代方案&#xff0c;它提供了丰富的特性和优化的用户体验&#xff0c;使得文件管理和组织变得更加便捷高效。无论是专业用户还是普通用户&#xff0c;都能从中受益&a…

Leetcode面试经典150题-92.反转链表II

解法都在代码里&#xff0c;不懂就留言或者私信 比反转链表I略微难一点点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, Li…

0903作业+思维导图

一、作业 1》多态的实现 1、代码 #include <iostream>using namespace std; //父类 class Person { public:string name;int age; public:Person(){}Person(string n,int a):name(n),age(a){}~Person(){}//纯虚函数virtual void show() 0; }; //子类1 class Stu:publ…

游戏开发者必看:Perforce龙智即将携手亮相2024 Unreal Fest上海站,打造游戏开发版本控制新生态

2024年9月5- 6日&#xff08;周四-周五&#xff09;&#xff0c;Unreal Fest Shanghai 2024将在上海宝华万豪酒店隆重举行&#xff01;作为游戏行业备受瞩目的盛会之一&#xff0c;Unreal Fest每年都会吸引来自世界各地的技术专家和行业领导者齐聚一堂&#xff0c;分享最新的技…

『功能项目』销毁怪物蛋的Shaders消融特效【17】

本章项目成果展示 我们打开上一篇16主角的信息显示的项目&#xff0c; 本章要做的事情是在怪物消亡时生成一个销毁特效 首先创建一个Unlit Shader 重命名为Dissolve 双击进入脚本后编写脚本&#xff1a; Shader "Unlit/Dissolve"{Properties{//物体基础材质纹理[Hea…

Apache Kafka UI :一款功能丰富且美观的 Kafka 开源管理平台!!【送源码】

Apache Kafka UI 是一个免费的开源 Web UI&#xff0c;用于监控和管理 Apache Kafka 集群&#xff0c;可方便地查看 Kafka Brokers、Topics、消息、Consumer 等情况&#xff0c;支持多集群管理、性能监控、访问控制等功能。 1 特征 多集群管理&#xff1a; 在一个地方监控和管理…