Ir ao conteúdo

Outro VHDL - dificuldade com gerador/detector de paridade


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

Posts recomendados

Postado

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.

  • Solução
Postado

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
Postado

@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`?

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!