[英]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.