全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

for循环语句基本用法及示例 介绍几种可综合的

时间:2023-08-03 10:22

人气:

作者:admin

标签: for  for循环  Verilog  VCS 

导读:利用for循环实现对信号的赋值。...

1、采用for(int*)实现不同信号赋值的循环

利用for循环实现对信号的赋值。

如下案例中,func_id_vld为512bit,需要根据func_mode_in[1024-1:0]给func_id_vld赋值,func_mode_in每2个bit对应一个func_id_vld,即func_mode_in[1:0]对应func_id_vld[0],func_mode_in[3:2]对应func_id_vld[1],func_mode_in[1023:1022]对应func_id_vld[511], 赋值规则为func_mode_in[1:0]为2‘b01时,func_id_vld[0]为1,以此类推。

采用for(int*)类型格式,可以在一个else分支中使用,不需要使用generate,使用更加灵活,使用范围更广。

always@(posedge  clk)
    if(~rst_n) begin
       func_id_vld <= 512'b0 ;
    end else begin
        for(int i=0; i<512;i=i+1) begin : func_id_vld_gen
            func_id_vld[i] <= (func_mode_in[2*i+:2]==2'b01) ;
        end
    end

2、采用for(int*)实现同一个信号赋值的循环

下图所示,采用for(int*)类型格式实现了一个16mux1的循环赋值语句,实现不同条件一下,对debug_test_16mux1的赋值操作,即16mux1的逻辑。

always@(*) begin
    debug_test_16mux1 = 128'd0;  
    for(int i=0; i<16;i=i+1) begin : debug_test_16mux1_gen
        if(cfg_16mux1_mode ==i) begin
            debug_test_16mux1  =  debug_test_in[128*i+:128] ;
            break ;
        end
    end
end
always@(*) begin
  case(cfg_16mux1_mode)
  0 : debug_test_16mux1  =  debug_test_in[127  :0    ];
  1 : debug_test_16mux1  =  debug_test_in[255  :128  ];
  2 : debug_test_16mux1  =  debug_test_in[383  :256  ];
  3 : debug_test_16mux1  =  debug_test_in[511  :384  ];
  4 : debug_test_16mux1  =  debug_test_in[639  :512  ];
  5 : debug_test_16mux1  =  debug_test_in[767  :640  ];
  6 : debug_test_16mux1  =  debug_test_in[895  :768  ];
  7 : debug_test_16mux1  =  debug_test_in[1023 :896  ];
  8 : debug_test_16mux1  =  debug_test_in[1151 :1024 ];
  9 : debug_test_16mux1  =  debug_test_in[1279 :1152 ];
  10: debug_test_16mux1  =  debug_test_in[1407 :1280 ];
  11: debug_test_16mux1  =  debug_test_in[1535 :1408 ];
  12: debug_test_16mux1  =  debug_test_in[1663 :1536 ];
  13: debug_test_16mux1  =  debug_test_in[1791 :1664 ];
  14: debug_test_16mux1  =  debug_test_in[1919 :1792 ];
  15: debug_test_16mux1  =  debug_test_in ;
  endcase 
end

NOTE:在for(int*)语句中,如果写成debug_test_16mux1 = debug_test_in[128*i+127:128*i] , VCS会报语法错误;只写成debug_test_16mux1 =debug_test_in[128*i+:128],此处需要注意。





审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信