Skip to content

Commit

Permalink
Merge pull request #52 from Caroles12/feature/filtro-fir
Browse files Browse the repository at this point in the history
Ajuste das imagens do README.
  • Loading branch information
xtarke authored Mar 16, 2022
2 parents 2b7dd2d + 24d9038 commit 3895591
Show file tree
Hide file tree
Showing 12 changed files with 39 additions and 45 deletions.
41 changes: 19 additions & 22 deletions peripherals/dig_filt/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# Filtro digital de média móvel


# Filtro digital de média móvel

Este projeto implementa um filtro digital de média móvel como um dos periférico do núcleo riscv. O periférico implementa n registradores de 32 bits.

Expand Down Expand Up @@ -127,16 +129,18 @@ int main(){
# Filtro FIR

Esse projeto implementa um filtro FIR como um dos periféricos do núcleo do riscv. Para realizar o equacionamento da entidade do filtro, foi utilizado a implementação proposta no livro Circuit Design with VHDL[1] de Volnei A. Pedroni. A equação para esse filtro pode ser vista abaixo.
$$
y(n) = \sum_{k=0}^{M} b_k*x[n-k]
$$

<p align="center"><img src = "img/equacaofiltro.png"/></p>

Em que M representa a ordem do filtro, b_k os coeficientes do filtro, x(n) é o valor do sinal de entrada e y(n) é o sinal de saída. Para o periférico do riscv, foi implementado um filtro com quatro coeficientes de entrada, representados por 32 bits, esses valores são armazenados em um vetor do tipo memory_t e imputados através do software.

O enable desse periférico é feito através de hardware, ou seja, a entrada somente será filtrada quando todos os coeficientes já tiverem sidos carregados para a memória, assim, o pino "data_in_enable" serve apenas para conferência, podendo ser suprimido da saída. A entrada de dados também é representada por 32 bits, dessa forma, o valor da saída será de 64 bits, em que a parte alta(msb) pode ser visualizada nos pinos de gpio e a parte baixa(lsb) no display em formato hexadecimal.

A saída utilizada nesse filtro(data_out) serve apenas para conferência no componente system sources e probes, podendo ser suprimida.

![image-20220312113357497](C:\Users\carol\AppData\Roaming\Typora\typora-user-images\image-20220312113357497.png)
<p align="center"><img src = "img/filtro1.png"/></p>



## Funcionamento do Periférico

Expand All @@ -146,32 +150,25 @@ Assim, quando ocorrer a borda de subida do clock e habilitação de escrita esti

A entrada de dados é cascateada, de forma que ocorrerá a multiplicação entre os coeficientes e o valor da entrada. A saída é um sinal que recebe o somatório final. Quando a habilitação de leitura estiver ativada, será enviado a parte msb do dado em um endereço e então será enviado a parte lsb para outro endereço.

![image-20220312121207200](C:\Users\carol\AppData\Roaming\Typora\typora-user-images\image-20220312121207200.png)
<p align="center"><img src = "img/modelsim.png"/></p>



Assim, conforme a imagem, temos que:
$$
y[0] = coef(0) * datain(0) = -1
$$

$$
y[1] = coef(0) * datain(1) + coef(1)*datain(0) = -2
$$
<p align="center"><img src = "img/resultado.png"/></p>

$$
y[2] = coef(0) * datain(2) + coef(1)*datain(1) + coef(0)*datain(0) = 2
$$

$$
y[3] = coef(0)*datain(3) + coef(1)*datain(2) + coef(2)*datain(1) + coef(3)*datain(0) = 0
$$

## Código em C

Para adicionar o periférico ao núcleo do riscv, foi necessário modificar os seguintes arquivos:

1. memory/iodatabusmux.vhd

![image-20220312125129108](C:\Users\carol\AppData\Roaming\Typora\typora-user-images\image-20220312125129108.png)
<p align="center"><img src = "img/modificacoes.png"/></p>



2. Inclusão do endereço em software/_core/hardware.h

Expand Down Expand Up @@ -209,7 +206,7 @@ Para adicionar o periférico ao núcleo do riscv, foi necessário modificar os s


4. Em fir_filt.c temos as funções.
2. Em fir_filt.c temos as funções.

```c
/* FIR filter peripheral
Expand Down Expand Up @@ -250,8 +247,8 @@ Para adicionar o periférico ao núcleo do riscv, foi necessário modificar os s
}

```
5. Em main_fir_filt.c temos as chamadas de funções e a possibilidade de alterar os coeficientes do filtro.
3. Em main_fir_filt.c temos as chamadas de funções e a possibilidade de alterar os coeficientes do filtro.
```c
/*
Expand Down
Binary file added peripherals/dig_filt/img/equacaofiltro.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added peripherals/dig_filt/img/filtro1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added peripherals/dig_filt/img/modelsim.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added peripherals/dig_filt/img/modificacoes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added peripherals/dig_filt/img/resultado.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
43 changes: 20 additions & 23 deletions software/dig_filt/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# Filtro digital de média móvel


# Filtro digital de média móvel

Este projeto implementa um filtro digital de média móvel como um dos periférico do núcleo riscv. O periférico implementa n registradores de 32 bits.

Expand Down Expand Up @@ -127,16 +129,18 @@ int main(){
# Filtro FIR

Esse projeto implementa um filtro FIR como um dos periféricos do núcleo do riscv. Para realizar o equacionamento da entidade do filtro, foi utilizado a implementação proposta no livro Circuit Design with VHDL[1] de Volnei A. Pedroni. A equação para esse filtro pode ser vista abaixo.
$$
y(n) = \sum_{k=0}^{M} b_k*x[n-k]
$$

<p align="center"><img src = "img/equacaofiltro.png"/></p>

Em que M representa a ordem do filtro, b_k os coeficientes do filtro, x(n) é o valor do sinal de entrada e y(n) é o sinal de saída. Para o periférico do riscv, foi implementado um filtro com quatro coeficientes de entrada, representados por 32 bits, esses valores são armazenados em um vetor do tipo memory_t e imputados através do software.

O enable desse periférico é feito através de hardware, ou seja, a entrada somente será filtrada quando todos os coeficientes já tiverem sidos carregados para a memória, assim, o pino "data_in_enable" serve apenas para conferência, podendo ser suprimido da saída. A entrada de dados também é representada por 32 bits, dessa forma, o valor da saída será de 64 bits, em que a parte alta(msb) pode ser visualizada nos pinos de gpio e a parte baixa(lsb) no display em formato hexadecimal.

A saída utilizada nesse filtro(data_out) serve apenas para conferência no componente system sources e probes, podendo ser suprimida.

![image-20220312113357497](C:\Users\carol\AppData\Roaming\Typora\typora-user-images\image-20220312113357497.png)
<p align="center"><img src = "img/filtro1.png"/></p>



## Funcionamento do Periférico

Expand All @@ -146,32 +150,25 @@ Assim, quando ocorrer a borda de subida do clock e habilitação de escrita esti

A entrada de dados é cascateada, de forma que ocorrerá a multiplicação entre os coeficientes e o valor da entrada. A saída é um sinal que recebe o somatório final. Quando a habilitação de leitura estiver ativada, será enviado a parte msb do dado em um endereço e então será enviado a parte lsb para outro endereço.

![image-20220312121207200](C:\Users\carol\AppData\Roaming\Typora\typora-user-images\image-20220312121207200.png)
<p align="center"><img src = "img/modelsim.png"/></p>



Assim, conforme a imagem, temos que:
$$
y[0] = coef(0) * datain(0) = -1
$$

$$
y[1] = coef(0) * datain(1) + coef(1)*datain(0) = -2
$$
<p align="center"><img src = "img/resultado.png"/></p>

$$
y[2] = coef(0) * datain(2) + coef(1)*datain(1) + coef(0)*datain(0) = 2
$$

$$
y[3] = coef(0)*datain(3) + coef(1)*datain(2) + coef(2)*datain(1) + coef(3)*datain(0) = 0
$$

## Código em C

Para adicionar o periférico ao núcleo do riscv, foi necessário modificar os seguintes arquivos:
Para adicionar o periférico ao núcleo do riscv, foi necessário modificar os seguintes arquivos:

1. memory/iodatabusmux.vhd

![image-20220312125129108](C:\Users\carol\AppData\Roaming\Typora\typora-user-images\image-20220312125129108.png)
<p align="center"><img src = "img/modificacoes.png"/></p>



2. Inclusão do endereço em software/_core/hardware.h

Expand Down Expand Up @@ -209,7 +206,7 @@ Para adicionar o periférico ao núcleo do riscv, foi necessário modificar os s


4. Em fir_filt.c temos as funções.
2. Em fir_filt.c temos as funções.

```c
/* FIR filter peripheral
Expand Down Expand Up @@ -250,8 +247,8 @@ Para adicionar o periférico ao núcleo do riscv, foi necessário modificar os s
}

```
5. Em main_fir_filt.c temos as chamadas de funções e a possibilidade de alterar os coeficientes do filtro.
3. Em main_fir_filt.c temos as chamadas de funções e a possibilidade de alterar os coeficientes do filtro.
```c
/*
Expand Down
Binary file added software/dig_filt/img/equacaofiltro.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added software/dig_filt/img/filtro1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added software/dig_filt/img/modelsim.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added software/dig_filt/img/modificacoes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added software/dig_filt/img/resultado.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 3895591

Please sign in to comment.