加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

FPGAVerilog中如何实现for循环

(2020-03-08 21:08:19)
标签:

fpga

verilog

for循环

分类: FPGA
1、几种verilog的For循环的实现方法
参考总结自Verilog那些事。。。整合篇这里介绍了几种For循环,包括嵌套循环的实现方法等。。。。比较实用

    for ( i=0; i<10; i++ )
{
    Act++;
}
//1、时序实现
reg [7:0] x;
reg [7:0] C1;
reg [7:0] Act;
if(!rst_n)
    begin
        x <= 0;
        C1 <= 0;
        Act <= 0; //initial the x , C1 , Act to 0
    end
else
    begin
        case ( i )
            0:
                begin
                    if ( x == C1 )
                        begin
                            x <= x + 1'b1;
                            Act <= Act + 1'b1;
                        end
                    if ( C1 == 10 - 1 )
                        begin
                            x <= 8'd0;
                            C1 <= 8'd0;
                            i <= i + 1'b1;
                        end   
                    else
                        C1 <= C1 + 1'b1;
                end
    end
endcase
//2、步骤实现
case ( i )
    0:
        if ( x == 10 )
            begin
                x <= 8'd0;
                i <= i + 1'b1;
            end
        else
            begin
                x <= x + 1'b1;
                Act <= Act + 1'b1;
            end
endcase
 
 
 

for ( x=0; x<10; x++ )
{
    for ( y=0; y<10; y++ )
    {
        Act++;
    }
}
//1、时序实现       
case ( i )
    0:
        begin
            if ( x == C1 )
                begin
                    x <= x + 1'b1;
                    Act <= Act + 1'b1;
                end
            if ( C1 == 100-1 )
                begin
                    x <= 0;
                    C1 <= 0;
                    i <= i + 1'b1;
                end
            else
                C1 <= C1 + 1'b1;
        end
endcase
//2、步骤实现
case ( i )
    0:
        if ( x == 100 )
            begin
                x <= 8'd0;
                i <= i + 1'b1;
            end
        else
            begin
                x <= x + 1'b1;
                Act <= Act + 1'b1;
            end
endcase
 
 
 
for ( x=0; x<10; x++ )
{
    for ( y=0; y<10; y++ )
    {
        Act1++;
        Act2++;
    }
}
//1、时序实现
case ( i )
    0:
        begin
            if ( x == C1 )
                begin
                    x <= x + 1'b1;
                    Act1 <= Act1 + 1'b1;
                    Act2 <= Act2 + 1'b1;
                end
            if ( C1 == 100-1 )
                begin
                    x <= 0;
                    C1 <= 0;
                    i <= i + 1'b1;
                end
            else
                C1 <= C1 + 1'b1;
        end
endcase
//2、步骤实现
case ( i )
    0:
        if ( x == 100 )
            begin
                x <= 8'd0;
                i <= i + 1'b1;
            end
        else
            begin
                x <= x + 1'b1;
                Act1 <= Act1 + 1'b1;
                Act2 <= Act2 + 1'b1;
            end
endcase
 
for ( x=0; x<10; x++ )
{
    Act1++;
    for ( y=0; y<10; y++ )
     
        Act2++;
    }
}
//1、时序实现
case ( i )
    0:
        begin
            if ( x == C1 )
                begin
                    x <= x + 8'd10;
                    Act1 <= Act1 + 1'b1;
                end
            if ( y == C1 )
                begin
                    y <= y + 1'b1;
                    Act2 <= Act2 + 1'b1;
                end
            if ( C1 == 100-1 )
                begin
                    x <= 0;
                    y <= 0;
                    C1 <= 0;
                    i <= i + 1'b1;
                end
            else
                C1 <= C1 + 1'b1;
        end
endcase
//2、步骤实现
case ( i )
    0:
        if ( x == 10 )
            begin
                x <= 8'd0;
                y <= 8'd0;
                i <= i + 1'b1;
            end
        else if ( y == 10 )
            begin
                x <= x + 1'b1;
                y <= 8'd0;
                Act1 <= Act1 + 1'b1;
            end
        else
            begin
                y <= y + 1'b1;
                Act2 <= Act2 + 1'b1;
            end
endcase
 
 
   
for ( x=0; x<10; x++ )
{
    Act1++;
    for ( y=0; y<10; y++ )
         
        Act2 = Act1;
    }
}
//1、时序实现
case ( i )
    0:
        begin
            if ( x == C1 )
                begin
                    x <= x + 8'd10;
                    Act1 = Act1 + 1'b1; //使用阻塞赋值
                end
            if ( y == C1 )
                begin
                    y <= y + 1'b1;
                    Act2 <= Act1;
                end
            if ( C1 == 100-1 )
                begin
                    x <= 0;
                    y <= 0;
                    C1 <= 0;
                    i <= i + 1'b1;
                end
            else
                C1 <= C1 + 1'b1;
        end
//2、步骤实现
case ( i )
    0:
        if ( x == 10 )
            begin
                x <= 8'd0;
                y <= 8'd0;
                i <= i + 1'b1;
            end
        else if ( y == 10 )
            begin
                x <= x + 1'b1;
                y <= 8'd0;
                Act1 <= Act1 + 1'b1;
            end
        else
            begin
                y <= y + 1'b1;
                Act2 <= Act1;
            end
endcase
 
 
 
   
for ( x=0; x<10; x++ )
{
    Act1 = Act2;
    for ( y=0; y<10; y++ )
    {
        Act2++;       
    }
}
//1、时序实现
case ( i )
    0:
        begin
            if ( x == C1 )
                begin
                    x <= x + 8'd10;
                    Act1 <= Act2; //使用阻塞赋值
                end
            if ( y == C1 )
                begin
                    y <= y + 1'b1;
                    Act2 = Act2 + 1'b1;
                end
            if ( C1 == 100-1 )
                begin
                    x <= 0;
                    y <= 0;
                    C1 <= 0;
                    i <= i + 1'b1;
                end
            else
                C1 <= C1 + 1'b1;
        end
//2、步骤实现
case ( i )
    0:
        if ( x == 10 )
            begin
                x <= 8'd0;
                y <= 8'd0;
                i <= i + 1'b1;
            end
        else if ( y == 10 )
            begin
                x <= x + 1'b1;
                y <= 8'd0;
                Act1 <= Act2;
            end
        else
            begin
                y <= y + 1'b1;
                Act2 <= Act2 + 1'b1;
            end
endcase
 
 
 
     
for ( x=0; x<10; x++ )
{
    Act2++;   
    for ( y=0; y<10; y++ )
    {
        Act1 = Act2;       
    }
}

    case ( i )
        0:
            begin
                if ( x == C1 )
                    begin
                        x <= x + 8'd10;
                        Act2 <= ( x != 101 - 1 ) ? Act2 + 1'b1 : Act2;
                    end
                if ( y + 1 == C1 )
                    begin
                        y <= y + 1'b1;
                        Act1 <= Act2;
                    end
                if ( C1 === 101 - 1 )
                    begin
                        x <= 8'd0;
                        y <= 8'd0;
                        i <= i + 1'b1;
                    end
                else
                    C1 <= C1 + 1'b1;
            end
    endcase

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有