Guia Prático: Hierarquia de Módulos em SystemVerilog
Domine Portas e Parâmetros em SystemVerilog: Guia Modular
Quando desenvolvemos projetos em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital., é comum dividir o design em vários blocos para facilitar a organização, a manutenção e a compreensão do código. Entretanto, essa divisão gera a necessidade de passar informações entre módulos
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil.. Duas das principais formas de fazer isso são por meio das portas (inputs, outputs e inouts) e dos parâmetros (constants configuráveis). Neste tutorial, exploraremos essas duas ferramentas essenciais: como declarar portas, trocar dados entre módulos
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. e utilizar parâmetros para tornar o design mais flexível.
1. Conceito de Portas em SystemVerilog🔗
Módulos em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital. possuem interfaces
Interfaces SystemVerilog: Simplificando Conexões de SinalDescubra como utilizar interfaces em SystemVerilog para agrupar sinais e simplificar a conexão entre módulos, reduzindo erros e aumentando a eficiência. de entrada e saída conhecidas como portas. Elas permitem a conexão de sinais e a troca de informações entre diferentes partes do design.
1.1 Declaração de Portas
Na forma mais simples, cada porta
MOSFET: Tipos, Condução e ChaveamentoDescubra como MOSFETs operam na condução e chaveamento, aprendendo sobre seleção, tipos e aplicações com eficiência e robustez. é declarada como input, output ou inout, seguida de um tipo de dado. Um exemplo clássico:
module exemplo_portas(
input logic in_signal,
output logic out_signal
);
// Lógica interna do módulo
endmodule
- input: Porta de entrada que recebe dados de outro módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. ou fonte externa. - output: Porta de saída que envia dados para outro módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. ou destino. - inout: Porta bidirecional, especialmente útil quando um mesmo sinal pode ora dirigir, ora receber dados, como em barramentos
Microprocessadores e Microcontroladores: Arquitetura: Von Neumann vs. Harvard (CPU, ALU, barramentos)Descubra os princípios das arquiteturas Von Neumann e Harvard, componentes essenciais como CPU, ALU e barramentos, e suas aplicações em sistemas digitais..
1.2 Passando Informações Através de Portas
Quando se instancia um módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. em outro, as portas precisam ser mapeadas para sinais locais do módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. de nível superior, conforme o exemplo a seguir:
module top;
logic top_in;
logic top_out;
// Instanciação do módulo "exemplo_portas"
exemplo_portas u_exemplo(
.in_signal (top_in),
.out_signal(top_out)
);
// Resto da lógica de top
endmodule
Observe que, ao instanciar o módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. exemplo_portas, fazemos a associação .in_signal(top_in) e .out_signal(top_out). Assim, top_in e top_out se tornam os sinais responsáveis pela comunicação entre o módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. top e o módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. u_exemplo.
2. Parâmetros em SystemVerilog🔗
Além de conectar sinais via portas, muitas vezes precisamos personalizar o comportamento de um módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. sem modificar seu código interno. Para isso, utilizamos parâmetros.
2.1 Definição de Parâmetros
Um parâmetro é declarado no cabeçalho do módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil., dentro de #(...), ou internamente usando parameter. Veja um exemplo:
module exemplo_param #(
parameter WIDTH = 8
)(
input logic [WIDTH-1:0] data_in,
output logic [WIDTH-1:0] data_out
);
// Lógica que manipula data_in e data_out usando WIDTH
endmodule
Com isso, quem for instanciar exemplo_param pode escolher usar o valor padrão de WIDTH (no caso, 8) ou sobrescrevê-lo.
2.2 Sobrescrevendo Parâmetros em Instanciações
Ao instanciar um módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. com parâmetros, existe a opção de manter o valor padrão ou ajustar conforme a necessidade. Veja:
module top_param;
// Instancia com parâmetro padrão (WIDTH = 8)
exemplo_param u_exemplo_default(
.data_in (),
.data_out ()
);
// Instancia sobrescrevendo parâmetro (WIDTH = 16)
exemplo_param #(
.WIDTH(16)
) u_exemplo_custom(
.data_in (),
.data_out ()
);
endmodule
Ao usar exemplo_param #( .WIDTH(16) ), estamos personalizando o tamanho do barramento, sem modificar o código do módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil. original. Esse recurso torna o design altamente reutilizável.
2.3 Localparam vs. Parameter
Em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital., além de parameter, podemos encontrar localparam, que funciona de forma semelhante, mas não pode ser sobrescrito externamente. Ele é útil para constantes internas, cuja modificação externa não seja desejada:
module exemplo_param_local #(
parameter WIDTH = 8
)(
input logic [WIDTH-1:0] data_in,
output logic [WIDTH-1:0] data_out
);
localparam HALF_WIDTH = WIDTH / 2;
// "HALF_WIDTH" é para uso interno e não pode ser alterado externamente.
endmodule
3. Boas Práticas ao Passar Informações Entre Módulos🔗
1. Defina Parâmetros com Significado: Escolha nomes de parâmetros que reflitam claramente sua função. Evite abreviações obscuras que dificultem a compreensão.
2. Consistência de Tipos: Preste atenção ao tipo de dado e aos tamanhos de vetores das portas para garantir que as conexões sejam coerentes.
3. Use Localparam para Constantes Internas: Se você tem valores que não devem ser sobrescritos por quem instancia o módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil., utilize localparam em vez de parameter.
4. Mantenha a Legibilidade: Comente o propósito de cada porta e
Portas Lógicas Fundamentais: AND, OR, NOT, NAND, NOR, XOR e XNORDescubra as funções das portas lógicas (AND, OR, NOT, NAND, NOR, XOR, XNOR) por meio de exemplos e tabelas-verdade para eletrônica digital. parâmetro, facilitando a manutenção do código no futuro.
4. Exemplo Completo: Módulo com Portas e Parâmetros🔗
Abaixo, um exemplo simples que ilustra portas de entrada/saída e parâmetros configuráveis:
module shift_register #(
parameter WIDTH = 8,
parameter STAGES = 2
)(
input logic clk,
input logic reset_n,
input logic [WIDTH-1:0] data_in,
output logic [WIDTH-1:0] data_out
);
// Registradores internos
logic [WIDTH-1:0] pipeline [STAGES-1:0];
integer i;
// Lógica de deslocamento em cada ciclo de clock
always_ff @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
for (i = 0; i < STAGES; i++) begin
pipeline[i] <= '0;
end
end else begin
pipeline[0] <= data_in;
for (i = 1; i < STAGES; i++) begin
pipeline[i] <= pipeline[i-1];
end
end
end
assign data_out = pipeline[STAGES-1];
endmodule
- Portas
clk,reset_n(entradas de controle)data_in(entrada de dados)data_out(saída de dados)
- Parâmetros
WIDTH(controla a largura dos dados a serem processados)STAGES(número de estágios do pipeline)
Para instanciar esse registrador de deslocamento
Contadores e Registradores: organização e aplicação em sistemas digitaisDescubra como contadores e registradores são essenciais na organização e manipulação de dados em circuitos digitais, fundamentais para a computação moderna. em outro módulo, basta conectar as portas e sobrescrever (ou não) os parâmetros:
module top_design;
logic clk, rst_n;
logic [7:0] data_in;
logic [7:0] data_out;
// Instanciação padrão (WIDTH=8, STAGES=2)
shift_register u_shift_reg_default (
.clk (clk),
.reset_n (rst_n),
.data_in (data_in),
.data_out (data_out)
);
// Instanciação customizada (WIDTH=16, STAGES=4)
shift_register #(
.WIDTH(16),
.STAGES(4)
) u_shift_reg_custom (
.clk (clk),
.reset_n (rst_n),
.data_in (),
.data_out ()
);
endmodule
5. Conclusão🔗
Portas e parâmetros em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital. são a base da comunicação e da configurabilidade entre módulos
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil..
- As portas definem como os sinais transitam pela hierarquia
Hierarquia e Instanciação de Módulos: Conectando BlocosAprenda passo a passo como organizar hierarquias em SystemVerilog. Descubra dicas valiosas para instanciar e conectar módulos de forma clara e eficiente. do design, conectando módulos de níveis diferentes. - Os parâmetros permitem tornar blocos mais genéricos, facilitando reutilização, ajustes e personalizações sem alterar o código-fonte do módulo
Organização de Projeto: Divisão em MódulosAprenda a dividir projetos em módulos com SystemVerilog e descubra como organizar código para garantir clareza, testes facilitados e manutenção ágil..
Com essas ferramentas, é possível criar arquiteturas modulares, bem estruturadas e altamente flexíveis, adequadas a diversos cenários de projeto. Esse domínio é fundamental para quem deseja aprofundar seus conhecimentos em aceleração de hardware, descrição de circuitos digitais e desenvolvimento de sistemas complexos em SystemVerilog
Introdução ao SystemVerilog: História e EvoluçãoDescubra a trajetória do SystemVerilog, sua origem a partir do Verilog, e os marcos que transformaram a verificação de hardware na indústria digital..
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Cursos gratuitos que abordam SystemVerilog, servindo como complemento para entender portas e parâmetros: www.embarcados.com.br/cursos-gratis-sobre-systemverilog/
- Livro que explora o design em SystemVerilog, útil para aprofundar o conhecimento em comunicação entre módulos: www.amazon.com.br/SystemVerilog-Design-Using-Hardware-Modeling/dp/0387364943
- Plataforma com recursos e tutoriais que abordam conceitos essenciais do SystemVerilog: www.systemverilog.io
- Referência repleta de exemplos e explicações práticas sobre SystemVerilog, incluindo a comunicação entre módulos: www.asic-world.com/systemverilog/
- Tutorial e exemplos em SystemVerilog, úteis para compreender bases como portas e parâmetros: www.chipverify.com/systemverilog/systemverilog-tutorial
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás