微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog 对同一端口用多个assign会不会冲突呀?

verilog 对同一端口用多个assign会不会冲突呀?

时间:10-02 整理:3721RD 点击:
assign PORT =  (DSP_EN1&& !nRD && nWR) ? AD1 : 16'bz;
assign PORT =  (DSP_EN2 && !nRD && nWR) ? AD2: 16'bz;
assign PORT =  (DSP_EN3 && !nRD && nWR) ? AD3: 16'bz;
assign PORT =  (DSP_EN4 && !nRD && nWR) ? AD4 : 16'bz;
assign PORT =  (DSP_EN5 && !nRD && nWR) ? AD5 : 16'bz;

DSP_EN1、2、3、4、5  是前面程序的结果,只有一个为1,同时对port赋值的话,会不会一会为高阻一会有值呀,这个程序能正常运行的

这种情况下可以,程序能正常运行,当然硬件得保证DSP_EN1&& !nRD && nWR等条件同一时间只有一个会active,
要是如下面情况就会报错,
assign port = a;
assign port = b;

看你的条件,不要在同时有两个赋值assign执行就行了



当然硬件得保证DSP_EN1&& !nRD && nWR等条件同一时间只有一个会active,你说的active是啥意思呀,
DSP_EN1&& !nRD && nWR只能为0或1,如果为0则PORT=高阻,如果为1则等于一个数,assign是并行执行的,那port到底是为一个数还是高阻呢。

为什么要这样写呢,目的是什么?我猜LZ想做成这种电路吧:assign port = ? :(?:(?:(?:)))

写成楼上的这种形式比较好吧。


嗯,是这个意思,只有某一个端口的使能为1时才有值进来,否则为z,通常你会在开通的那段时间内把值传入,把该处理的事情处理完,然后再关闭也不用CARE了。就像你进自动门一样,一到门前门就开了,你进去后就再关了。

同意五楼的看法!不过小编那种编写方式也是可以的,可以对同一个变量进行多个连续赋值,但是绝对不能进行多个过程赋值(产生竞争)!

如果有两个或两个以上条件同时为真就会冲突的。

LS已经说得差不多了。我建议不要用这种写法,不是每次都能保证条件互斥的,到出问题的时候这种写法很不好检查错误

不行,会冲突

在项目中是不允许这样写的,数字这边只有PAD这块才能用到highZ,看LZ的对信号的命名也应该是PAD,而实现的功能是做个PIN MUX, 可以先做好MUX
这样写其实也不能保证每个仿真工具和合成工具都认为是对的,所以说能跑,只是某个工具可以跑。
case({EN5, EN4, EN3, EN2, EN1, EN0})
5‘b1?: PORT_MUX = AD5;
.......
endcase

case(1'b1)
EN5: PORT_MUX = AD5;
......
endcase
assign PORT = 条件有效 ? PORT_MUX : n'hzzz...;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top