[英]Verilog Error: Object on left-hand side of assignment must have a variable data type
我正在尝试在Verilog中编写一个顶层模块,每当传感器读取的数值低于某个特定数值时,该模块就会打开水阀。
这是我的代码:
module ProjectDSD(alteraClock, sensorInput, openValve);
input sensorInput, alteraClock;
output openValve;
always @(sensorInput)
begin
if(sensorInput < 100) //sensor value to irrigate at
begin
openValve <= 1; //here
end
else
begin
openValve <= 0; //here
end
end
endmodule
我收到一个错误消息:
分配左侧的对象“ openValve”必须具有可变数据类型
我想念什么? 另外,我可以在Altera DE2-155板上使用哪些引脚来输出仅1和0的数字信号以打开或关闭阀门?
s / output openValve /输出reg openValve /
输出默认为wire
; 您需要reg
。 另请参阅此问题。
目前将openValve
推断为wire
。 添加reg openValve;
下面output openValve;
这样您的代码就会起作用。
建议:您似乎正在遵循IEEE1364-1995非ANSI编码样式。 仍然合法,您可能想要更改为IEEE1364-2001及更高版本支持的ANSI编码样式。
非ANSI:
module ProjectDSD(alteraClock, sensorInput, openValve);
input sensorInput, alteraClock;
output openValve;
reg openValve;
ANSI:
module ProjectDSD(
input alteraClock, sensorInput,
output reg openValve);
对于组合块,建议always @*
使用always @*
(或同义的always @(sensorInput)
always @(*)
)而不是always @(sensorInput)
。 @*
是自动灵敏度列表,也在IEEE1364-2001中添加
尝试output reg openValve;
。
对于问题的后半部分(应该是一个单独的问题), 将这个QSF文件导入到您的项目中。 任何GPIO都可以配置为输出,并且可以通过侧面的40针接头进行访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.