新手上路
- 积分
- 39
- 金钱
- 39
- 注册时间
- 2019-12-20
- 在线时间
- 8 小时
|
1金钱
各位老师大家好,在使用开拓者开发版进行UART实验时遇到了一个有关if语句的疑问,请见下面两组代码:
代码1:
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
rx_flag<=1'b1;
end
else begin
if(start_flag)
rx_flag<=1'b1;
if((rx_cnt==4'd9)&&(clk_cnt==BPS_CNT/2))
rx_flag<=1'b0;
else
rx_flag<=rx_flag;
end
end
代码2:
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
rx_flag<=1'b1;
end
else begin
if(start_flag)
rx_flag<=1'b1;
else if((rx_cnt==4'd9)&&(clk_cnt==BPS_CNT/2))
rx_flag<=1'b0;
else
rx_flag<=rx_flag;
end
end
相比于代码1,代码2仅多一个else,start_flag是单时钟周期的标志信号,在signaltap下,两组代码均能看到start_flag为一个时钟周期的脉冲,代码2中的rx_flag能够按照设计要求时高时低,而代码1中的rx_flag却一直保持低(即便来start_flag脉冲),这是为什么,难道两组代码的逻辑不一样,还是if语句有什么语法问题我没有注意到?感谢大家解答,感激不尽。
|
|