【P1】Verilog部件级实验/有限状态机
课上
再次体验大心脏
T1 奇偶校验
for循环数1的个数判断奇偶/异或缩减运算符判断奇偶,然后根据check的奇偶要求调整最高位
bug1
!注意优先级:位运算 低于 比较运算。
cnt & 1 == 0 //恒为0
(cnt & 1) == 0 //cnt偶数时为1
属于是灯下黑了,调试了半天人急疯了。最后用
$display()
一段一段分析代码行为才定位问题行,然后又想了会儿才发觉是优先级的问题
T2 心情状态机
极简状态机(只是设置好像不和常理让人读题时怕读漏),存在时序导向的状态转移(若n个时钟周期未被x输入信号打断则转至另一状态,类此,用cnt计数)
bug1
cnt计数时被输入信号打断而跳转,此时需要将cnt清零。写if时很容易只考虑cnt达标跳转时的清零。
if(sign == IDEA) begin
state <= `BUSY;
cnt <= 0; //此处容易漏
end else begin
cnt <= cnt + 1;
//...
end
bug2
在always
块中,应时刻牢记非阻塞赋值特性对计数器的影响。当计数器变化后立即判断数量时,应滞后一个周期。
cnt <= cnt + 1;
if(cnt == TARGET - 1) //Expression
两道题交叉debug,终于花了1h40min完成了看上去只需要20min的题目,又是窝囊的一次上机
T3 方程检测
拍了题,只能课下做了