中级会员
 
- 积分
- 316
- 金钱
- 316
- 注册时间
- 2019-4-1
- 在线时间
- 118 小时
|
10金钱
本帖最后由 jshzp 于 2019-11-8 13:22 编辑
用verilog写了句话,做地址译码,片选输出,代码如下:
- module Decoder(Addr,CS);
- //IO
- input[24:0] Addr; //系统总线地址
- output CS; //片选信号
- assign CS = ((Addr & 25'h1E00000) ==25'h1400000||(Addr & 25'h1E00000) ==25'h1500000) ? 1'b0: 1'bz;//先把低21位置零,然后比较地址是否相符
- endmodule
复制代码 编译后,打开RTL Viewer得到下图:
红圈中,有两处错误:一、地址A的高四位地址A21、A22、A23、A24接地了,而我的代码Addr & 25'h1E00000应该是低21位即A20~A0置零,保留高4位,去做比较;
二、图中用于比较的输入数据B=25'h5,代码里写的是25'h1400000
问题出在哪里呢?
我用的软件是开发资料里面的QII 13.1.0。同事用的QII 12.0版本,同样的代码,他编译后查看RTL Viewer,结果和我的就不一样。难道是软件的原因吗?
|
最佳答案
查看完整内容[请看2#楼]
两个版本都没有问题,不同版本的工具做了不同优化而已,13.1优化为只判断高5位,因为低位全部为0,不需要做判断,工具优化显示不一样而已。
|