cpu序列检查chanllenge
- 保存time、pc、addr、grf的寄存器务必开大,以避免数据溢出,自以为16位已经可以了,但还是没有逃过wa,最后直接开成32位ac了
- Verilog语法中,位运算符 的优先级是低于 关系运算符 的。故后面两种形式的代码 不等价
(binPc & 32'b0011) != 0
和binPc & 32'b0011 != 0
,前者才能表达正确的意思。包括三目运算符?
,前面的判断也要带上括号。 - 代码段执行先后的问题:
<=是非阻塞赋值。具体来讲,在时钟上升沿到来时,非阻塞赋值是先计算<=右侧的值,等到程序全部跑完一遍之后,再将所有计算好的右侧的值统一赋给左侧。因此这两种顺序无差别,if语句中的判断条件才是关键。更详细的内容请看蓝书197页“Verilog的层次化事件队列”。
独热码解决状态机问题
在用独热码解决状态机问题时,复位或初始化的时候不要简单的将状态赋为0,由于独热码编码状态,存在的状态中均是有一位是1的,所以一般不存在全零的情况,复位时注意(最好用状态标签复位,而不是直接赋数)
当然在其他情况表示状态下,复位也不要想当然全赋0