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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容