我的verilog代码是一个只使用from osgeo import gdal
def world2Pixel(gt, x, y):
ulX = gt[0]
ulY = gt[3]
xDist = gt[1]
yDist = gt[5]
rtnX = gt[2]
rtnY = gt[4]
pixel = int((x - ulX) / xDist)
line = int((ulY - y) / xDist)
return (pixel, line)
dataset = gdal.Open(filename)
gt = dataset.GetGeoTransform()
pixel, line = world2Pixel(gt, x, y)
band = dataset.GetRasterBand(1)
value = band.ReadAsArray(pixel, line, 1, 1)[0, 0]
的加法器。问题是,虽然使用assign sum = a+b
运行cocotb
,sum
仍然未知,但a
和b
具有有效值。当我使sum
成为reg类型时,它可以工作。
`timescale 1 ns / 1 ps
module adder(input [7:0] a,
input [7:0] b,
output reg [7:0] sum,
output [7:0] sum2);
assign sum2=a+b; //Trouble is here
always@(a,b) begin
sum=a+b; //This works
end
`ifdef COCOTB_SIM
initial begin
$dumpfile("adder.vcd");
$dumpvars();
end
`endif
endmodule
答案 0 :(得分:4)
我认为这实际上是由v0.9.7中出现的Icarus中的一个错误造成的。
如果您升级到最新的开发版本,您会发现连续分配工作正常。其他模拟器也可以处理连续分配。
如果您坚持使用该版本的Icarus,您可以通过将分配放在流程中来解决问题,如您所发现的那样。