当前位置: 首页 > article >正文

FPGA开发verilog语法基础1

在这里插入图片描述

文章目录

  • 主体内容
      • 1.1 逻辑值
      • 1.2 数字进制格式
      • 1.3 数据类型
        • 1.3.1 寄存器类型
        • 1.3.2 线网类型
        • 1.3.3 参数类型
        • 1.3.4 存储器类型
  • 参考资料

主体内容

1.1 逻辑值

       1,逻辑0,表示低电平

       2,逻辑1,表示高电平

       3,逻辑X,表示未知,有可能是高电平,也有可能是低电平(不区分x和X)

       4,逻辑Z,表示高阻态,外部没有激励信号,是一个悬空状态(不区分z和Z)

1.2 数字进制格式

       Verilog数字进制格式包括二进制(b)八进制(o)十进制(d)十六进制(h)。(注意对应的字母!)一般常用的为二进制、十进制和十六进制。

eg:

       4’b0101:表示4位二进制数字0101

       4’d2:表示4位十进制数字2(二进制0010)

       4’ha:表示4位十六进制数字a(二进制1010)

​       16’b1001_1010_1010_1001 = 16’h9AA9

数值的整数及其表示注意以下事项!!!

       1,在较长的数之间可以用下划线来分开,目的是提高可读性,下划线本身没有意义,但下划线符号不能用作首字符;

       2,当数字没有说明位宽时,默认为32位

       3,若没有定义一个整数的位宽,其宽度为相应值中定义的位数

eg:

'o642	//9位八进制数
'hBD	//8位十六进制数

       4,若定义的位宽比实际数的位宽大,则在左边用0补齐。但如果数最左边一位为x或z,就相应地用x或z在左边补齐,如果定义的位宽比实际数的位宽小,那么最左边的位被截断

       5,“?”是高阻态 z 的另一种表示符号,在数字的表示中,字符 “?” 和 Z 或 z 是等价的,可以互相替代。

       6,整数可以带正负号,并且正负号应写在最左边。负数表示为二进制的补码形式

eg:

4'd-4	//错误表达
-4		//等价于4'b1100

       7,如果位宽和进制都缺省,则代表十进制数

       8,位宽不能是表达式形式。

eg:

(4+4)'b11	//错误表达

1.3 数据类型

       在 Verilog 语言中,主要有三大类数据类型:寄存器数据类型、线网数据类型和参数数据类型。其中寄存器与线网类型都可以映射到实际物理电路上的,是真正在数字电路中起作用的。

1.3.1 寄存器类型

       寄存器数据类型的关键字是 reg,reg 类型数据的默认初始值为不定值x。在过程块内被赋值的每一个信号都必须定义为reg类型,reg类型的数据只能在 always 语句initial 语句中被赋值。且在定义reg型变量时,未指定位宽则默认为1

       与下面说的线网类型不同,reg 型数据保持最后一次的赋值,而 wire 型数据需要有持续的驱动

reg [31:0] delay_cnt;
reg key_reg;

       如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器

       如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线

1.3.2 线网类型

​       线网数据类型表示结构实体(例如门)之间的物理连线。线网类型的变量不能储存值,它的值是由驱动它的元件所决定的。驱动线网类型变量的元件有门、连续赋值语句、assign等。如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,即其值为z。且在定义线网型变量时,未指定位宽则默认为1

       线网数据类型包括 wire 型tri 型,其中最常用的就是 wire 类型

wire key_flag;
1.3.3 参数类型

       参数其实就是一个常量,在 Verilog HDL 中用 parameter 定义常量。我们可以一次定义多个参数,参数与参数之间需要用逗号隔开。每个参数定义的右边必须是一个常数表达式。类似于C语言中的#define

       参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。采用标识符来代表一个常量可以提高程序的可读性和可维护性。在模块调用时,可通过参数传递来改变被调用模块中已定义的参数。

parameter H_SYNC = 11'd41;
1.3.4 存储器类型

       存储器(memory)本质上还是寄存器型变量阵列,只是 Verilog 中没有多维数组,所以就用 reg 型变量建立寄存器组(数组)来实现存储器的功能,也就是拓展的reg型数据地址范围。存储器类型变量可以描述 RAM 型、ROM 型存储器以及 reg 文件。数组中的每一个单元通过一个数组索引进行寻址

​       存储器型变量的一般声明格式如下:

reg <range1><name_of_register><range2>

​       其中 range1 和 range2 都是可选项缺省时都为1。range1 表示存储器寄存器的位宽;range2表示寄存器的个数

eg:

reg [7:0] mem1 [255:0];		//定义了一个有256个8位寄存器的存储器mem1,地址范围是0~255
reg [15:0] mem2 [127:0], reg1, reg2;	//定义了一个具有128个16位寄存器的存储器mem2和
										//2个16位的寄存器reg1和reg2

参考资料

1,正点原子领航者ZYNQ7020视频

2,《verilog HDL数字集成电路设计原理与应用(第二版)》 蔡觉平等

3,文心一言搜索结果


http://www.kler.cn/news/364153.html

相关文章:

  • LabVIEW提高开发效率技巧----节省内存
  • 光伏电站折旧率的计算
  • java-实例化一个List,然后添加数据的方法详解
  • 面经之一:Synchronized与ReentrantLock区别
  • 参加了十多个面试,一个offer也没拿到...为什么?
  • CZX前端秘籍3
  • springboot033小徐影城管理系统(论文+源码)_kaic
  • 【Jenkins】解决在Jenkins Agent节点容器内无法访问物理机的docker和docker compose的问题
  • 使用 Python 解析火狐浏览器的 SQLite3 数据库
  • C++,STL 047(24.10.24)
  • Mysql-count(1)、count(*)和count(列名)的区别?
  • Kafka Tool(Offset Explorer)在windows下配置访问kerberos认证Kafka
  • 【Ubuntu20.04 Visual Studio Code安装】【VSCODE】
  • 相对定位和绝对定位,使得图片在中间 ( html css )
  • Codeforces Round 981(Div. 3)
  • 【开源免费】基于SpringBoot+Vue.JS校园美食分享平台 (JAVA毕业设计)
  • [Python学习日记-53] Python 中的正则表达式模块 —— re
  • docker国内镜像仓库地址
  • Linux Shell 实现一键部署mariadb11.6
  • Hugging Face HUGS 加快了基于开放模型的AI应用的开发
  • 相机外参与相机位姿深度理解
  • 115页PPT华为管理变革:制度创新与文化塑造的核心实践
  • <大厂实战场景> ~ Flutter鸿蒙next 解析后端返回的 HTML 数据详解
  • 支持多种数据来源的ocr识别,GOT-OCR2.0模型部署
  • Java基础练习:哥德巴猜想,回文数
  • Python数值计算(32)——simpson 1/3积分公式