Não consigo entender o erro no System Verilog
-
26-09-2019 - |
Pergunta
Eu tentei compilar código
module counter(
input clk,
input upSignal,
input downSignal,
output [7:0] count
);
always_ff @(posedge clk) begin
if (upSignal)
count <= count + 1;
else if (downSignal)
count <= count - 1;
end
endmodule
Mas eu recebo o erro
Error (10170): Verilog HDL syntax error at counter.v(7) near text "@"; expecting ".", or "("
O que isso significa?
Solução
O Quartus suporta algum SystemVerilog. Veja este link para obter detalhes>Ajuda do quartus
Para que o Quartus reconheça automaticamente que você está usando o System Verilog, você precisa chamar seu arquivo de algo.sv
Então, neste caso, provavelmente contador.sv
Se o seu arquivo for chamado contador.v, então você receberá um erro. Posso confirmar que isso é realmente compilação com o Quartus II v10.0.
Eu recomendaria alterar a porta de saída do módulo para Reg, o Quartus não reclamou, mas um simulador faria.
output reg [7:0] count
Deixe -nos saber como você se sai.
Felicidades
Outras dicas
Eu acho que George está certo (olá George! Gostaria de ver você aqui), o arquivo está sendo interpretado como Verilog (não SystemVerilog) e, portanto, não entende sempre_ff.
No tipo de valor de saída, prefiro o uso da lógica no SystemVerilog. Seu efeito é idêntico, mas se afasta do "Reg declarado", portanto, é um pensamento de registro que pode pegar as pessoas.
Além disso, a razão pela qual você recebeu essa mensagem de erro específica foi que, como não sabia o que era sempre_ff, assumiu que era o nome de um módulo/interface/função. Um módulo pode ter um mapa de portas que poderia começar com um '.', E tudo o resto precisaria de um suporte aberto.
Outro problema com este código.
A variável de contagem é atribuída a partir de um bloco processual (sempre_FF), portanto a variável de contagem precisa ser declarada como um tipo de variável, normalmente tipo lógico para esse código SystemVerilog. A declaração deve incluir: saída lógica 7: 0] contagem