原创 低级错误总结

2010-4-15 12:21 3145 10 10 分类: 工程师职场

本周思维迟钝,出现好多之前也没太注意的低级错误。这些错误一晃眼还真不容易发现。可能琐事缠身力不从心吧。


1.有关matlab中数据文件.mat类型文件的处理。


在处理.txt文件时,我们常用load函数,或者fopen打开文件后再利用其它函数读取或者处理。可当处理.mat文件时,如果我们同样用load函数读进来,得到的却不是我们之前想的那样是一个数组或者序列,而是一个变量。如:


>> a = load('H_1.mat');


在wokespace中得到的如图:


点击看大图


可知,得到的a是一个结构变量,并不是我们所期待的是一个矩阵。于是点进去看,双击了a后:


点击看大图


发现,H出现了,我们所期待的矩阵在这里出现了,点开后就是我们所要的矩阵数据。为什么我们把矩阵数据保存在.txt中load能直接得到结果,而.mat却不行呢?到这里我们明白了,并不是用load得不到我们需要的数据,而是在读取过程中多了一步,多了一个变量。分析后知道:.mat文件中存有一个结构变量,它是用来表示我们所存入的数据,我们存入的数据才是那个H矩阵,而如果是.txt就不一样了,里面直接都是数据,只是load函数按照规则读取里面的数据后按照规则赋值给了矩阵。


如果要读取.mat中数据又不想那么麻烦的话,直接双击文件,或者load('H_1.mat')即可。


2.这个是不注意却又很常识的问题,一不小心就算查半天也很难发现。


在使用QuartusII+ModelSim波形仿真时,几乎每次都是在QuartusII里面修改编写的代码,然后在ModelSim中重新编译再仿真。可当直接在ModelSim中改动代码后再编译、仿真,结果却依然没有改变,仍然不对。于是怎么也想不通,没理由啊……仔细分析代码,再怎么都不会出现和改动前一样的结果……


后来发现,ModelSim中,你改动代码编译时并不会自动保存,不像QuartusII,换句话说,ModelSim在你未手动保存的情况下编译的还是你之前的文件,并没有更新。


3.testbench中的$stop系统函数的使用。


$stop作用相当于设立断点,在testbench中常常用来控制仿真的时间。而我在使用它的时候开始没注意,代码如下:


initial
begin
……
 forever
      #20 cnt = cnt + 1;
 #100;
 $stop;
end


当点了Run all以后却一直没有停……自己脑子也不转,就一直看代码,也想不明白,后来在$stop这句设了个断点,发现根本就跑不到这一句,便网上找,才发现里面有个死循环。这个forever一直没关心是因为我的时钟产生也是用的forever:


initial
begin
 clock = 1'b0;
 forever
 #10 clock = ~clock;
end


只是在另一个initial里……这个是根本原因。


总结:习惯很重要,冷静很有效。

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条