很久没上来写日志了,最近几天在用VHDL模拟一个串口,搞得头昏脑胀的。
不得不发点牢骚的是Maxplus II这个编译器,其错误定位功能实在是糟糕得可以,分明是一个非常低级的错误,但它给的信息经常不知道所以然,双击错误信息,它总是不能定位到错误的那一行,然后要自己去通读整个程序,一行行的排查,效率奇低!比如一个signal,在被引用前没有给他赋值,它报的错就是貌似63648Missing source,双击它,它跑到vhd文件的第一行,让你觉得莫名其妙!
再说说VHDL,虽然以前也搞过,但这次才算是真正的潜心研究了VHDL,我的感觉是,使用VHDL做硬件仿真才算是真正的做硬件,因为它真正体现了很多硬件特性,比如,为什么一个信号不能有多个信号源呢?因为信号有真实的物理意义,如果一根导线上连多个输出线会是什么结果呢,这样联想一下,才能理解为什么会有这样的限制。
用C语言用习惯的人可能会经常犯低级错误,就像我这样,总结起来,犯的最多的低级错误是:
1. 刚才已经说过,一个信号(SIGNAL)不能有多个信号源;
2. 对于PORT,它的各种类型是有严格规定的,IN、INOUT、OUT、BUFFER之间的区别必须搞清楚,如果有OUT属性,则project中必须对它有写的操作,OUT型端口不能再被读入,如果要读入OUT型端口,必须设置成BUFFER型端口;
3. 不是所有情况下都可以用IF….ELSE,比如IF中如果对上升延或者下降延进行了判断,那就不能再用ELSE子句:
IF aEVENT AND a = 0 THEN
….
ELSE
….
END IF;
这样写肯定会报错的,因为VHDL不支持对同一脉冲的上升延和下降延同时进行判断。