Implementações em SystemVerilog para a disciplina Projeto de Sistemas VLSI do Mestrado em Ciência da Computação (2021.1)
A seguir breves explicações dos códigos.
Nota: os arquivos com "_tb" são arquivos de testbench, precisam ser utilizados na simulação junto com os outros arquivos
Unidade lógica e aritmética (ULA) simples.
Possui uma entrada ctrl de controle, com 3 bits, e outras duas entradas src0 e src1 com 8 bits cada.
A saída result também tem 8 bits.
Obedece a tabela verdade a seguir:
ctrl | result |
---|---|
0** | src0 + 1 |
100 | src0 + src1 |
101 | src0 - src1 |
110 | src0 and src1 |
111 | src0 or src1 |
Deste modo, o circuito obedecerá a seguinte tabela verdade:
a | b | a > b |
---|---|---|
00 | 00 | 0 |
00 | 01 | 0 |
00 | 10 | 0 |
00 | 11 | 0 |
01 | 00 | 1 |
01 | 01 | 0 |
01 | 10 | 0 |
01 | 11 | 0 |
10 | 00 | 1 |
10 | 01 | 1 |
10 | 10 | 0 |
10 | 11 | 0 |
11 | 00 | 1 |
11 | 01 | 1 |
11 | 10 | 1 |
11 | 11 | 0 |
O ring counter é um contador cíclico que muda de estado a cada ciclo de clock, na borda de subida.
Se o reset está em nível lógico alto, a saída é "0001", mas senão, então o 1 da saída vai deslocar para a direita a cada novo ciclo.
Isso pode ser melhor percebido na tabela verdade abaixo:
reset | clock | q |
---|---|---|
1 | x | 0001 |
0 | high | 1000 |
0 | high | 0100 |
0 | high | 0010 |
0 | high | 0001 |
0 | high | 1000 |
Os códigos podem ser testados no https://www.edaplayground.com/
Como testar?
- Fazer login no site com conta do Google ou Facebook
- Copiar e colar os arquivos de design e testbench nos respectivos lugares
- Verificar se a linguagem do site está configurada para "SystemVerilog/Verilog"
- Escolher a ferramenta Aldec Riviera em "Tools & Simulators"
- Marcar a opção "Open EPWave after run" para visualizar a forma de onda gerada no teste
- Clique em "Run" para executar