- 查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图和电路图之类的符号。
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方法用于:
- 算数运算块
- 内部连接逻辑
- 有限状态机组件
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];
- 递归任务和函数
- 常量函数
结构化的Verilog描述集合了几个代码块,并允许在设计中引入层次结构。硬件结构的相关概念及其说明如下表所示。
概念说明Component构建或基本块Port组件的 I/O 连接器Signal对应于组件之间的连线内建逻辑门包括 与(AND)、或(OR)、异或(XOR)、与非(NAND)、或非(NOR)、非(NOT)
Verilog的结构特性允许通过实例化预定义的原语,Xilinx提供的源于如BUFG、CLKDLL等
2.3 Verilog 参数Verilog参数的作用:
- 创建易于重用和扩展的参数化代码。
- 使代码更具可读性、更紧凑、更易于维护。
- 描述这样的功能:
- 总线位宽
- 在模型设计单元中某些重复元素的数量
- 常数。对于参数化模块的每个实例化,可以重写默认操作符值。
- 相当于VHDL泛型。不支持空字符串参数。
Verilog参数和属性冲突可能会出现以下情况:
- 参数和属性可以应用于Verilog代码中的实例和模块。
- 同时属性也可以在约束文件中指定
Verilog在Vivado synthesis中的使用限制包括:
- 大小写敏感
- Verilog大小写敏感,但是当模块名称只是大小写不同时,Vivado synthesis会出错。
- 阻塞和非阻塞赋值
- 不要混合使用阻塞和非阻塞赋值。虽然 Vivado synthesis 不会报错(注意只是不会报错)但是仿真会出错。
- 错误示范
always @(in1) begin if (in2) out1 = in1; end else out1
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?