一个神奇的{{}}问题--verilog
(1)assign readdata = {2{{address == 0}}} && out_data;(2)assign readdata = (address == 0) ? out_data : 0;
这两句话有什么区别吗???
当address = 0 的时候,readdata = 2’b11 && out_data = out_data; 两式一样
当address != 0 的时候,readdata = 2’b00 && out_data = 0; 两式还是一样
“时间是检验真理的唯一标准”,用verilog RTL测试
(1)
module verilog_test
(
input address,
input out_data,
output readdata
);
assign readdata = {2{{address == 0}}} && out_data;
endmodule
出现了这样的警告
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_618598ZVTX5Y.jpg
(原文件名:1.jpg)
这不现实啊,
RTL如下:
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_618599NM8HKA.jpg
(原文件名:2.jpg)
看不太懂!!!
(2)
module verilog_test
(
input address,
input out_data,
output readdata
);
assign readdata = (address == 0) ? out_data : 0;
endmodule
这个没那个高位始终为0的警告,出来的效果也是我们可想而知的,RTL如下
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_618600QVAYX2.jpg
(原文件名:3.jpg)
可这是为什么捏??不应该一样的吗???
顺便说下,当然RTL绝对不可能是一样的,一个是与门 一个是选择器,但是出现readdata 高位始终为0,这个实在想不通 不好意思搞错了不应该是&&
如果是&& ,那样outdata 要么= 0,要么= 1,前面的也一样,所以只是最后一位的变化
但是改成& 就好了
ok
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_618607MAAYPW.jpg
(原文件名:4.jpg) 还是问个有脑子的问题吧:
这是我简化的SOPC生成好驱动发光二极管(output only 为例),如下:
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_618611W08S2N.jpg
(原文件名:未命名.jpg)
clk_en 压根没用到,他这样写有什么意思呢??
还有 led 是output的,拿是write,还要readdata有什么意思呢?
看了Avalon-MM 还是懵懂 看了Avalon-MM Interface Specification 的pdf,里面对address是这样定义的:
Specifies an offset into the slave address space. Each slave address value selects a word of slave data. For example,
address= 0 selects the first <slave data width> bits of slave data; address=1 selects the second <slave data width> bits of slave data.
就是特殊的从机中偏移量,每个地址选择一个字(16bit)的数据。例如:addr=0,一个字节的数据;addr=1,又是一个字节的数据
但是看看上面SOPC自己生成的 ,为什么output是2位的 <<16位,address却要2位呢???1位不时候了啊??
页:
[1]