Compiler errors 信号连接到以下多个驱动器
我正在尝试运行以下操作,但收到此错误: 以下是Verilog代码:Compiler errors 信号连接到以下多个驱动器,compiler-errors,verilog,xilinx,hdl,Compiler Errors,Verilog,Xilinx,Hdl,我正在尝试运行以下操作,但收到此错误: 以下是Verilog代码: module needle( input referrence,input penalty,output index[7:0]); //inout input_itemsets; //input referrence; //input penalty; //output index; parameter max_cols=8; // wire index[7:0]; wire referrence; wire penalty
module needle( input referrence,input penalty,output index[7:0]);
//inout input_itemsets;
//input referrence;
//input penalty;
//output index;
parameter max_cols=8;
//
wire index[7:0];
wire referrence;
wire penalty;
//wire input_itemsets;
genvar i,idx;
generate
for( i = max_cols-4 ; i >= 0 ; i=i-1)
for( idx = 0 ; idx <= i ; idx=idx+1)
begin
assign index[i] = (idx + 1) * max_cols + (i + 1 - idx);
//assign index = (idx + 1) * max_cols + (i + 1 - idx);
//input_itemsets[index] <= maximum( input_itemsets[index-1-max_cols]+ referrence[index],
//input_itemsets[index-1] - penalty,
//input_itemsets[index-max_cols] - penalty);
end
endgenerate
endmodule
模块指针(输入参考、输入惩罚、输出索引[7:0]);
//输入/输出项目集;
//输入参考;
//输入惩罚;
//产出指数;
参数max_cols=8;
//
导线指数[7:0];
电汇参考;
电汇罚款;
//线输入_项集;
genvari,idx;
生成
对于(i=max_cols-4;i>=0;i=i-1)
对于(idx=0;idx我使用generate语句只是为了在块之间建立连接,我看到您正在分配索引[]idx和I,它们不是信号(它们没有驱动程序)…我的意思是,这些值不会成为获取值的索引。在编写verilog代码时,您应该考虑这是否意味着硬件中的某些内容。我的意思是参数和for不是硬件中的某些内容
如果您希望索引获取值,则必须使用具有驱动器(输入、导线)的信号。在您的Verilog代码中,大多数索引
位都是双驱动(x
)或非驱动(z
)的常量:
索引[7:0]:zzzxx1
解释如下。外循环是从4到0,这意味着索引[7:5]
未被驱动(z
)。内循环是从0到i
,展开如下:
assign index[4] = (0 + 1) * max_cols + (4 + 1 - 0);
assign index[4] = (1 + 1) * max_cols + (4 + 1 - 1);
...
assign index[1] = (0 + 1) * max_cols + (1 + 1 - 0);
assign index[1] = (1 + 1) * max_cols + (1 + 1 - 1);
assign index[0] = (0 + 1) * max_cols + (0 + 1 - 0);
因此index[4:1]
是双驱动的(x
),只有index[0]
有一个驱动程序
这里有一个测试的编译代码:输出索引[7:0]
是一个未打包的位数组。与此等价的C是bool*索引[8]
。我相信您需要输出[7:0]索引
这些问题:
警告:HDLCompiler:413-“/home/suriyha/Monajalal/needle_t1/needle.v”第39行:4位表达式的结果被截断以适合1位目标
是指索引[i]=(idx+1)*max_cols+(i+1-idx);
。只有左侧表达式的lsb ob将被分配给索引[i]
(一个1位值)。右侧赋值应至少为4位值
错误:HDLCompiler:1401-“/home/suriyha/Monajalal/pineel_t1/pineel.v”第39行:单元针中的信号索引[3]连接到以下多个驱动器:[……]
此错误是由于您使用generate语句的方式造成的。如果您解开for循环,您将看到多个赋值索引[3]=…
。我建议将gerenate块替换为始终@(*)
块。输出应为Output reg
,中间值如i
和idx
应为整数类型或压缩reg
的某种形式(例如reg[7:0]i,idx;
)
其他突出的问题。
看起来,input\u itemsets
应该是一个inout
。Verilog中的inout与C非常不同。在Verilog中,在任何给定时间都应该有一个驱动程序。驱动程序冲突将导致X。最好在驱动阶段复制示例状态并进行交接
您想要的可能如下所示:
assign index[4] = (0 + 1) * max_cols + (4 + 1 - 0);
assign index[4] = (1 + 1) * max_cols + (4 + 1 - 1);
...
assign index[1] = (0 + 1) * max_cols + (1 + 1 - 0);
assign index[1] = (1 + 1) * max_cols + (1 + 1 - 1);
assign index[0] = (0 + 1) * max_cols + (0 + 1 - 0);
尝试使用输入为索引分配某些内容。非idx/iI希望转换此Cindex=(idx+1)*max_cols+(i+1-idx)
编程到HDL级别。这不是我想从头开始写的东西,但显然我们不能通过assign语句将循环索引分配给变量,对吗?是的,如果你想要一个可合成的代码,你不能。但是如果它不可合成,你可以。我只是想一想你会遇到的错误,因为你正在尝试t他输出一个变量,这个信号不会改变(即在1和0之间),这就是为什么信号总是连接到VCC或GND的原因。我之所以使用数组作为索引,是因为当我单独使用“index”变量时,我收到了“multiple driver”所以我想如果我使用一个数组,它可能会解决这个问题。然而,我使用genvar并生成的原因是整数是不可合成的,这就是我使用“genvar”的原因对于i和j。在这种情况下,您建议如何进行可合成设计?如果您的合成器不够聪明,无法优化出用作for循环索引的整数,那么请改为执行类似reg signed[7:0]
的操作。请查看EDA网站、my和others答案中的链接。
assign index[4] = (0 + 1) * max_cols + (4 + 1 - 0);
assign index[4] = (1 + 1) * max_cols + (4 + 1 - 1);
...
assign index[1] = (0 + 1) * max_cols + (1 + 1 - 0);
assign index[1] = (1 + 1) * max_cols + (1 + 1 - 1);
assign index[0] = (0 + 1) * max_cols + (0 + 1 - 0);