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。