代码如下,供参考。
reg [4:0] byte_cnt;
di; ///[159:0]
di_v; //bit, 是一个高电平脉冲,表示di的有效时刻。
do; //7:0
do_v; //bit
clk; //cycl 6us
d_chk;//[7:0] data to checksum
d_sum;//7:0]
always@(*)
case(byte_cnt[4:0])
5'd01: d_chk = di[( 0+1)*8-1 : 0*8];
5'd02: d_chk = di[( 1+1)*8-1 : 1*8];
....
5'd20: d_chk = di[(19+1)*8-1 :19*8];
default : d_chk = di[(00+1)*8-1 : 0*8];
endcase
// byte_cnt di_v
always@(posedge clk or negedge rst)
if (!rst)
byte_cnt <= 5'b0;
else if (di_v && byte_cnt == 5'b0)
byte_cnt <= 5'b1;
else if (byte_cnt > 5'd21)
byte_cnt <= 5'b0;
else
byte_cnt <= byte_cnt + 1'b1;
//do_v
always@(posedge clk or negedge rst)
if (!rst)
do_v <= 1'b0;
else if (byte_cnt != 5'b0)
do_v <= 5'b1;
else
do_v <= 1'b0;
//do
always@(posedge clk or negedge rst)
if (!rst)
do <= 7'b0;
else if (byte_cnt == 5'd21)
do_v <= d_sum;
else if (byte_cnt == 5'd0)
do <= 7'b0;
else
do_v <= d_chk;
//d_sum
always@(posedge clk or negedge rst)
if (!rst)
d_sum <= 7'b0;
else if (byte_cnt == 5'd0)
d_sum <= 7'b0;
else
d_sum <= d_sum + d_chk;
温馨提示:答案为网友推荐,仅供参考