本周思维迟钝,出现好多之前也没太注意的低级错误。这些错误一晃眼还真不容易发现。可能琐事缠身力不从心吧。
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条评论)
登录后参与讨论