您当前的位置: 首页 > 

lu-ming.xyz

暂无认证

  • 0浏览

    0关注

    115博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

以Vivado synthesis支持的Verilog结构来学习 Verilog语句可综合性

lu-ming.xyz 发布时间:2022-06-07 15:42:34 ,浏览量:0

  • 查Verilog结构是否可综合
  • 查Verilog 系统task与function是否可综合
  • 查Verilog 基本单元(原语)是否可综合
  • 查Verilog 保留的关键词

文章目录
  • 1 Verilog 设计
  • 2 Verilog 功能
    • 2.1 对 Verilog-2001 的支持
    • 2.2 结构性Verilog
    • 2.3 Verilog 参数
    • 2.4 Verilog 参数与属性冲突的情况
    • 2.5 Verilog使用限制
    • 2.6 Verilog元注释
  • 3 Verilog 结构
    • 3.1 常量
    • 3.2 数据类型
    • 3.3 过程性语句
    • 3.3 设计层次结构
    • 3.4 编译指令
  • 4 Verilog 系统task与function
  • 5 转换函数的使用
  • 6 Verilog 基本单元(原语)的支持
  • 7 Verilog 保留的关键词
  • 8 行为级Verilog语言结构
    • 8.1 变量
    • 8.2 初始值
    • 8.3 reg 或 wire 数组
    • 8.4 多维数组
    • 8.5 数据类型
    • 8.6 合法的语句
    • 8.7 块Block
  • 9 过程性赋值(Procedural Assignment)
    • 9.1 if-else 语句
    • 9.2 case 语句
    • 9.3 for和repeat语句
    • 9.4 while 语句

经常看到是否可 Synthesis 的题目,网上对于Verilog 结构是否可 Synthesis 有很多分类标准,但是没有说明具体引用来源,所以学起来总感觉没有底气。 现在以Vivado IDE Synthesis 支持的Verilog 结构来具体学习 Verilog 的可综合性。具体文档是UG901。

1 Verilog 设计

复杂电路的设计通常采用自顶向下的方法。

  • 设计过程的每个阶段都需要不同的规范级别(specification level)。例如,在体系结构级别,规范可以对应于框图或算法状态机(ASM)图。
  • 一个块 或 ASM阶段 对应于一个寄存器传输块,其中的连接是n位导线,例如:
    • 寄存器(Register)
    • 加法器(Adder)
    • 计数器(Counter)
    • 乘法器(Multiplexer)
    • 内部连接逻辑(Interconnect logic)
    • 有限状态机(Finite State Machine (FSM))
  • Verilog允许用计算机语言表达诸如ASM图和电路图之类的符号。
2 Verilog 功能

Verilog提供行为(behavioral)和结构(structural)语言结构。这些结构允许在高抽象级别和低抽象级别上表达设计对象。

  • 使用Verilog设计硬件允许使用软件概念,例如:
    • 并行处理
    • 面向对象的程序设计
  • Verilog的语法类似于C和Pascal
  • Vivado synthesis 支持 IEEE 1364 Verilog
  • 在Vivado synthesis 中支持Verilog,允许以最有效的方式描述全局电路和每个块。
    • 对每个block采用最佳 synthesis 流程进行 synthesis
    • 本文中的synthesis是将高级行为和结构Verilog HDL语句编译成一个平坦的门级网表( gate-level netlist)。然后,可以使用网表对可编程逻辑设备(如Virtex设备)进行自定义编程。
    • 不同的synthesis方法用于:
      • 算数运算块
      • 内部连接逻辑
      • 有限状态机组件
2.1 对 Verilog-2001 的支持

Vivado synthesis 支持 Verilog-2001 的如下功能:

  • 生成(Generate)语句
  • 组合端口/数据类型声明
  • ANSI-style端口列表
  • 模块操作符端口列表
  • ANSI C风格的任务/函数声明
  • 逗号分隔敏感列表
  • 组合逻辑的敏感信号
  • 使用连续赋值的默认线网类型
  • 禁用默认的net声明
  • Indexed vector的部分选择
  • 多维数组
  • net和real数据类型的数组
  • 数组 位和部分选择
  • Signed reg、net和 port 声明
  • Signed-based 整数
  • Signed 算术表达式
  • 算术移位操作符
  • 自动宽度扩展超过32位
  • 幂操作符
  • 待定位宽参数(N-sized parameter)
  • 固定的局部参数
  • 增强的条件编译
  • 文件和行编译器指令
  • 变量的部分选择
    reg [3:0] data;
    reg [3:0] select; // a value from 0 to 7
    wire [7:0] byte = data[select +: 8];
    
  • 递归任务和函数
  • 常量函数
2.2 结构性Verilog

结构化的Verilog描述集合了几个代码块,并允许在设计中引入层次结构。硬件结构的相关概念及其说明如下表所示。

概念说明Component构建或基本块Port组件的 I/O 连接器Signal对应于组件之间的连线

内建逻辑门包括 与(AND)、或(OR)、异或(XOR)、与非(NAND)、或非(NOR)、非(NOT)

Verilog的结构特性允许通过实例化预定义的原语,Xilinx提供的源于如BUFG、CLKDLL等

2.3 Verilog 参数

Verilog参数的作用:

  • 创建易于重用和扩展的参数化代码。
  • 使代码更具可读性、更紧凑、更易于维护。
  • 描述这样的功能:
    • 总线位宽
    • 在模型设计单元中某些重复元素的数量
  • 常数。对于参数化模块的每个实例化,可以重写默认操作符值。
  • 相当于VHDL泛型。不支持空字符串参数。
2.4 Verilog 参数与属性冲突的情况

Verilog参数和属性冲突可能会出现以下情况:

  • 参数和属性可以应用于Verilog代码中的实例和模块。
  • 同时属性也可以在约束文件中指定
2.5 Verilog使用限制

Verilog在Vivado synthesis中的使用限制包括:

  • 大小写敏感
    • Verilog大小写敏感,但是当模块名称只是大小写不同时,Vivado synthesis会出错。
  • 阻塞和非阻塞赋值
    • 不要混合使用阻塞和非阻塞赋值。虽然 Vivado synthesis 不会报错(注意只是不会报错)但是仿真会出错。
    • 错误示范
      always @(in1)
      begin
      if (in2)
          out1 = in1;
      end else
          out1             
关注
打赏
1655639048
查看更多评论
0.0375s