新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2016-12-9
- 在线时间
- 6 小时
|
在以太网通信实验中,ip_receive模块中有以下段程序,当时钟上升沿到来,如果 if((rx_byte_val == 1'b1) && (rx_data == 8'h55)) 条件不满足,那么无疑问,skip_en <= 1'b0会被执行,但如果if((rx_byte_val == 1'b1) && (rx_data == 8'h55)) 条件满足,那不是执行了skip_en <= 1'b0后,也会执行skip_en <= 1'b1吗?这就有疑问了,这样 同时skip_en <= 1'b0和skip_en <= 1'b1,会是一个什么样的结果啊?
//解析以太网数据
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
skip_en <= 1'b0;
error_en <= 1'b0;
cnt <= 5'd0;
des_mac <= 48'd0;
eth_type <= 16'd0;
des_ip <= 32'd0;
ip_head_byte_num <= 6'd0;
udp_byte_num <= 16'd0;
data_byte_num <= 16'd0;
data_cnt <= 16'd0;
rec_en_cnt <= 2'd0;
rec_en <= 1'b0;
rec_data <= 32'd0;
rec_pkt_done <= 1'b0;
rec_byte_num <= 16'd0;
end
else begin
skip_en <= 1'b0; --第1次对skip_en reg非阻塞赋值
error_en <= 1'b0;
rec_en <= 1'b0;
rec_pkt_done <= 1'b0;
case(cur_state)
st_idle : begin
if((rx_byte_val == 1'b1) && (rx_data == 8'h55))
skip_en <= 1'b1; --第2次对skip_en reg非阻塞赋值
end
st_preamble : begin
if(rx_byte_val) begin //解析前导码
cnt <= cnt + 5'd1;
if((cnt < 5'd6) && (rx_data != 8'h55)) //7个8'h55
error_en <= 1'b1;
else if(cnt==5'd6) begin
cnt <= 5'd0;
if(rx_data==8'hd5) //1个8'hd5
skip_en <= 1'b1;
else
error_en <= 1'b1;
end
end
end
|
|