串口通信试验中的一个新手问题

if(clk_bps) begin                                                                                                                                                                               num <= num+1'b1;
    case (num)
      4'd1: rx_temp_data[0] <= rs232_rx; //锁存第0bit
      4'd2: rx_temp_data[1] <= rs232_rx; //锁存第1bit
      4'd3: rx_temp_data[2] <= rs232_rx; //锁存第2bit
      4'd4: rx_temp_data[3] <= rs232_rx; //锁存第3bit
      4'd5: rx_temp_data[4] <= rs232_rx; //锁存第4bit
      4'd6: rx_temp_data[5] <= rs232_rx; //锁存第5bit
      4'd7: rx_temp_data[6] <= rs232_rx; //锁存第6bit
      4'd8: rx_temp_data[7] <= rs232_rx; //锁存第7bit
      default: ;
     endcase
   end

这是特权同学串口收发试验中的一段代码,很简单,就是clk_bps为1时,num计数,并通过判断num值读取串口各位数据的一段代码。

不过刚接触verilog代码,有一点地方不明白:begin和end之间的语句是顺序执行的么?也就是说当执行case语句的时候,case(num)中的num是已经自加1之后的num还是没有自加1的num。

如果是顺序执行,即先自加1之后再用case语句判断,那么当num=1时,rx_temp_data[0] 中读取的数据岂不是起始位的数据

很弱智的问题,望各位解答

永不止步步 发表于12-31 14:38 浏览65535次
分享到:

已有2条评论

  • 永不止步步
    永不止步步 12-31 14:40

    这个是verilog语法的"<="和"="的区别了,在同一个块语句内的''<="赋值语句是同时赋值的, 而“=”赋值语句是先后赋值的。

  • 永不止步步
    永不止步步 12-31 14:38

    begin和end之间的语句是顺序执行的。

    执行case语句的时候,case(num)中的num是没有自加1的num。

    虽是顺序执行,但执行均以上一时刻为前提,执行结果在下一时刻体现。

    这就是HDL语言,和C等一些高级语言不一样。慢慢体会吧。

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:307167个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号