verilog中计数器和信号展宽的小技巧

1 Verilog中信号展宽的两种写法


第一种写法: 把信号signal_a 展宽8拍

    reg signal_a_dly1....signal_a_dly8  
    然后,把这些中间信号进行或操作
    out_signal_a<=(signal_a_dly1|signal_a_dly2|...signal_a_8)

第二种写法: 利用移位寄存器把信号signal_a 展宽8拍

     reg[7:0]signal_a_shift;
     signal_a_shift<={signal_a[6:0],signal_a};
     out_signal_a<=|{signal_a_shift};
     如果写成了这种形式,实际上就展宽了9拍。
     out_signal_a<=|{signal_a_shift,signal_a};

2 verilog中计数器的一种实现


我们要实现在96cycle内,只计前32个cycle(只有前32个cycle有效,后面cycle数据不做处理),后面不计.

   always@(posedge clk or negedge rst)
     if(!rst)
         cnt<=6'd0;
     else if(fr&&str)
         cnt<=6'd1;
     else if(cnt==32)
         cnt<=6'd0;
     else if(cnt)
         cnt<=cnt+6'd1;//将计数器非0作为加1的控制条件(精髓)
     else 
         cnt<=6'd0;.

实际上用到的是计数器从1-32这32cycle内有效的数据,0,1...32,0,1...32
避免了使用中间控制信号及信号flag。

你可能感兴趣的:(verilog中计数器和信号展宽的小技巧)