Verilog系列:【31】连input端口都输出信号了

在使用Verilog或者SystemVerilog进行数字设计时,如果设计者在设计模块的内部将数据赋值给该模块与外界交互的输入端口(input),那么仿真时将不会产生任何warning或者error,因为此时该input端口被视为inout端口。

Verilog标准(IEEE Std 1362-200112.3.8 Connecting dissimilar ports)中,描述:当驱动一个值到一个相反方向的端口时(例如,写input,读output等),并且该端口两端传递数据使用了net类型,则仿真时会出现端口方向强制转换为inout,这主要是因为net类型允许被多驱动,并且部分仿真器可能会对于这种转换不产生任何信息,从而极易导致仿真结果异常。

这种类型的转换在某些情况下也比较接近实际,因为实际电路实现的时候port是不存在的,所有的信号都是通过net连接传输,所以这种转换方式允许仿真工具自动将input/output转换为output/input类型。当时如果使用不当也会出现一些问题,如下代码所示:

在这个例子中,dat_outoutput)被复制给了dat_ininput),从而可能导致仿真结果在后续电路的传输中出现问题,但是仿真工具在仿真时对此将会默不作声,悄悄地将端口类型转换为inout,导致实际数据传输方向与期望数据传输方向相反,如下图所示:

而仅从单个模块的仿真结果也很难发现问题,仿真波形如下:


【解决方法】

为了避免类似情况出现,在进行设计时可将端口类型声明为(var类型,其中有reglogicuwire等),此时当仿真工具进行仿真时出现上述情况时,仿真工具将会报告错误。其实在Verilog-2005中可以讲input显示声明为uwire,该类型只允许一个驱动出现在net上,即只允许一个方向的驱动。

建议在设计中将所有moduleinputoutput端口都定义为logic类型,除非端口为inout类型(此时的端口允许多个方向的驱动)。

全部评论
解决input端口都输出信号了
点赞 回复 分享
发布于 2022-08-27 13:19 河南

相关推荐

为啥美团有的笔试可以AI做题啊。。。。我们怎么就不行
碧海蓝涛:因为ai也做不出来
投递美团等公司10个岗位
点赞 评论 收藏
分享
07-24 03:49
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务