在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 4943|回复: 15

[求助] FPGA 设计 复位问题

[复制链接]
发表于 2021-12-23 18:08:56 | 显示全部楼层 |阅读模式
悬赏50资产已解决
本帖最后由 TUJzzz 于 2021-12-27 10:50 编辑

    一个由多模块构成的大模块,除了系统主复位mrst,还需要设计一个(evt)信号,效果为在刚开始的时候,这个(evt)信号来临后,模块才开始处理数据,在数据处理过程中,该(evt)信号来临后模块初始化,重新开始处理数据。想问问大家:这种拿事件信号去完成复位的操作该如何设计。         刚入职的应届生,没事师傅带,经常性钻牛角尖,求大佬指点。
    修改:可以理解成子模块有一个系统复位信号mrst,同时还要有一个开始信号restart_evt(模块初始化,从初始状态重新运行),我有点不明白这样相当于有两个复位信号的模块,代码层面该如何实现。
想法1:
always @(posedge mclk or posedge mrst)
begin
      if((mrst||restart_evt))
      begin
            xxx<=1'b0;
      end
      else
      begin
            ...;
      end
end
想法2:
always @(posedge mclk or posedge mrst)
begin
      if(mrst)
      begin
            xxx<=1'b0;
      end
      else
      begin
            if(restart_evt)
            begin
                  xxx<=1'b0;
            end
            else
            begin
                  ...;
            end
      end
end

想法3:
在状态机所有状态里加上
            if(restart_evt)
            begin
                  xxx<=1'b0;
            end
            else
            begin
                  ...;
            end


最佳答案

查看完整内容

我的理解是,外部给送一个复位信号作为系统复位,也就是mrst,一旦有效就是所有模块都复位,而你想给某个特定模块设计一个单独的复位,除了mrst复位有效之外,还能有个复位来单独控制。如果我理解没错的话,这个很好弄啊,设计个寄存器拉到总线上,由软件配置,然后这个信号作为单独的软复位信号,两者相与就可以了,如:reg [7:0] soft_rst_cfg ; reg soft_rst ; wire xx_rst ;// xx模块的单独复位; always @ ...
发表于 2021-12-23 18:08:57 | 显示全部楼层


   
TUJzzz 发表于 2021-12-24 11:21
除了系统主复位(mrst)之外,还需设计一个信号,功能跟复位很相似,该信号来临后(拉高一个周期),模块 ...


我的理解是,外部给送一个复位信号作为系统复位,也就是mrst,一旦有效就是所有模块都复位,而你想给某个特定模块设计一个单独的复位,除了mrst复位有效之外,还能有个复位来单独控制。如果我理解没错的话,这个很好弄啊,设计个寄存器拉到总线上,由软件配置,然后这个信号作为单独的软复位信号,两者相与就可以了,如:reg [7:0] soft_rst_cfg ;

reg         soft_rst ;
wire        xx_rst ;// xx模块的单独复位;

always @ (posedge clk or negedge mrst)
begin
    if (mrst)
        soft_rst <= 1'b0 ;
    else (soft_rst_cfg == 0x5a) //寄存器,由cpu配置,5a复位,a5解复位
            soft_rst <= 1'b1 ;
    else (soft_rst_cfg == 0xa5)
            soft_rst <= 1'b0 ;
end

assign xx_rst = mrst & soft_rst ;
回复

使用道具 举报

 楼主| 发表于 2021-12-23 18:14:41 | 显示全部楼层
顺便想问问大家应该怎么学习FPGA,我就怕自己基础不牢,以后做项目根基不稳,各种出错。公司让我学了点基础语语法后,就打算直接让我写项目,说在项目中成长(约束没学,板子也没上),写了一个多月的需求,概要,详细设计文档。
回复

使用道具 举报

发表于 2021-12-23 21:59:58 | 显示全部楼层
可以做成带load信号的计数器或状态机。mrst一般是异步复位不能与load(e)并||。
module counter(input clk,input mrst,input ld,output reg [3:0] count);
always@(posedge clk or negedge mrst)
begin
  if(!mrst)//异步复位低有效
counter <= 4'b0000;
else if( load || count==4'b0101)
count <= 4'b0000;
else count <= counter + 4'b0001;
end
endmodule//
count可以作为状态机。
仅供参考
  
回复

使用道具 举报

发表于 2021-12-24 08:53:13 | 显示全部楼层


   
TUJzzz 发表于 2021-12-23 18:14
顺便想问问大家应该怎么学习FPGA,我就怕自己基础不牢,以后做项目根基不稳,各种出错。公司让我学了点基础 ...


不知道楼主的数电基础怎么样,建议数电基础弄踏实点,毕竟FPGA属于硬件而不是软件,HDL是硬件描述语言
回复

使用道具 举报

 楼主| 发表于 2021-12-24 09:20:14 | 显示全部楼层
帖子写的是(evt)信号,发出来变成"e号"了
回复

使用道具 举报

发表于 2021-12-24 09:44:34 | 显示全部楼层
把你的需求点说清楚,或者你自己分解的测试点或自己设计的方案描述下,才能帮你看,你说的云里雾里的看不明白。1、学习FPGA,首先练习基本功,先学习下编码规范,然后学习下RAM 设计FIFO,异步处理啥的,后面就可以在项目中慢慢学习了;
2、你说写了一个多月的需求,概要,详细设计文档,能把这些写好才是做好一个项目的基础,需求分解成测试点,根据测试点做设计方案,用code翻译方案,再根据测试点设计UT测试用例,最后检查覆盖率,形成需求到交付端到端的开发流程
回复

使用道具 举报

 楼主| 发表于 2021-12-24 11:21:52 | 显示全部楼层
本帖最后由 TUJzzz 于 2021-12-24 11:36 编辑


   
cfly_chang 发表于 2021-12-24 09:44
把你的需求点说清楚,或者你自己分解的测试点或自己设计的方案描述下,才能帮你看,你说的云里雾里的看不明 ...


除了系统主复位(mrst)之外,还需设计一个信号,功能跟复位很相似,该信号来临后(拉高一个周期),模块初始化重新计算。想问一下这个信号该怎么设计,代码该怎么写(大致思路)。
回复

使用道具 举报

 楼主| 发表于 2021-12-24 11:35:18 | 显示全部楼层


   
cfly_chang 发表于 2021-12-24 09:44
把你的需求点说清楚,或者你自己分解的测试点或自己设计的方案描述下,才能帮你看,你说的云里雾里的看不明 ...


感谢指点
回复

使用道具 举报

发表于 2021-12-24 13:42:50 | 显示全部楼层


   
TUJzzz 发表于 2021-12-24 11:21
除了系统主复位(mrst)之外,还需设计一个信号,功能跟复位很相似,该信号来临后(拉高一个周期),模块 ...


你系统主复位的目的是什么?xilinx已经不推荐使用全局复位了,上电时会自动复位,你还不如用那个设计的信号直接当复位用 复位.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-22 00:33 , Processed in 0.019475 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表