Я начинаю получать эту ошибку после того, как я на самом деле делаю регистр статическим.
Это хорошо в Quartus:
task InitAutoRefresh;
reg [$clog2(AUTOREFRESH_CLOCKS):0] AutoRefreshCounter = 0;
AutoRefreshCounter <= AutoRefreshCounter + 1;
InitState <= (AutoRefreshCounter < AUTOREFRESH_CLOCKS) ? InitState : InitState + 1;
InitCmd <= (AutoRefreshCounter == 0) ? CMD_AR : CMD_NOP;
endtask
Но Modelsim выдает мне эту ошибку:
# ** Error (suppressible): C:/projects/Camera-RAM-VGA/Ram.sv(137): (vlog-2244) Variable 'AutoRefreshCounter' is implicitly static. You must either explicitly declare it as static or automatic
# or remove the initialization in the declaration of variable.
Теперь, когда я добавляю static
перед reg [$clog2(AUTOREFRESH_CLOCKS):0] AutoRefreshCounter = 0;
Кварт дает мне эту ошибку (которая выглядит как противоположность моего изменения):
Error (10959): SystemVerilog error at Ram.sv(139): illegal assignment - automatic variables can't have non-blocking assignments
И это указывает на регистр, который яЯ только что добавил ключевое слово * 1014 для!
Единственное возможное объяснение, о котором я могу подумать, это то, что когда я добавляю static
к этому единственному reg
, он начинает трактовать другие регистры как automatic
, нотогда номер строки в сообщении об ошибке неверен.