reg [31:0] cnt ;
wire [M-1:0] mult2; //乘数
wire [31:0] cnt_temp = (cnt == M)? 'b0 : cnt + 1'b1 ;
always @(posedge clk or negedge rstn) begin
if (!rstn) begin
cnt <= 'b0 ;
end
else if (data_rdy) begin //数据使能时开始计数
cnt <= cnt_temp ;
end
else if (cnt != 0 ) begin //防止输入使能端持续时间过短
//如果data_rdy只给1个clock(包含上升沿),上个分支作起始
//剩下M-2个计时靠这个if分枝运行
cnt <= cnt_temp ;
end
else begin
cnt <= 'b0 ;
end
比如M=4, 没有data_ready信号时,cnt_temp因为“cnt不等于M",所以cnt_temp=1,
cnt一直等于0直到“data_ready=1”cnt被cnt_temp赋值,cnt_temp是个组合逻辑,不占用上升沿的时刻,然后cnt_temp变成2,下一个clk上升沿,cnt计数到2...直到计数到M,然后temp就等于0
优点:计数从1记到M
拓展
不知道选择器电路怎么读的看这个
这是选择器,s=1时输出上边,s=0时输出s=defalut
这是多位选择器,s=32‘h4时输出上边,s=0时输出s=defalut