Vitis HLS 学习笔记--初始化与复位(块级控制:阵列、实参)

目录

1. 简介

2. 块级的初始化与复位

2.1 块级的初始化

2.2 块级的复位

2.3 全局复位选项

2.4 复位排除

2.5 函数实参的初始化与复位

2.5.1 代码

2.5.2 led 的 register

2.5.3 return 的 register

3. 阵列的初始化和复位

3.1 不使用 static 限定符

3.2 使用 static 限定符

3.3 BRAM 和 URAM

4. 总结


1. 简介

本文对比分析两个方面的初始化和复位:阵列和控制(也即块级)

阵列的初始化和复位

  • 阵列初始化:初始化是在编译时(或上电时)为变量(包括阵列)赋予初始值的过程。对于 C/C++ ,全局变量和静态变量默认初始化为0,但也可以给它们指定初始值。对于硬件逻辑,阵列会被实现为存储器(例如RAM),并且在上电或编程 FPGA 时,这些存储器会被预加载指定的初始值。
  • 阵列复位:在运行时,通过复位信号将变量(包括阵列)恢复到其初始状态的过程。不同于初始化,复位是一个动态过程,可以在程序执行期间任何时刻发生。如果选择将变量复位到其初始状态,这会导致设计中增加额外的逻辑和存储器资源。

控制的初始化与复位

  • 控制初始化:初始化行为主要关注变量(包括阵列和寄存器)在编译时或上电时的状态。
  • 控制复位:在 kernel 端口添加复位信号,当用复位信号使能,立即将连接到复位端口的寄存器和 BRAM 还原为初始值。通常 RTL 配置中最重要的操作即选择复位行为。

2. 块级的初始化与复位

2.1 块级的初始化

默认情况下,C/C++ 中以 static 变量全局变量都初始化为 0,也可由用户赋予特定初始值。

在 Vitis HLS 工具中,需要注意:

  • 在 RTL 仿真期间,为这些变量设置的初始值与 C/C++ 语言代码中相同。
  • 在用于对 FPGA 进行编程的比特流中,也会对这些变量进行初始化。当器件上电时,变量将以其初始状态启动。

在 RTL 中,虽然变量启动时使用的初始值与 C/C++ 语言代码相同,但无法强制该变量返回至此初始状态。要复原初始状态,必须通过复位信号来实现。

2.2 块级的复位

复位端口在 FPGA 中用于在应用复位信号时,立即将连接到复位端口的寄存器和块 RAM 还原为初始值。通常 RTL 配置中最重要的操作即选择复位行为。

* TOP LEVEL CONTROL
+-----------+---------------+-----------+
| Interface | Type          | Ports     |
+-----------+---------------+-----------+
| ap_clk    | clock         | ap_clk    |
| ap_rst_n  | reset         | ap_rst_n  |
| interrupt | interrupt     | interrupt |
| ap_ctrl 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值