当前位置:网站首页 > 数据科学与大数据 > 正文

组合型数组 非组合型数组(组合数据类型的定义)



Verilog语言简介

  • Verilog语言简介(数字逻辑课程笔记)
    • 概述
    • 数据类型
    • 模块构建
      • 操作
      • 赋值语句
        • 连续赋值
        • 过程赋值
          • 过程赋值语句块:always语句块
          • 阻塞赋值
          • 非阻塞赋值
          • 过程赋值语句块:initial语句块
        • generate
      • 功能描述
        • 结构描述
        • 数据流描述
        • 行为描述
    • 系统函数
    • 代码示例

Verilog是一种硬件描述语言:用形式化方法(文本形式)来描述和设计数字电路和数字系统的高级模块化语言。可编写设计文件、建立电路模型、编写测试文件进行仿真。

1.变量值

  • 0:代表逻辑0或否条件;在电路中一般是低电平
  • 1:代表逻辑1或真条件;在电路中是高电平
  • X:代表未知的逻辑值(可能为0或1);一般是寄存器类型(reg)未初始化
  • Z:代表一个高阻态;是线型(wire)变量未接驱动

2.wire & reg

  • wire: 线网; 用来表示硬件单元之间的物理连线
 
  
  • reg: 寄存器; 用来表示存储单元
 
  

3.向量vector

  • 标量Scalar: 1-bit位宽的线网或寄存器类型
    wire n1;
    reg d1;




  • 向量Vector:n-bit位宽的线网或寄存器类型
    wire [3:0] n0;
    reg[3:0] d0;




4.数组Array

  • 在Verilog中允许声明reg, wire, integer, time, real及其向量类型的数组
 
  
  • 存储器:寄存器数组模拟存储器,可用来描述RAM或ROM的行为
 
  

5.其他类型

  • integer: 32位宽的通用整型变量,可在对硬件建模时用于其他目的(可综合)
  • time: 无符号64位宽,可用于存储仿真时间量以进行仿真调试,realtime变量时将时间存储为浮点数(不可综合)
  • real:实数变量,可存储浮点值, 可以与integer和reg相同的方式进行赋值(不可综合)
  • string字符串,存储在reg中, reg变量的宽度必须足够大以容纳字符串(可综合)

Verilog的基本设计单元是模块。

模块由四个主要部分组成:

  • 端口定义:module 模块名(端口1,端口2,…)
  • I/O说明:包括输入(input)、输出(output)和双向(inout)
  • 信号类型声明:声明信号的数据类型和函数声明wire,reg,integer,real,time
  • 功能描述:用来描述设计模块的内部结构和模块端口间的逻辑关系。常用assign语句、always块语句等方法实现
 
  
 
  

操作符

操作符也称运算符, 是Verilog HDL预定义的函数符号。

功能 符号 含义 算术运算符 +,-,* , /,%, 加,减,乘,除,求模,求幂 逻辑运算符 &&,II, !(单目) 逻辑与,逻辑或,逻辑非 关系运算符 <, >, <=, >= 小于,大于,小于等于,大于等于 等值运算符 = =, !=, = = =, != = 等于,不等,全等,不全等 缩减运算符 &,~ &,I,~ I,^ , ^ ~ /~ ^ 与,与非,或,或非,异或,同或(都为单目) 条件运算符 信号 = 条件?表达式1:表达式2; 条件为真时,信号取表达式1的值,为假,取表达式2的值 位运算符 ~(单目),&, I,^ ,^ ~ , ~ ^ 按位取反,按位与,按位或,按位异或,按位同或 移位运算符 >>, << 右移,左移(后空位补0) 位拼接运算符 {信号1的某几位,…,信号n的某几位} 用于将两个或多个信号的某些位拼接起来
  • 在逻辑运算中,如果操作数不止一位,应将操作数作为一个整体来对待
  • 两个不同长度的操作数进行位运算时,将自动按右端对齐,位数少的操作数会在高位用0补齐。
  • 关系运算符优先级低于算术运算符,返回结果为逻辑值,0或1或x
  • 等于运算符(= =)和全等运算符(===)的区别: 使用等于运算符时,两个操作数必须逐位相等,结果才为1,若某些位为x或z,则结果为x;使用全等运算符时,若两个操作数的相应位形式上完全一致,则结果为1,否则为0.
操作数个数 单目运算符 双目运算符 三目运算符

赋值语句

连续赋值

连续赋值语句是 Verilog 数据流建模的基本语句,用于对 wire 型变量进行赋值。其格式如下:

 
  
 
  

过程赋值
  • 过程赋值是在 initial 或 always 语句块里的赋值,主要用于对寄存器类型变量进行赋值
  • 寄存器变量在被赋值后,其值将保持不变,直到重新被赋予新值
  • 过程赋值只有在语句执行的时候,才会起作用
  • Verilog 过程赋值包括 2 种语句:阻塞赋值与非阻塞赋值
过程赋值语句块:always语句块

模块声明:

 
  
 
  

always设计组合电路
代码示例:

 
  

always设计时序逻辑电路

代码示例:

 
  
阻塞赋值
 
  
 
  

非阻塞赋值
 
  
 
  

过程赋值语句块:initial语句块
 
  
 
  
generate

generate 可以用来循环实例化模块或条件实例化模块
➢ generate 与 for loop,用来构造循环结构,多次实例化某个模块
➢ generate 与 if else 或 case,用来在多个块之间选择一个代码块




 
 
   
   

功能描述

结构描述
· 结构(Structural)描述是对设计电路的结构进行描述,即描述设计
电路使用的元件及这些元件之间的连接关系,属于低层次的描述方法
数据流描述
· 数据(Data Flow)流描述采用持续赋值语句,抽象级别位于结构描
述和行为描述之间
行为描述
· 行为(Behavioural)描述是对设计电路的逻辑功能的描述,并不用
关心设计电路使用哪些元件以及这些元件之间的连接关系,属于高层
次的描述方法

























结构描述

调用门原语句法:

 
  
 
  
数据流描述
 
  

行为描述
 
  

if-else语句

 
  

case语句

 
  

循环语句

◼ 在仿真时将一定内容显示出来是非常常用的,$ display 和$ write 函数就主要用于显示信息和调试信息,其区别是$ display 会在字符串末尾追加一个换行符,$write则不会

 
  
 
  
 
 
   
   

4-bit全加器

设计源码

 
 
   
   

仿真源码

 
 
   
   

可读写存储器regfile

设计源码

 
 
   
   

仿真源码

 
 
   
   

到此这篇组合型数组 非组合型数组(组合数据类型的定义)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • centernet训练自己的数据集(resnet训练自己的数据集)2025-06-24 20:27:05
  • 达梦数据库客户端工具(达梦数据库客户端工具 设置值唯一)2025-06-24 20:27:05
  • 达梦客户端安装 linux(linux如何安装达梦数据库)2025-06-24 20:27:05
  • orcale数据库下载(oracle数据库软件下载)2025-06-24 20:27:05
  • tidb数据库备份(tisidb数据库)2025-06-24 20:27:05
  • orcale数据库下载(oracle数据库客户端下载)2025-06-24 20:27:05
  • 大数据学什么软件(大数据学什么软件比较好)2025-06-24 20:27:05
  • .sql文件有什么用(sql的数据文件是什么)2025-06-24 20:27:05
  • 达梦数据库端口默认(达梦数据库连接命令)2025-06-24 20:27:05
  • 学术数据库官网查询(学术数据库官网查询)2025-06-24 20:27:05
  • 全屏图片