微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教一个verilog问题,谢谢!

请教一个verilog问题,谢谢!

时间:10-02 整理:3721RD 点击:

  1. `ifdef D3D_SYNC_RESET
  2. always @(posedge clk_core) begin
  3. `else
  4. always @(posedge clk_core or negedge rst_x) begin
  5. `endif
  6.   if (rst_x == `D3D_RESET_POL) begin
  7.     r_state <= IDLE;
  8.   end else begin
  9.     case (r_state)
  10.       IDLE: begin
  11.         if (i_en) r_state <= LINE_0;
  12.       end
  13.       LINE_0: begin
  14.         if (i | w_reject_l0) r_state <= LINE_1;
  15.       end
  16.       LINE_1: begin
  17.         if (i | w_reject_l1) r_state <= LINE_2;
  18.       end
  19.       LINE_2: begin
  20.         if (i | w_reject_l2) r_state <= IDLE;
  21.       end
  22.     endcase
  23.   end
  24. end

复制代码


请教下,这个里面的`ifdef,他是到`endif结束呢?还是把下面状态机运行完呢?假设D3D_SYNC_RESET已定义。谢谢!



   ifdef与c语言中的含义一样,这里你假设D3D_SYNC_RESET已定义那么代码将变成
always @(posedge clk_core) begin
  if (rst_x == `D3D_RESET_POL) begin
    r_state <= IDLE;
  end else begin
    case (r_state)
      IDLE: begin
        if (i_en) r_state <= LINE_0;
      end
      LINE_0: begin
        if (i | w_reject_l0) r_state <= LINE_1;
      end
      LINE_1: begin
        if (i | w_reject_l1) r_state <= LINE_2;
      end
      LINE_2: begin
        if (i | w_reject_l2) r_state <= IDLE;
      end
    endcase
  end
end
而不是你想的状态机运不运行的问题,与这个无关


懂了,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top