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

  • 来源:处芯积律
  • 时间:2023-08-04 03:33:44


(资料图片仅供参考)

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    endend
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],此处需要注意。

审核编辑:刘清

关键词:

精彩推送

613邯郸(邯6203简介)
产业 2023/08/04
牛肋排怎么做好吃
策划 2023/08/04
陌陌注销账号的方法
集线器 2023/08/04
何以大青山!不负少年狂!
信息化 2023/08/04
送人礼物从心动开始
CPU 2023/08/04
科学认识阿斯巴甜
行业 2023/08/04

资讯播报

歌声嘹亮伴我行
育儿 2023/08/04
快讯2023-08-03 19:06:08
主板 2023/08/04