首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动Verilog代码生成问题

自动Verilog代码生成问题
EN

Stack Overflow用户
提问于 2016-03-25 14:07:49
回答 2查看 70关注 0票数 0

我正在尝试使FSM状态的生成参数化或自动化。我尝试了很多方法,但似乎没有办法生成我需要的代码。有人能帮帮忙吗?

我需要生成的代码是ST_DATA_CHECK状态的FSM状态机的一部分:

代码语言:javascript
复制
always @(posedge ui_clk_sync_rst or posedge ui_clk)
  begin
    if (rst) begin
      s_app_cmd           <= 3'b111;
      s_app_en            <= 1'b0;
end
end else begin
        case (ddr3_state)
          ST_INIT :
….
          ST_DATA_CHECK :   // This part of the code, needs to make parameteric
              if (~dwfifo_ef[0]) begin
                s_data_write_active[0] <= 1'b1 ;
              end else if (~dwfifo_ef[1]) begin
                s_data_write_active[1] <= 1'b1 ;
              end else if (~dwfifo_ef[2]) begin
                s_data_write_active[2] <= 1'b1 ;
              end else if (~d_rfifo_ef[0]) begin
                s_data_read_active[0] <= 1'b1 ;
              end else if (~d_rfifo_ef[1]) begin
                s_data_read_active[1] <= 1'b1 ;
              end
          ST_WRITE :
               …
endcase

请注意,例如dwfifo_ef和dwfifo_ef1位可以同时为0,所以这就是为什么我需要在这里使用优先级编码器。

欢迎任何关于我如何使代码参数化的帮助/想法/建议。

谢谢,海克

EN

回答 2

Stack Overflow用户

发布于 2016-03-25 14:41:49

您需要一个带有break语句的for循环:

代码语言:javascript
复制
ST_DATA_CHECK :   
              for (int i=0;i<$bits(dwfifi_ef);i++)
              if (~dwfifo_ef[i]) begin
                s_data_write_active[i] <= 1'b1 ;
                break;
              end 
票数 1
EN

Stack Overflow用户

发布于 2016-03-25 16:04:29

@dave_59刚刚解决了您的问题,但是正如您所说的“在我的if语句中有两个信号s_data_write_active和s_data_read_active",试试下面这样的方法如何?

代码语言:javascript
复制
ST_DATA_CHECK : 
              if (|dwfifo_ef == 1'b1)
                for (int i=0;i<$bits(dwfifi_ef);i++)
                  if (~dwfifo_ef[i]) begin
                    s_data_write_active[i] <= 1'b1 ;
                    break;
                  end 
              else 
                for (int i=0;i<$bits(d_rfifo);i++)
                  if (~d_rfifo[i]) begin
                    s_data_read_active[i] <= 1'b1 ;
                    break;
                end 

(我没有试图编译、模拟或综合这一点,因此我的短语类似于。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36214909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档