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

2024-09-04 03:28
文章标签 讲解 语法 fpga 一起

本文主要是介绍跟我一起学FPGA (二) 语法讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本章讲解

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 ,这样模块会比较清晰易懂。

这篇关于跟我一起学FPGA (二) 语法讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134863

相关文章

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe

ispunct函数讲解 <ctype.h>头文件函数

目录 1.头文件函数 2.ispunct函数使用  小心!VS2022不可直接接触,否则..!没有这个必要,方源一把抓住VS2022,顷刻 炼化! 1.头文件函数 以上函数都需要包括头文件<ctype.h> ,其中包括 ispunct 函数 #include<ctype.h> 2.ispunct函数使用 简述: ispunct函数一种判断字符是否为标点符号的函

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理

陈科肇 示例: 包规范 CREATE OR REPLACE PACKAGE PACK_WMS_YX IS-- Author : CKZ-- Created : 2015/8/28 9:52:29-- Purpose : 同步数据-- Public type declarations,游标 退休订单TYPE retCursor IS REF CURSOR;-- RETURN vi_co_co

深度学习速通系列:深度学习算法讲解

深度学习算法是一系列基于人工神经网络的算法,它们通过模拟人脑处理信息的方式来学习和解决复杂问题。这些算法在图像识别、语音识别、自然语言处理、游戏等领域取得了显著的成就。以下是一些流行的深度学习算法及其基本原理: 1. 前馈神经网络(Feedforward Neural Networks, FNN) 原理:FNN 是最基本的神经网络结构,它由输入层、隐藏层和输出层组成。信息从输入层流向隐藏层,最

C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考。首先我介绍的是设计模式中比较简单的一个模式——单例模式(因为这里只牵涉到一个类) 二、单例模式的介绍 说到单例模式,大家第一

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.