首页 > 其他分享 >Lattice、Xilinx FPGA reg初始化赋值问题

Lattice、Xilinx FPGA reg初始化赋值问题

时间:2024-11-08 16:30:43浏览次数:1  
标签:初始化 begin FPGA READ Lattice Xilinx reg 赋值

一、起因
最近在开发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中的数据为一个我们设定的初值。

标签:初始化,begin,FPGA,READ,Lattice,Xilinx,reg,赋值
From: https://www.cnblogs.com/dy-stairmed/p/18535369

相关文章

  • fpga LCD屏幕显示
    目录matlab生成coe文件150x150的JPG转化为coe文件 ROMip核配置​编辑LCD显示驱动代码 原理和vga一致。 vga_parameter_cfg,v gen_data vga_driver vga_toptop_pin_xdc上板验证matlab生成coe文件150x150的JPG转化为coe文件%实现将图片的格式转换为数据处......
  • 基于Zynq FPGA对雷龙SD NAND的测试
    一、SDNAND特征1.1SD卡简介雷龙的SDNAND有很多型号,在测试中使用的是CSNP4GCR01-AMW与CSNP32GCR01-AOW。芯片是基于NANDFLASH和SD控制器实现的SD卡。具有强大的坏块管理和纠错功能,并且在意外掉电的情况下同样能保证数据的安全。其特点如下:接口支持SD2......
  • FPGA实现复杂状态机的跳转-判断标准数据帧
    填补之前的状态机跳转挖的坑;数据源对比标准帧:第一步:ROM当做数据源:使能开启,使用地址addr控制其输出。(使用状态机写入RAM时的控制选用addr)RAM作为标准帧的缓存,使用addr_ram作为RAM的写入地址。此时ROM的地址比RAM的地址延迟了一个节拍;(addr_ram<=addr;)第二步:RAM缓存写满之......
  • 基于FPGA的可控分频器设计与应用
    ###标题:基于FPGA的可控分频器设计与应用---####正文:可控分频器在数字电路中扮演着重要角色,尤其是在频率合成和时钟管理方面。基于FPGA的实现不仅灵活且易于修改,本文将详细介绍如何设计和实现一个可控分频器,并展示其应用实例。---###一、可控分频器的基本概念可控分频......
  • FPGA在图像伽玛校正中的应用
    随着数字图像处理技术的不断发展,图像质量优化成为了一个重要的研究方向。在图像处理中,伽玛(Gamma)校正是一种广泛应用的技术,用于调整图像的亮度和对比度,以改善图像质量,使之更符合人眼的视觉感知。特别是在FPGA(现场可编程门阵列)平台上实现伽玛校正,由于其高并行性和灵活性,成为了图像处......
  • FPGA中的图像平移技术
    在图像处理领域,图像平移是一种基本的几何变换操作,它能够将图像中的所有像素在二维平面上按照指定的方向和距离进行移动。这种操作不改变图像的形状或大小,但会显著影响图像在坐标系中的位置。随着FPGA(现场可编程门阵列)技术的快速发展,将图像平移算法部署到FPGA上已成为提高图像处理......
  • 转存——Quartus II FPGA程序仿真运行时出现错误“error occurred during modelsim si
    起因使用QuartusII软件进行FPGA程序仿真,运行时出现错误“erroroccurredduringmodelsimsimulation”,上网查询解决方法,找了很久都没找到,最后在一个CSDN博客的评论里找到解决方法。现将解决方法转存如下。错误示例解决步骤1.依次点击simulation,option2.依次点击Quartus......
  • FPGA图像处理实战:图像裁剪技术
    在图像处理领域,图像裁剪是一项基础且关键的技术,它允许我们从原始图像中裁剪出感兴趣的区域,同时丢弃不相关的部分。这种技术在人脸识别、目标跟踪、图像分割等多种应用场景中发挥着重要作用。随着FPGA(现场可编程门阵列)技术的快速发展,将图像裁剪算法部署到FPGA上已成为提高处理速度......
  • FPGA(现场可编程门阵列)的时序分析
    在FPGA(现场可编程门阵列)的时序分析中,tsu(建立时间)、th(保持时间)、tco(时钟到输出延时)、tpd(引脚到引脚延时)以及tcd(可能指的是信号在组合逻辑中的传输延时,尽管它在FPGA时序分析中不是一个标准的术语,但在此为全面解答而提及)是几个至关重要的参数。这些参数共同决定了FPGA电路的性......
  • FPGA实例——按键消抖和自定义IP封装
    按键消抖:简介:目前,在大部分的FPGA开发板上都带有机械按键,由于机械按键的物理特性,按键在按下和释放的过程中,存在一段时间的抖动,这就导致在识别按键的时候可以检测到多次的按键按下,而通常检测到一次按键输入信号的状态为低电平,就可以确认按键被按下了,所以我们在使用按键时往往需......