一、起因

最近在开发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. IE、Chrome、Firefox修改http header信息

    在测试系统交互时,可能会碰到需要修改header信息的要求,下面介绍下如何在IE.Chrome.Firefox修改http header信息. 1.IE(fiddler) >在IE下修改head ...

  2. iframe出现双层滚动条解决方案

    在开发中出现一个iframe双滚动条问题,查了很多资料,网上的解决方案是定义iframe的onload事件,加载时重新加载高度,但是由于项目中页面渲染完成后,点击按钮动态生成数据,这时候上面的方案就不 ...

  3. 如何实现基于Cortex-A9 的UART裸机驱动

    前言 Uart在一个嵌入式系统中是一个非常重要的模块,他承担了CPU与用户交互的桥梁.用户输入信息给程序.CPU要打印一些信息给终端都要依赖UART. 本文将以Exynos4412的UART控制器为基 ...

  4. CF650D Zip-line

    CF650D Zip-line 大概题面: 给定一个长度为 \(n\) 的序列以及\(m\)个操作,每个操作形如" \(a_i,b_i\) ",表示将序列中第 \(a_i\) 个数 ...

  5. Mac升级Ventura 13.0.1后无法远程ssh连接服务器

    原因 原因是Mac os Ventura升级了ssh到9.0,ssl到3.3.6,而服务器上的sshd还是老版本:服务器上的老版本ssh和ssl无法和mac上的新版本ssh和ssl交互,新版本ssh加 ...

  6. mfc的ClistCtrl控件列的排序

    在网上看了许多排序的方法,都没看懂,初学者的悲剧,然后就自己弄了个,请大家指正. ClistCtrl控件的行带着一个结构体,不过那结构体不好懂,看得眼花缭乱.好多也弄不明白,就自己写了个结构体,把一行 ...

  7. Devexpress PdfViewer汉化及隐藏右键菜单

    先看效果图 1.效果图 隐藏了打印与文档属性功能 2.原图 1.关键事件 PopupMenuShowing public From() { InitializeComponent(); //弹出菜单加 ...

  8. Cloud Studio:颠覆传统的云端开发与学习解决方案

    Cloud Studio Cloud Studio(云端 IDE)是一款基于浏览器的集成开发环境,它为开发者提供了一个高效.稳定的云端工作站.用户在使用 Cloud Studio 时,无需进行任何本地 ...

  9. 【Mac + Appium + Java1.8(三)】之IOS自动化环境安装配置以及简单测试用例编写(模拟器、真机)

    前提条件: =========================================== 1.Xcode版本为Xcode10及以上2.Appium版本必须为1.9及以上,因为Xcode为10 ...

  10. Python新手爬虫三:爬取PPT模板

    爬取网站:第一PPT(http://www.1ppt.com/) 此网站真的良心 老样子,先上最后成功的源码(在D盘创建一个"D:\PPT"文件夹,直接将代码执行就可获取到PPT) ...