前言

本复位只针对Vivado中的寄存器复位。

什么时候需要复位?到底要不要复位?怎么复位?复位有什么卵用?

该复位的寄存器需要复位,复位使得寄存器恢复初始值,有的寄存器并不需要复位(数据流路径上)。

官方说法如下:具体可查看ug949。

流程

所以,问题来了,为了不使用复位信号该怎么赋初始值。

注意:reg语句中给寄存器赋初始值,在FPGA上电配置后值就为这个初始值。

如果只有复位语句中的初始值,那么上电配置(configuration )后和复位(reset)后寄存器都为此初始值。

如果reg语句给了初始值x1,且在复位语句中赋初始值x2,那么上电配置后初始值为x1,复位后寄存器初始值为x2。

代码验证:

1.如下代码,不复位也不赋初始值,vivado综合后寄存器初始值全为0。

(*DONT_TOUCH="yes"*)reg [:] r_cnt_1;
always @(posedge i_clk)
begin
r_cnt_1 <= r_cnt_1 + 'd1;
end //always

2.如下代码,不复位赋初始值,vivado综合后寄存器初始值为代码中赋的初始值。

(*DONT_TOUCH="yes"*)reg [:] r_cnt_1 = 6'h34;
always @(posedge i_clk)
begin
r_cnt_1 <= r_cnt_1 + 'd1;
end //always

3.如下代码,使用复位但不给初始值,vivado综合后寄存器初始值为代码中复位语句中赋的初始值。(Xilinx不推荐异步复位)

(*DONT_TOUCH="yes"*)reg [:] r_cnt_0;
always @(posedge i_clk,negedge i_rst_n)
begin
if (~i_rst_n)
r_cnt_0 <= 'h12;
else
r_cnt_0 <= r_cnt_0 + 'd1;
end //always

4.如下代码,既使用复位且给初始值,vivado综合后寄存器初始值为reg赋的初始值。

(*DONT_TOUCH="yes"*)reg [:] r_cnt_2 = 'h01;
always @(posedge i_clk,negedge i_rst_n)
begin
if (~i_rst_n)
r_cnt_2 <= 'h12;
else
r_cnt_2 <= r_cnt_2 + 'd1;
end //always

另一个问题,vivado综合寄存器初始值怎么查看?

(1)打开综合后的工程。

(2)在网表中查看,不过只能单个点击查看。。。。

(3)在properties窗口中查看初始值如下,右侧可以更改初始值(没使用过。。)

以上。

Vivado寄存器初始值问题的更多相关文章

  1. C++类成员默认初始值

    有时候我们会不给C++类成员变量赋初始值,或是因为忘记在构造函数中指定(C++11可以写在类内),或是觉得没有必要写.然而,因为觉得编译器会把变量赋成0而不写是错误的.本文通过C++标准来解释这个问题 ...

  2. Bash 什么时候会给 HOME 赋初始值

    今天无意发现下面这个表现: $  env -i bash -c cd bash: line 0: cd: HOME not set $ env -i bash -c 'echo $HOME' 这表明了 ...

  3. Holt-Winters原理和初始值的确定

      关于模型 (来自以下PPT,从第4页开始)   关于初始值: 以下文档给出了三个模型的初始值计算的思路. 大致思路如下,建立一个p阶移动平均模型,估计出参数即为初始值,具体的根据三种不同的模型,有 ...

  4. 关于int,integer初始值问题

  5. C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法

    对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET ...

  6. Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence

    Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...

  7. malloc error:初始值设定元素不是常量

    #include <stdio.h> #include <stdlib.h> char *buf = (char *)malloc(BUFSIZ); setbuf(stdout ...

  8. “System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常---解决方案

    "System.Data.SqlClient.SqlConnection"的类型初始值设定项引发异常 问题出在了 .net 的C:\WINDOWS\Microsoft.NET\Fr ...

  9. Access自动编号的初始值设置及重置编号

    项目上需要在Access数据库,发现自动编号的列无法设置初始值和步长,但是可以使用SQL语句来设置它. 方法如下: ALTER TABLE tableName ALTER COLUMN ID COUN ...

随机推荐

  1. JavaScript类型化数组(二进制数组)

    0.前言 对于前端程序员来说,平时很少和二进制数据打交道,所以基本上用不到ArrayBuffer,大家对它很陌生,但是在使用WebGL的时候,ArrayBuffer无处不在.浏览器通过WebGL和显卡 ...

  2. SAP MM 预留单据里的Base date和Requirement date

    SAP MM 预留单据里的Base date和Requirement date Base date可以在预留创建的初始界面指定, 这个日期可以作为预留各个行项目默认的requirement date. ...

  3. iOS----------viewcontroller中的dealloc方法不调用

    ios的viewcontroller生命周期是 init -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppe ...

  4. Android开发如何轻松实现基于Tesseract的Android OCR应用程序

    介绍 此应用程序使用Tesseract 3的Tesseract OCR引擎,该引擎通过识别字符模式( https://github.com/tesseract-ocr/tesseract )来工作. ...

  5. windows 服务中托管asp.net core

    在windows 服务中托管asp.net core SDK 2.1.300 官方示例 1.添加运行标识符 xml <PropertyGroup> <TargetFramework& ...

  6. linux中Samba服务器的配置

    Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件 ...

  7. 扒一扒EOS的前世今生

    扒一扒EOS的前世今生 EOS是什么?   EOS可以认为是Enterprise Operation System的缩写,即商用的一款分布式区块链操作系统,EOS主要为了解决百万级用户的使用问题,为企 ...

  8. 平滑升级你的Nginx

    1.概述(可以直接跳过看第2部分) Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程. (2)老进程负责处理仍然没有处理完的请求,但不再接受处理 ...

  9. 关于vue-router中点击浏览器前进后退地址栏路由变了但是页面没跳转

    情景: 在进行正常页面跳转操作后(页面A跳转到页面B),点击浏览器的左上角的‘后退’按钮,点击后,可以看到url地址已经发生了变化(url由页面B变为页面A),hash值也已经是上一页的路由,但是浏览 ...

  10. JavaScript 函数闭包的应用

    一.模仿块级作用域 JavaScript 没有块级作用域的概念,那么可以模拟像java中将很多变量私有化封装起来,保护数据,防止数据泄漏,封装细节,这样安全性和可控性更高 function box(c ...