Guia prático: Configuração de Ambiente para SystemVerilog
SystemVerilog: Diferenças Essenciais entre FPGA e ASIC
Neste tutorial, exploraremos as principais diferenças e considerações que surgem ao implementar projetosIntroduçã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. de 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. em FPGA
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. e em ASIC
Testes Físicos e Validação de HardwareAprenda a validar protótipos FPGA e ASIC com técnicas de teste físico, instrumentação e documentação rigorosa para projetos robustos e confiáveis.. A meta é ajudar você, estudante, engenheiro ou entusiasta de hardware
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos., a compreender as nuances de cada plataforma, bem como a pensar de forma criteriosa sobre quais recursos da linguagem e estratégias de design são mais adequados para cada caso.
Contextualização Geral🔗
A maioria dos projetosIntroduçã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. de 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. pode ser sintetizada tanto em FPGA
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. quanto em ASIC
Testes Físicos e Validação de HardwareAprenda a validar protótipos FPGA e ASIC com técnicas de teste físico, instrumentação e documentação rigorosa para projetos robustos e confiáveis., mas a forma como esses dispositivos são arquitetados tem um impacto direto nas decisões de projeto
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.:
- FPGAs (Field-Programmable Gate Arrays
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes.) são semicondutores reconfiguráveis, compostos por blocos lógicos
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. (geralmente LUTs – Look-Up Tables), flip-flops
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais., blocos de memória internos (como Block RAM
Sistemas de Memória: RAM (SRAM vs. DRAM) e ROM (PROM, EPROM, EEPROM, Flash)Descubra como funcionam as memórias RAM (SRAM e DRAM) e ROM (PROM, EPROM, EEPROM, Flash), fundamentais para sistemas digitais e eletrônica.) e alguns blocos especializados (como DSPs).
- ASICs (Application-Specific Integrated Circuits) são projetos
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. feitos sob medida para uma aplicação específica e construídos em uma fábrica de semicondutores. Eles utilizam standard cells, memory macros
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. e outras estruturas
Estruturas e Uniões: Organizando Dados ComplexosAprenda como aplicar estruturas e uniões em SystemVerilog. Descubra a diferença entre packed e unpacked com exemplos práticos e dicas para um design otimizado. customizadas definidas por bibliotecas da tecnologia adotada.
Compreender como cada dispositivo implementa sua lógica e como isso afeta clocking, roteamentoPasso a Passo para o Design de PCBAprenda a projetar, editar e fabricar PCBs com nosso tutorial detalhado, ideal para estudantes, hobbistas e profissionais de eletrônica., recursos de memória
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. e estratégias de otimização é fundamental para um projeto
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. bem-sucedido.
Recursos de Lógica e Arquitetura🔗
Em FPGAsIntrodução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes., o elemento básico de construção é a LUT, que pode ser programada para realizar diferentes funções
Métodos e Sobrecarga: Técnicas para Maior FlexibilidadeDescubra como métodos, tasks, functions e sobrecarga em SystemVerilog otimizam a programação orientada a objetos com exemplos práticos e dicas de boas práticas. lógicas. Já em ASICs, os recursos lógicos derivam de uma biblioteca de módulos pré-definidos (gates, flip-flops
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais., muxes etc.), chamada de standard cell library.
Característica | FPGA | ASIC |
---|---|---|
Estrutura lógica | LUTs + Flip-flops | Standard cells (AND, OR, NAND, etc.) + Flip-flops |
Personalização | Reconfigurável (após fabricação) | Projetado para uso específico |
Densidade de lógica | Limitada pela quantidade de LUTs | Geralmente maior, pois aproveita otimizações em gate-level |
Custo de desenvolvimento | Menor (prototipagem rápida) | Mais elevado (fabricação sob demanda) |
Custo unitário em alta escala | Mais caro (por dispositivo) | Mais barato, pois se paga a “arte” da máscara uma única vez |
Em projetosIntroduçã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. 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., não há grandes diferenças na forma de descrever a lógica em si, pois ambas as plataformas seguem princípios comuns de sintetizabilidade. Porém, a disponibilidade de recursos físicos e as formas de interconexão interna são distintas, o que pode impactar bastante o mapeamento do seu design.
Memória e Blocos Dedicados🔗
FPGAs fornecem blocos de memóriaBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. prontos (muitas vezes chamados de BRAM ou Block RAM
Sistemas de Memória: RAM (SRAM vs. DRAM) e ROM (PROM, EPROM, EEPROM, Flash)Descubra como funcionam as memórias RAM (SRAM e DRAM) e ROM (PROM, EPROM, EEPROM, Flash), fundamentais para sistemas digitais e eletrônica.) que podem ser instanciados em um design 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. de forma simples, via recursos nativos das ferramentas de síntese
Dicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais.. Há também DSP
Processamento de Sinais Digitais (DSP): Fundamentos: filtros digitais e transformada discretaDescubra os fundamentos do DSP, explore filtros FIR e IIR e aplique DFT/FFT para análise de áudio, sensores e sistemas embarcados com eficiência. blocks para realizar operações matemáticas de modo eficiente.
Nos ASICs, as memóriasSistemas de Memória: Arquitetura interna: endereçamento e organizaçãoAprenda como o endereçamento e a organização interna das memórias digitais, por meio de matrizes e decodificadores, garantem acesso rápido e eficiente. internas são projetadas ou selecionadas a partir de bibliotecas de memory compiler. Assim, é crucial que o código 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. respeite as diretrizes para inferir a memória
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. correta (single-port RAM
Sistemas de Memória: RAM (SRAM vs. DRAM) e ROM (PROM, EPROM, EEPROM, Flash)Descubra como funcionam as memórias RAM (SRAM e DRAM) e ROM (PROM, EPROM, EEPROM, Flash), fundamentais para sistemas digitais e eletrônica., dual-port RAM
Sistemas de Memória: RAM (SRAM vs. DRAM) e ROM (PROM, EPROM, EEPROM, Flash)Descubra como funcionam as memórias RAM (SRAM e DRAM) e ROM (PROM, EPROM, EEPROM, Flash), fundamentais para sistemas digitais e eletrônica., etc.) ou para instanciar explicitamente as macros
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. fornecidas pela foundry. Da mesma forma, blocos de DSP
Processamento de Sinais Digitais (DSP): Fundamentos: filtros digitais e transformada discretaDescubra os fundamentos do DSP, explore filtros FIR e IIR e aplique DFT/FFT para análise de áudio, sensores e sistemas embarcados com eficiência. podem ser substituídos por arranjos lógicos (somadores
Circuitos Combinacionais: Somadores, Subtratores e MultiplexadoresExplore as funções essenciais dos circuitos combinacionais, abrangendo somadores, subtratores e multiplexadores, e aprenda seus princípios de operação., multiplicadores, etc.) cuidadosamente otimizados.
Clocking e Timing🔗
Embora Timing ConstraintsTiming Constraints e Análise TemporalAprenda a definir timing constraints e aplicá-las na análise temporal para obter timing closure confiável em projetos FPGA/ASIC. e Análise Temporal
Timing Constraints e Análise TemporalAprenda a definir timing constraints e aplicá-las na análise temporal para obter timing closure confiável em projetos FPGA/ASIC. sejam abordados em outro tutorial, vale destacar o seguinte no contexto de FPGAs vs. ASICs:
- Em FPGAs
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes., a ferramenta de place-and-route busca atender às restrições de tempo
Timing Constraints e Análise TemporalAprenda a definir timing constraints e aplicá-las na análise temporal para obter timing closure confiável em projetos FPGA/ASIC. dentro da topologia fixa do dispositivo (colocação física dos blocos e roteamento).
- Em ASICs, a etapa de layout
Passo a Passo para o Design de PCBAprenda a projetar, editar e fabricar PCBs com nosso tutorial detalhado, ideal para estudantes, hobbistas e profissionais de eletrônica. e floorplanning é muito mais flexível, pois não existe a limitação de blocos físicos fixos
Tipos de Resistores: Fixo, Variável, SMD e MaisExplore os principais tipos de resistores, desde fixos até SMD, e aprenda como escolher o ideal para otimizar a segurança e desempenho dos seus circuitos., porém a complexidade do timing
Timing e Sensitivity: Disparando Ações em Eventos EspecíficosDomine o timing e sensibilidade em SystemVerilog com nosso tutorial completo. Aprenda a sincronizar eventos e controlar processos com precisão e boas práticas. closure pode ser muito maior, devido à vasta quantidade de caminhos possíveis.
No nível de descrição SystemVerilogIntroduçã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., o desenvolvedor deve garantir que cada bloco esteja corretamente pipelineado e que as frequências
Osciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. de operação sejam definidas de acordo com as capacidades de cada tecnologia.
Custo, Escalabilidade e Ciclo de Projeto🔗
Confiabilidade e custo são fatores cruciais na escolha entre FPGAIntrodução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. e ASIC:
- FPGA
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. oferece um caminho rápido para protótipos e pequenos volumes de produção, permitindo atualizações de hardware
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. sem fabricar novos chips.
- ASIC
Testes Físicos e Validação de HardwareAprenda a validar protótipos FPGA e ASIC com técnicas de teste físico, instrumentação e documentação rigorosa para projetos robustos e confiáveis. pode justificar o investimento quando há alto volume de produção ou requisitos específicos de performance e consumo de energia
Portas Lógicas e Famílias Lógicas: Comparação de famílias lógicas: TTL, CMOS, ECL (vantagens e limitações)Descubra as características, vantagens e limitações das famílias lógicas TTL, CMOS e ECL, essenciais para projetos digitais modernos. impossíveis de se obter em FPGAs.
No entanto, em termos de SystemVerilogIntroduçã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., a linguagem continua a mesma em ambos os casos. A principal diferença está no fechamento de projeto
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., isto é, na forma como se garante desempenho e se validam todos os caminhos críticos.
Convergindo para Escolhas de Projeto🔗
Ao desenvolver um projetoIntroduçã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. 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., você deve ter em mente:
1. Planejar recursos: saber se seu projeto vai exigir muitos blocos de memóriaBoas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos., DSPs ou alto número de I/Os pode direcionar para FPGA (caso ainda se deseje iteração e prototipagem) ou para ASIC (se os volumes e requisitos de desempenho e consumo exigirem um design especializado).
2. Gerenciar o escopo: projetosIntroduçã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. com grande volume de lógica fixada, exigindo altíssima performance, podem ser bons candidatos ao ASIC, pois se pode personalizar cada bloco em nível físico para atingir metas de clock
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais. e potência
Dimensionamento de Resistores em Projetos PráticosAprenda a dimensionar resistores com segurança e precisão. Tutorial prático sobre cálculos de resistência, potência, tolerância e coeficiente térmico..
3. Envolver a equipe de sínteseDicas de Desempenho: Simulação e SínteseAprenda estratégias e recomendações para otimizar simulação e síntese em projetos SystemVerilog, melhorando verificação e resultados finais. e layout: em FPGAs, a equipe se concentra em escolher a melhor forma de mapear LUTs e blocos dedicados. Em ASICs, o time de back-end ajusta o projeto
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. por meio de estratégias de floorplan e uso de bibliotecas de célula, que têm impacto direto em área, consumo e confiabilidade.
Boas Práticas em SystemVerilog voltadas para FPGA/ASIC🔗
- Use sempre construções sintetizáveis do idioma: evite construções puramente de verificação
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. ou de alto nível que não mapeiam em gates ou LUTs.
- Prefira descrever memória
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. por comportamentos que possam ser inferidos tanto em FPGA quanto em ASIC; caso necessite de algo muito específico, verifique com seu fornecedor (FPGA
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes.) ou foundry (ASIC) as macros
Boas Práticas de Programação Embarcada e Otimização de CódigoDescubra técnicas e práticas essenciais para otimizar o código de sistemas embarcados, garantindo desempenho e eficiência em projetos eletrônicos. adequadas.
- Observe o particionamento de clock
Flip-Flops e Latches: Tipos: SR, JK, D, T (funcionamento e clock)Aprenda os conceitos de Flip-Flops e Latches, incluindo tipos SR, JK, D e T, além do impacto do clock na sincronização de circuitos digitais. e reset: arquiteturas de FPGA
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. podem impor caminhos de reset específicos, enquanto ASICs permitem estratégias mais flexíveis, porém exigem cuidados adicionais em sinalização de power-on.
- Documente suas necessidades de performance e área: isso auxiliará a equipe (ou você mesmo, se estiver no papel de projetista) a avaliar o balanceamento ideal entre frequências
Osciladores e Relógios Digitais: Geração e Uso de Sinais de SincronismoDescubra o papel essencial dos osciladores e sinais de clock na sincronização e funcionamento de circuitos digitais modernos. de clock, número de estágios de pipeline e opções de otimização.
Conclusão🔗
A implementação de projetosIntroduçã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. 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. em FPGA
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. e em ASIC
Testes Físicos e Validação de HardwareAprenda a validar protótipos FPGA e ASIC com técnicas de teste físico, instrumentação e documentação rigorosa para projetos robustos e confiáveis. apresenta particularidades que vão desde a organização interna dos blocos lógicos
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. até a forma de alocar memórias e gerenciar suas restrições físicas. Em última análise, FPGA
Introdução a Dispositivos Lógicos Programáveis: CPLD e FPGAExplore os Dispositivos Lógicos Programáveis: compreenda CPLDs e FPGAs, suas vantagens e aplicações para projetos digitais modernos e eficientes. é sinônimo de rapidez
Portas Lógicas e Famílias Lógicas: Comparação de famílias lógicas: TTL, CMOS, ECL (vantagens e limitações)Descubra as características, vantagens e limitações das famílias lógicas TTL, CMOS e ECL, essenciais para projetos digitais modernos. no desenvolvimento e flexibilidade de reconfiguração, enquanto o ASIC
Testes Físicos e Validação de HardwareAprenda a validar protótipos FPGA e ASIC com técnicas de teste físico, instrumentação e documentação rigorosa para projetos robustos e confiáveis. foca em alta performance, custo reduzido em grandes volumes e maior personalização física.
Ao conhecer essas diferenças, você estará mais bem preparado para tomar decisões de design, lidar com escolhas de arquitetura e se beneficiar ao máximo dos recursos que a linguagem SystemVerilogIntroduçã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. oferece para cada tipo de tecnologia.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Fonte dos padrões e diretrizes que fundamentam o uso de linguagens como SystemVerilog, essenciais para práticas de design em FPGA e ASIC: www.ieee.org
- Livro que explora as técnicas de design e modelagem em SystemVerilog, aplicável tanto para FPGA quanto para ASIC, ajudando na compreensão das estratégias de implementação: www.amazon.com.br/SystemVerilog-Design-Using-Hardware-Modeling/dp/0387364943
- Organização responsável pela padronização e evolução do SystemVerilog, oferecendo recursos e iniciativas que suportam desenvolvimentos em projetos FPGA e ASIC: www.accellera.org
- Recurso focado em SystemVerilog para design de ASIC, apresentando diretrizes e dicas que se complementam com o contexto de implementação em ASIC: www.asic-world.com/systemverilog/
- Tutorial de SystemVerilog que aborda conceitos e exemplos úteis para projetos implementados em FPGA e ASIC: www.chipverify.com/systemverilog/systemverilog-tutorial