如何解决传递向量并对其执行操作会导致 X
这是我正在尝试实现的模块。我想要做的是,接收一个向量,说 2 位宽,有 4 个元素,我将这些元素线性化并从测试平台传递到 test_module1。现在我想对其进行去线性化并对其执行一些组合操作,以获得基于 Rosenbrock 函数的适应度值。但是,我得到的适应度值为 XX。
我无法理解这里的问题。
erase
测试平台:
module test_module1 ( x,fitness);
input [4*2 -1:0] x;
output [1:0] fitness;
wire [1:0] x_i;
wire [1:0] x_im1;
wire [1:0] fitness_val = 2'b00;
wire [3:0] a;
wire [3:0] b;
wire [1:0] x_array1 [3:0];
genvar k;
assign fitness = fitness_val;
genvar j;
generate
for (j =0 ; j <4 ; j = j+1) begin
assign x_array1[j] = x[2*j +: 2];
end
for (k=1; k<4; k=k+1) begin
assign x_i = x_array1[k];
assign x_im1 = x_array1[k-1];
assign a = 100*(x_i[1:0] - x_im1[1:0])*(x_i[1:0] - x_im1[1:0]);
assign b = (1 - x_im1[1:0])*(1 - x_im1[1:0]);
assign fitness_val = fitness_val + a[2:1] + b[2:1];
end
endgenerate
endmodule
解决方法
X
(未知值)的原因是由于多个驱动程序对同一信号的争用。
例如,信号 fitness_val
有 5 个驱动程序。第一行是:
wire [1:0] fitness_val = 2'b00;
这是一个连续赋值,这意味着模拟器总是试图将其驱动为 0。其他 4 个驱动程序来自 for
k
循环:
assign fitness_val = fitness_val + a[2:1] + b[2:1];
如果您要长手写出循环,您将有 4 行相同的 assign
行。 fitness_val
应该只有 1 个驱动程序,而不是 5 个。
您在该 for
循环中有所有 5 个信号的多个驱动程序。
assign fitness_val
行的另一个问题是它创建了一个组合循环。您不应该在连续分配的 LHS 和 RHS 上都有 fitness_val
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。