【问题标题】:Synthesized for loop in always_ff block在 always_ff 块中合成 for 循环
【发布时间】:2021-01-19 10:09:11
【问题描述】:

我想编写以下代码,使其更具可读性和更好看。

always_ff @(posedge clk or negedge rst_n) 
    if(!rst_n)
        line_pipe <= 0;
    else 
        begin
            line_pipe[00] <= Func(inline);
            line_pipe[01] <= Func(line_pipe[00]);
            line_pipe[02] <= Func(line_pipe[01]);
            line_pipe[03] <= Func(line_pipe[02]);
            line_pipe[04] <= Func(line_pipe[03]);
            line_pipe[05] <= Func(line_pipe[04]);
            line_pipe[06] <= Func(line_pipe[05]);
            line_pipe[07] <= Func(line_pipe[06]);
            line_pipe[08] <= Func(line_pipe[07]);
            line_pipe[09] <= Func(line_pipe[08]);
            line_pipe[10] <= Func(line_pipe[09]);
            line_pipe[11] <= Func(line_pipe[10]);
            line_pipe[12] <= Func(line_pipe[11]);
            line_pipe[13] <= Func(line_pipe[12]);
            line_pipe[14] <= Func(line_pipe[13]);
            line_pipe[15] <= Func(line_pipe[14]);
        end

我可以用for 循环重写这段代码吗?

【问题讨论】:

    标签: function for-loop verilog system-verilog synthesis


    【解决方案1】:

    假设您当前的代码已合成,那么它也应该会合成。您可以对 16 个作业中的 15 个使用 for 循环:

    always_ff @(posedge clk or negedge rst_n) 
        if(!rst_n)
            line_pipe <= 0;
        else 
            begin
                line_pipe[00] <= Func(inline);
                for (int i=1; i<16; i++) begin
                    line_pipe[i] <= Func(line_pipe[i-1]);
                end
            end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2015-10-02
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多