赞
踩
目录
验证random模块时,模块中的rst和soft_rst都是模块的端口,rst为高有效,soft_rst为低有效。前期并没有测试soft_rst,后期发现本测试点,并进行验证时,发现在vip中并没有soft_rst以端口形式存在。刚开始想自己加上,后来觉着将soft_rst和rst连接比较方便。尝试使用forever、initial和always,发现自己对这几个使用有所欠缺。
top_test中对rst的赋值
- reg rst_n = 'b0;
- initial begin
- #200;
- rst_n = 1'b1;
- end
刚开始rst_n为0,在200ns之后再赋值为1,所以想在300ns后再将soft_rst赋值为rst,所以使用以下代码,代码可以编译通过,但是,仿真跑不起来,说明这种方法会导致仿真从一开始hang住,sim.log是空白的,猜测是rst_n刚开始有。
- reg soft_rst = 'b0;
- initial begin
- #300;
- forever begin
- rst_n = ~soft_rst;
- end
- end
后面将forever改为always,编译就会有问题,Error: Syntax error : token is 'always'
- reg soft_rst = 'b0;
- initial begin
- #300;
- if ($test$plusargs("random_soft_rst")) begin
- always@(soft_rst) begin
- rst_n = ~soft_rst;
- end
- end
- end
后面查了一下这几个的用法和思考哪里出了问题,发现always和initial是从仿真一开始同时立即执行,所以always块不能放在initial块中,更加不能加上延时。后面又尝试将initial块和延时去掉,出现elab fail,原因是if语句不能孤立的放在module中。
改为下面,就没有问题了,但是rst_n在刚开始就为1,没办法像之前一样在200ns之后再改变,仿真暂时可以通过,就先这样了,如果有知道的小伙伴,告诉一下,感谢~
- reg soft_rst = 'b0;
- always@(soft_rst) begin
- if ($test$plusargs("random_soft_rst")) begin
- rst_n = ~soft_rst;
- end
- end
<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。