跟我一起学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

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

计算机毕业设计 大学志愿填报系统 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