一、起因

最近在开发Lattice的一款低功耗FPGA时,遇到了reg初始化复位问题,经过在网上搜寻相关资料整理如下;

二、FPGA中reg的初始化方式

  1. 在定义时初始化,例如:

    reg r_test = 1'b1;
  2. 在复位语句中,对reg进行赋值,例如:
reg r_test;
always@(posedge sys_clk) begin
if(~sys_rst_n) begin
r_test <= 'b0;
end
else begin
//logic
end
end
  1. initial语句初始化

    很多人认为initial语句只可以用于仿真中,不可以被综合,实际上initial语句是可以被综合的(至少在vivado中可以),比如:
reg r_test;
initial begin
r_test = 'b0;
end

三、问题

以上三种方式在Xilinx FPGA中都可以成功的对reg初始化,但是在Lattice的ICE5LP4K中,赋值方式1似乎不同,例如以下代码:

     reg             [15:0]              r_ADC_READ_NUM          = 16'd64        ;
always @ (posedge SYS_CLK ) begin
if( r_CMD_VALID)begin
r_TX_BUF_RCNT <= r_ADC_READ_NUM;
end else if(r_TX_BUF_REN)begin
r_TX_BUF_RCNT <= r_TX_BUF_RCNT - 1'b1 ;
end
// r_TX_BUF_RCNT_DONE <= r_TX_BUF_RCNT == 10'd0? 1'b1 : 1'b0 ; r_TX_BUF_PRE <= {r_TX_BUF_PRE[14:0] , r_CMD_VALID };
r_TX_BUF_REN <= r_QSPI_TN & (r_TX_BUF_PRE[13] | r_QSPI_OFF_SEL==4'd0 & s_QSPI_CLK_UP ) & r_TX_BUF_RCNT>0 ;// MCU READ 128 Byte once
end

虽然r_ADC_READ_NUM寄存器已经通过方式1进行了初始化,但是在上板测试中r_TX_BUF_REN一直不能被拉高,最后让我不得不怀疑上了r_TX_BUF_RCNT的数值,该寄存器在r_CMD_VALID时被赋值为r_ADC_READ_NUM,结果发现r_TX_BUF_RCNT一直为0,说明r_ADC_READ_NUM 并没有被初始化,对其进行复位初始化后,系统逻辑正常运行:

always @(posedge SYS_CLK or negedge sys_nRst) begin
if(~sys_nRst) begin
r_ADC_READ_NUM <= 16'd64; // initial value: default 64
end
else begin
end
end

四、总结

对于xilinx FPGA中,赋值方式1可以正常工作,在lattice中不 work,因此,为了避免这种情况,建议养成复位赋值的方式对reg初始化,以确保FPGA上电后reg中的数据为一个我们设定的初值。

Lattice、Xilinx FPGA reg初始化赋值问题的更多相关文章

  1. Lattice系列FPGA入门相关0(Lattice与Altera、Xilinx对比及入门)

    需求说明:Lattice系统FPGA入门 内容       :Lattice与Altera.Xilinx对比 来自       :时间的诗 1.Lattice与Altera.Xilinx对比 latt ...

  2. 你真的会Xilinx FPGA的复位吗?

    Get Smart About Reset: Think Local, Not Global. 对于复位信号的处理,为了方便我们习惯上采用全局复位,博主在很长一段时间内都是将复位信号作为一个I/O口, ...

  3. Xilinx FPGA LVDS应用

    最近项目需要用到差分信号传输,于是看了一下FPGA上差分信号的使用.Xilinx FPGA中,主要通过原语实现差分信号的收发:OBUFDS(差分输出BUF),IBUFDS(差分输入BUF). 注意在分 ...

  4. Xilinx FPGA复位逻辑处理小结(转)

    Xilinx FPGA复位逻辑处理小结 1. 为什么要复位呢? (1)FPGA上电的时候对设计进行初始化: (2)使用一个外部管脚来实现全局复位,复位作为一个同步信号将所有存储单元设置为一个已知的状态 ...

  5. Xilinx FPGA结构

    FPGA是什么?FPGA是现场可编程逻辑阵列,由可编程逻辑资源(LUT和 REG),可编程连线,可编程I/O构成.Xilinx的FPGA的基本结构是一样的,但随着半导体工艺的发展,FPGA的逻辑容量越 ...

  6. Xilinx FPGA全局介绍

    Xilinx FPGA全局介绍 现场可编程门阵列 (FPGA) 具有诸多特性,无论是单独使用,抑或采用多样化架构,皆可作为宝贵的计算资产:许多设计人员并不熟悉 FPGA,亦不清楚如何将这类器件整合到设 ...

  7. (C#基础) byte[] 之初始化, 赋值,转换。(转)

    byte[] 之初始化赋值 用for loop 赋值当然是最基本的方法,不过在C#里面还有其他的便捷方法. 1. 创建一个长度为10的byte数组,并且其中每个byte的值为0. byte[] myB ...

  8. devexpress中ASPxGridView控件初始化赋值

    写在ASPxGridView中OnCellEditorInitialize="ASPxGridView_progoods_CellEditorInitialize"  事件中: / ...

  9. (C#基础) byte[] 之初始化, 赋值,转换。

    byte[] 之初始化赋值 用for loop 赋值当然是最基本的方法,不过在C#里面还有其他的便捷方法. 1. 创建一个长度为10的byte数组,并且其中每个byte的值为0. byte[] myB ...

  10. 基于Xilinx FPGA的视频图像采集系统

    本篇要分享的是基于Xilinx FPGA的视频图像采集系统,使用摄像头采集图像数据,并没有用到SDRAM/DDR.这个工程使用的是OV7670 30w像素摄像头,用双口RAM做存储,显示窗口为320x ...

随机推荐

  1. mybatis坑之数字字符串比对

    在mybatis开发过程中有需要在sql中判断查询哪张表,如下sql: SELECT a.tag_name, a.tag_id, count( 0 ) AS base_total FROM mm_dd ...

  2. 10W数据量导入与现有表数据去重

    使用的是PostgreSQL 在做大数据量(十万级)导入时,某些字段和数据库表里数据(千万级)重复的需要排除掉,把表数据查询出来用程序的方式判断去重效率很低,于是考虑用临时表. 先把新数据插入到临时表 ...

  3. Github 通义千问模型测试

    通义千问 大模型安装 相关地址 https://github.com/QwenLM/Qwen2-Audio/blob/main/README_CN.md PS C:\Users\supermao> ...

  4. redux-persist状态持久化6.0.0版本

    网上挺少关于redux-persist的教程,个人去github看了下,看的一脸懵逼,然后百度查了查,发现redux-persist每一个版本的语法改的都挺大的,造成我下载的6版本在网上之中到一个教程 ...

  5. ubuntu安装过程(双系统模式)中遇到的坑

    笔者在安装上win11后,看我的M.2硬盘太大,就想着以双系统方式再安装上个ubuntu,以方便以后使用.没想到和win11一样,也是连遇到挫折,一番折腾后最终才成功.下面记录下安装要点. 安装win ...

  6. C++ 性能反向优化——用哈希表unordered_map消除if else导致性能降低。

    从代码整洁的角度考虑,对于不同的值将调用相同参数的不同函数,我们通常可以通过建立从值到对应函数指针的哈希表,从而将if else消除.但实际可能使性能更低,以下是测试例子. 原因在于,if else分 ...

  7. 查看tensorflow pb模型文件

    """ @Author: Qiangz @Date: 2019/7/5 @Description: """ import tensorflo ...

  8. Coze插件发布!PDF转Markdown功能便捷集成,打造你的专属智能体

    近日,TextIn开发的PDF转Markdown插件正式上架Coze平台. 在扣子搜索"pdf转markdown",或在Coze平台搜索"pdf2markdown&quo ...

  9. JavaScript – 用 Generator 运行异步函数 & await async

    前言 上一篇 JavaScript – Promise 介绍了如何用 JS 编写可读性高的异步函数. 但其实呢, Promise 还不是最好的. 在 es6 之前, Promise 比起回调地狱是好了 ...

  10. 2024.09.18初赛模拟MX-S/P6029记录

    MX-S 太简单了,没啥难度.\yiw $ 1, 3, 5, 7, 9 $ 的二叉搜索树棵数是卡特兰数. P6029 题意 给定一张有 $ n $ 个点,$ m $ 条边的图.可以任意交换途中两条边的 ...