Verilog 错误:通过端口连接驱动,是多重驱动
我能够在modelsim中构建代码,但当模拟出现以下错误时:Verilog 错误:通过端口连接驱动,是多重驱动,verilog,system-verilog,Verilog,System Verilog,我能够在modelsim中构建代码,但当模拟出现以下错误时: addr_x,通过端口连接驱动,是多路驱动(44)线路:49 addr\u f,通过端口连接驱动,是多路驱动(46)线路:49 s_ready_x,通过端口连接驱动,是多路驱动(44)线路:49 s_ready_f,通过端口连接驱动,是多路驱动(46)线路:49 我如何解决这个问题?(system verilog)没有简单的*修复方法:您必须更改您的设计。您甚至可能不得不“回到绘图板”,从根本上改变您的设计 在每个ctrlpath..
addr_x,通过端口连接驱动,是多路驱动(44)线路:49
addr\u f,通过端口连接驱动,是多路驱动(46)线路:49
s_ready_x,通过端口连接驱动,是多路驱动(44)线路:49
s_ready_f,通过端口连接驱动,是多路驱动(46)线路:49
ctrlpath..
模块中,输出一个地址。因此,您从不同的输出驱动相同的网络。你必须区分哪些是你真正需要的。因此,您需要添加一个多路复用器,该复用器“知道”要选择哪个
“多重驱动”错误是堆栈溢出和电气工程中经常出现的问题。您所做的是将多个输出端口连接在一起。在电气工程中,我们称之为“一起短路输出”。术语短路很重要,因为它实际上是一种短路。这是等效电路:
一些输出将是高的,而另一些则是低的。高电平将尝试驱动输出高电平,打开从VCC到输出引脚的电流路径。低的将尝试驱动低输出。它们打开了从输出到接地的电流通路。它们一起在VCC和接地之间形成短路
*不要认为使用三态驱动程序可以轻松解决此问题。理论上这似乎是可能的,实际上你真的,真的不想那样 以下是来自VCS编译的消息之一: 错误-[ICSD]驱动程序的非法组合 design.sv,38 结构驱动程序的非法组合。 变量“s_ready_x”由多个结构驱动程序驱动。 此变量在 “design.sv”,38:逻辑s_ready_x; 第一个驱动程序位于“design.sv”,50:ctrlpathoc(.clk(clk),.reset (重置),.wr_done_f(wr_done_f),.wr_done_x(wr_done_x),.addr_x (地址x),.addr\u f(地址f),.m\u valid\u y(地址y),.c。。。 第二个驱动程序位于“design.sv”,45:ctrlpathx(.clk(clk),.reset (重置),.s_ready_x(s_ready_x),.addr_x(addr_x),.wr_done_x (wr_done_x),.wr_en_x(wr_en_x),.s_valid_x(s_valid_x)) 它只是将问题传播到顶级模块,但给出了驱动程序的正确位置 问题是,
ctrlpathf
和ctrlpatho
都使用output
端口驱动相同的信号。经验法则是:
不能使用多个驱动程序驱动同一变量
System verilog只是将此要求添加到标准中,并检查特定的System verilog块
修理它
net
类型进行倍增,并为结果定义规则。如果您真的想拥有多个驱动程序,则需要将这些端口声明为wires
或类似端口,并更改代码以反映它。它们可以通过assign
语句进行倍增驱动