Ir ao conteúdo
  • Cadastre-se

Outro VHDL - dificuldade com gerador/detector de paridade


Ir à solução Resolvido por Davi Silva Santos,

Posts recomendados

Boa tarde a todos.

Tenho o trabalho de tentar entender um programa em VHDL de um gerador/detector de paridade, até agora não entendi o código que me foi passado, mas dei uma pesquisada e entendi + ou - como um gerador e um detector de paridade funcionam.

design.vhd:

-- Code your design here
library IEEE;
use IEEE.std_logic_1164.all;

entity design is
port(
  data_in : in std_logic_vector(3 downto 0);
  paridade : out std_logic);
end entity design;

architecture rtl of design is
	signal paridade_calc : std_logic_vector(3 downto 0) := "0000";

begin
  lb1 : for i in 2 downto 0 generate

      paridade_calc(i+1) <= paridade_calc(i) xor data_in(i);
    end generate;
    paridade <= paridade_calc(3) xor data_in(3);

end rtl;

testbench.vhd:

-- Code your testbench here
library IEEE;
use IEEE.std_logic_1164.all;

entity testbench is
end testbench;

architecture tb of testbench is

  component design is
    port(
      data_in : in std_logic_vector(3 downto 0);
      paridade : out std_logic
    );
    end component;
  signal data : std_logic_vector(3 downto 0) := "0000";
  signal q_out : std_logic := '0';
  
begin

  DUT : design port map(data, q_out);
  
  data(0) <= not data(0) after 0.25ns;
  data(1) <= not data(1) after 0.5ns;
  data(2) <= not data(2) after 1ns;
  data(3) <= not data(3) after 2ns;

end tb;

E a saída é assim:

image.png.a5f08af9ee339464a2f6b5298f9d9156.png

A partir de 4ns, volta a se repetir.

O que eu entendi é que se a quantidade de 1's do binário for par, daí paridade é 0, e se for ímpar, paridade é 1, mas não entendi esse paridade_calc, o que eu imagino é que se data for por exemplo 1 (0001), paridade_calc deveria ser 10001 para que a quantidade de 1's fosse par, este 1 a mais seria o bit anexado.

 

Agradeço desde já pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • Solução

Esse código gera o bit de paridade de um sistema que trabalha com paridade par, isto é, o bit de paridade é gerado para que no total exista uma quantidade par de bits em nível alto.

 

A sua dúvida acho que é no for generate. Ele é uma construção um pouco diferente no VHDL, pois funciona de modo semelhante a uma macro do C, criando uma arquitetura condicional. O resultado desse `generate` equivale a ter escrito manualmente:


 

paridade_calc(3) <= paridade_calc(2) xor data_in(2);
paridade_calc(2) <= paridade_calc(1) xor data_in(1);
paridade_calc(1) <= paridade_calc(0) xor data_in(0);

 

O `paridade_calc` só é necessário devido às limitações do VHDL anterior à versão 2008, que permite uma construção bem mais simples para encadear as várias portas XOR que fazem o gerador de paridade par:

 

paridade <= xor data_in;

 

Uma descrição boa de como o `generate` pode ser usado em conjunto com `generic` para instanciação e arquiteturas flexíveis pode ser visto nestes sites:

http://vhdl.renerta.com/mobile/source/vhd00033.htm

https://www.ics.uci.edu/~jmoorkan/vhdlref/generate.html

https://www.hdlworks.com/hdl_corner/vhdl_ref/VHDLContents/GenerateStatement.htm

https://www.ics.uci.edu/~jmoorkan/vhdlref/vhdl.html#generate

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Davi Silva Santos

51 minutos atrás, Davi Silva Santos disse:

O resultado desse `generate` equivale a ter escrito manualmente:

 


paridade_calc(3) <= paridade_calc(2) xor data_in(2);
paridade_calc(2) <= paridade_calc(1) xor data_in(1);
paridade_calc(1) <= paridade_calc(0) xor data_in(0);

Mas `data_in` não foi inicializada com nada (pelo menos não no design), diferente de `paridade_calc` que foi inicializado com "0000".

Também não entendi o que vai sair dessas operações com XOR, e se era pra sair um bit de paridade, não entendi como isso vai acontecer.

 

E depois, aqui:

8 horas atrás, Lucca Rodrigues disse:

paridade <= paridade_calc(3) xor data_in(3);

Por que só a operação com XOR da posição 3 de ambos os vetores está sendo atribuída à `paridade`?

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...