20 / 36 · Khái niệm
Compute the next value from the old value
Read nonblocking assignments and reset priority in the code.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Chưa có bản dịch. Nội dung bài học gốc được hiển thị. (English)
Learning goals
- Identify the old state used by the expression
- Read the priority between reset and increment
Calculate the next state separately
In count <= count + 2'b01, the right-hand count is the pre-update value. If it is 01, the computed next value is 10. Do not treat the expression as sequential edits to the same written value.
The nonblocking assignment <= schedules its evaluated value for the nonblocking update phase. Separating old and next values is also useful when several registers update on the same edge.
always_ff @(posedge clk)
if (rst) count <= 2'b00;
else count <= count + 2'b01;One branch is taken at an edge
The if and else select one branch. With rst=1, the register stores 00 and does not take the increment branch. It does not reset to 00 and then increment to 01 on that same edge.
For a hand trace, write current count, current rst, selected branch and next count. Compare these columns with the code to check reset priority and wraparound.
Tự thử
At a rising edge with count=11 and rst=1, is the result 00 or 01?
Đọc giải thích
00. The reset branch is selected, so the increment branch is not taken on that edge.