Verilog错误:赋值左侧的对象必须具有可变数据类型

时间:2015-12-01 19:52:41

标签: verilog intel-fpga

我正在尝试在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的数字信号,以便阀门打开/关闭?

3 个答案:

答案 0 :(得分:1)

s / output openValve / output reg openValve /

输出默认为public class Setting<T> where T: struct { public string Name { get; set; } public T Value { get; set; } } public class SettingsDto<T> where T: struct { public List<Setting<T>> Settings { get; set; } } ;你需要一个wire。另请参阅this问题。

答案 1 :(得分:1)

openValve目前被推断为wire。在reg openValve;下面添加output openValve;,您的代码就可以使用。

建议:看起来您遵循IEEE1364-1995非ANSI编码样式。仍然合法,您可能希望更改为IEEE编码样式,IEEE1364-2001及更高版本支持。

非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)@*是IEEE1364-2001中添加的自动灵敏度列表

答案 2 :(得分:0)

尝试output reg openValve;

对于你的问题的后半部分(这应该是一个单独的问题)import this QSF file进入你的项目。任何GPIO都可以配置为输出,并且可以通过侧面的40针接头访问。