VHDL even pariteit checken?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 03-10 15:43
Hoi, ik moet voor een opdracht checken of van twee ingangssignalen (beide 4 bits groot) hun even pariteit gelijk is. Dit in VHDL.

Met andere woorden: ik heb een ingangsignaal A met 4 bits (bvb "0010") en ingangssignaal B met 4 bits (bvb "1101").
De opdracht is om een uitgang te definiëren namelijk "epeq" en deze is 1 bit, dus oftewel '1' oftewel '0'.

Bij de info van de taak staat; epeq = “even pariteit A” gelijk aan “even pariteit B”, dus epeq is '1' als even pariteit A gelijk is aan even pariteit B.


Nu ik denk dat dit wil zeggen dat A en B elk evenveel 1'tjes moet bevatten. Bvb A = '1110' en B = '1101'. Dan hebben ze dezelfde even pariteit.

Nu weet ik niet zo goed hoe ik dit moet verwezenlijken in VHDL, kan iemand mij hierbij helpen?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waar loop je precies vast?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 03-10 15:43
Hoe ik dit moet opstellen, om te beginnen al hoe je de even pariteit van een 4bitswaarde neemt, of dit via een methode kan of zelf moet bedacht worden of..
Hou in rekening dat dit de eerste aanraking met VHDL is voor onze klas, dus het is allemaal wat zoeken maar ik geraak er niet aan uit..

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

*kuch count / compare*

Tenminste, zoals jij het beschijft maakt het niet uit "waar" een 1 of een 0 staat per 4-bits signaal, zolang het aantal enen en nullen in A en B evenveel is, is epeq gelijk aan 1.

Wat je ook kan doen, maar dat is een omweg die misschien lastiger is: van elk 4-bits waarde, tel de individuele enen bij elkaar op. Als de som van A gelijk is aan de som van B, is epeq ook 1.

Maar gezien je vraagstelling; VHDL is een best lastige taal omdat je moet beginnen met vooraf-gedefinieerde "operators" en die moet loslaten op "variabele" signalen. Dat vereist abstract denken en het loslaten van "hoeveel is een signaal" en gaan denken in "hoeveel enen en nullen heeft een signaal", bijvoorbeeld.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 03-10 15:43
MAX3400 schreef op donderdag 7 december 2017 @ 20:29:
*kuch count / compare*

Tenminste, zoals jij het beschijft maakt het niet uit "waar" een 1 of een 0 staat per 4-bits signaal, zolang het aantal enen en nullen in A en B evenveel is, is epeq gelijk aan 1.

Wat je ook kan doen, maar dat is een omweg die misschien lastiger is: van elk 4-bits waarde, tel de individuele enen bij elkaar op. Als de som van A gelijk is aan de som van B, is epeq ook 1.

Maar gezien je vraagstelling; VHDL is een best lastige taal omdat je moet beginnen met vooraf-gedefinieerde "operators" en die moet loslaten op "variabele" signalen. Dat vereist abstract denken en het loslaten van "hoeveel is een signaal" en gaan denken in "hoeveel enen en nullen heeft een signaal", bijvoorbeeld.
Inderdaad, ik moet kijken of het aantal enen in A gelijk is aan het aantal enen in B. Ik zoek even op over count/compare. Bedankt!

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

BramVanha schreef op donderdag 7 december 2017 @ 20:33:
[...]


Inderdaad, ik moet kijken of het aantal enen in A gelijk is aan het aantal enen in B. Ik zoek even op over count/compare. Bedankt!
Ga ook even kijken (of later bedenken); als VHDL ook arrays kan uitlezen (of een matrix), is dat efficienter rekenen als je hele lange signalen moet analyseren.

Zet 9.634.678.431 maar eens om in normaal binair. Wat is dan efficienter; alle eentjes tellen "achter elkaar" of per blokken van 8 het aantal eentjes tellen? Zeker interessant als je herhalende arrays/matrices kan vinden; dan weet je van te voren al deelresultaten en hoef je alleen 1 rij/blok opnieuw te berekenen.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 03-10 15:43
MAX3400 schreef op donderdag 7 december 2017 @ 20:36:
[...]

Ga ook even kijken (of later bedenken); als VHDL ook arrays kan uitlezen (of een matrix), is dat efficienter rekenen als je hele lange signalen moet analyseren.

Zet 9.634.678.431 maar eens om in normaal binair. Wat is dan efficienter; alle eentjes tellen "achter elkaar" of per blokken van 8 het aantal eentjes tellen? Zeker interessant als je herhalende arrays/matrices kan vinden; dan weet je van te voren al deelresultaten en hoef je alleen 1 rij/blok opnieuw te berekenen.
Daar moet ik toch wel nog even over nadenken hoor.. Is veel in 1 keer, vooral prutsen nu :D

Acties:
  • +2 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 07-10 13:02
pariteiten werden vroeger altijd met XOR bepaald, kijk eens hier:

https://stackoverflow.com...it-parity-checker-in-vhdl

van elke input dit bepalen en dan vergelijken, of proberen het in 1 formule te stoppen.

Hier werd naar verwezen dat je XOR kunt gebruiken en aan 1 bit genoeg hebt:

Wikipedia: Parity bit

Dit is ook nog wel een aardige, maar wat omslachtiger (niet dynamisch uitbreidbaar):

http://www.dgtal-sysworld...enerator-and-checker.html

Acties:
  • +3 Henk 'm!

  • Anteros
  • Registratie: Januari 2009
  • Laatst online: 00:46
counter/compare is niet aan te raden in dit geval omdat:
a) Je synchrone logica moet hebben voor de counter en dus een clock-source
b) Je relatief veel logica maakt voor zoiets simpels

Je kan het eenvoudiger oplossen met een tweetal 4-bit XORs en de twee uitgangen and-en met elkaar. Een alternatief zijn twee 4-bit muxen en een and-port. Dit kan geheel a-sychroon. Wat je ook nog kan doen is twee block-rams met 16 elementen ieder en de 1-bit uitgangen vervolgens and-en. Dat laatste is overigens wel 'duur' ivm de block-rams.

Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 03-10 15:43
Even geprutst en tot het volgende gekomen, via stackoverflow (https://stackoverflow.com...it-parity-checker-in-vhdl) (kan het eventjes niet testen want het schoolnetwerk ligt even plat en ik moet via VPN verbonden zijn voor de licentie..)
---------
architecture Behavioral of parity_checker is

signal parityA : STD_LOGIC;
signal parityB : STD_LOGIC;

begin
-- even aantal 1 maakt parity 0, oneven aantal 1 maakt parity 1
parityA <= xor A;
parityB <= xor B;

if (parityA = parityB = '0') then
epeq = '1';

end Behavioral;
-----

Maar dan bemerkte ik mij al snel dat hierop ook zou ingegaan worden mocht A "1111" zijn en B "1010"..

Acties:
  • +1 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 07-10 13:02
ja maar dat klopt dan toch ook? Zowel 1111 als 1010 hebben een even aantal 1en.

Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 03-10 15:43
PageFault schreef op donderdag 7 december 2017 @ 21:00:
ja maar dat klopt dan toch ook? Zowel 1111 als 1010 hebben een even aantal 1en.
Nee, de opdracht is: epeq = “even pariteit A” gelijk aan “even pariteit B”. Dus ik denk dat dit wil zeggen "het aantal ééntjes in A moet gelijk zijn aan het aantal ééntjes in B".
Vandaar dat ik denk dat mijn antwoord hierboven niet zal kloppen voor mijn opdracht?

Acties:
  • +2 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 07-10 13:02
Nee pariteit geeft alleen maar even of oneven aantal eentjes, niet het werkelijke aantal. Anders had er moeten staan: zelfde aantal enen en niet iets met pariteit.

Acties:
  • 0 Henk 'm!

  • Anteros
  • Registratie: Januari 2009
  • Laatst online: 00:46
BramVanha schreef op donderdag 7 december 2017 @ 20:59:
Even geprutst en tot het volgende gekomen, via stackoverflow (https://stackoverflow.com...it-parity-checker-in-vhdl) (kan het eventjes niet testen want het schoolnetwerk ligt even plat en ik moet via VPN verbonden zijn voor de licentie..)
---------
architecture Behavioral of parity_checker is

signal parityA : STD_LOGIC;
signal parityB : STD_LOGIC;

begin
-- even aantal 1 maakt parity 0, oneven aantal 1 maakt parity 1
parityA <= xor A;
parityB <= xor B;

if (parityA = parityB = '0') then
epeq = '1';

end Behavioral;
-----

Maar dan bemerkte ik mij al snel dat hierop ook zou ingegaan worden mocht A "1111" zijn en B "1010"..
Enkele opmerkingen:
a) De xor operator zoals jij die gebruikt werkt alleen met VHDL 2008. Deze versie is echter veel minder populair en minder ondersteund dan de meer gangbare vhdl-93
b) if-then kan niet gebruikt worden buiten een process. Gebruik when-else;
c) Ik mis een entity declaratie met de in en out ports

Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 03-10 15:43
Anteros schreef op donderdag 7 december 2017 @ 21:06:
[...]


Enkele opmerkingen:
a) De xor operator zoals jij die gebruikt werkt alleen met VHDL 2008. Deze versie is echter veel minder populair en minder ondersteund dan de meer gangbare vhdl-93
b) if-then kan niet gebruikt worden buiten een process. Gebruik when-else;
c) Ik mis een entity declaratie met de in en out ports
Kan ik in mijn versie VHDL (ik gebruik Vivado 2017.3) dan geen XOR operatie uitvoeren?
Met die if-then dat niet buiten een proces kan wist ik niet, ik houd er rekening mee.
De entity heb ik al gedaan maar heb dit niet overgenomen, enkel de architecture. Vandaar.

Acties:
  • 0 Henk 'm!

  • Anteros
  • Registratie: Januari 2009
  • Laatst online: 00:46
Jawel, kan wel in Vivado, maar dan moet je dat expliciet per file aangeven. Vivado heeft wel (gedeeltelijk) 2008 ondersteuning maar dit werkt bv niet samen met het block-design gedeelte.

Ikzelf gebruik (professioneel) bijna altijd -93.

Wil je jouw functionaliteit gebruiken in -93, gebruik dan de volgende XOR constructie:

parity <= a(3) xor a(2) xor a(1) xor a(0);

[ Voor 22% gewijzigd door Anteros op 08-12-2017 08:11 ]


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Ik neem aan dat als de synthesizer het ondersteunt je het ook gewoon kunt gebruiken? Wat is daar het nadeel van?

Ik dacht dat C programmeurs behoudend waren, maar dat valt wel mee geloof ik :P

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Anteros
  • Registratie: Januari 2009
  • Laatst online: 00:46
Nou, was het maar zo. Het is mogelijk om 2008 te synthetiseren maar je kan dan geen IP blokken maken. Deze IP blokken kan je normaal gebruiken in de block designer. Xilinx (en andere vendors) vinden 2008 te weinig gebruikt worden om er veel effort in te steken. Soort van kip-ei probleem.

Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
farlane schreef op vrijdag 8 december 2017 @ 00:39:
Ik neem aan dat als de synthesizer het ondersteunt je het ook gewoon kunt gebruiken? Wat is daar het nadeel van?

Ik dacht dat C programmeurs behoudend waren, maar dat valt wel mee geloof ik :P
Ik gebruik Verilog, en ook daar heb je vergeleken met moderne programmeertalen het idee bij dat je in de middeleeuwen leeft. Maar die kan iig wel een bitwise XOR uitvoeren zonder dat ik naar bijvoorbeeld SystemVerilog hoef over te stappen. (Wat wel weer nodig is om een array fatsoenlijk te kunnen initialiseren).

Acties:
  • 0 Henk 'm!

  • Anteros
  • Registratie: Januari 2009
  • Laatst online: 00:46
Algemene opmerking: Verilog is ook een leuke taal maar helaas wordt deze in Europa bijna niet gebruikt (wel in Amerika). Als je een HDL taal wilt leren en/of deze professioneel wilt (gaan) gebruiken, dan kan je je beter focussen op VHDL.

Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Dat heb ik ook altijd geleerd inderdaad. Maar ik werk tegenwoordig bij Nederlands grootste chip bakker, en hier is Verilog meer gebruikt dan VHDL. Ik geloof nog wel dat VHDL meer gebruikt wordt in Europa, maar iig in sommige bedrijven heeft Verilog wel zijn plaats. Welke je ook leert, het gaat ook hier natuurlijk voor flink gedeelte om concepten, en je kan vast wel de ander leren. (Maar ik kan niet zeggen dat ik het vervelend vind om dat gezeik met entities/architectures in VHDL niet te hebben met Verilog).

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Anteros schreef op vrijdag 8 december 2017 @ 13:28:
Algemene opmerking: Verilog is ook een leuke taal maar helaas wordt deze in Europa bijna niet gebruikt (wel in Amerika). Als je een HDL taal wilt leren en/of deze professioneel wilt (gaan) gebruiken, dan kan je je beter focussen op VHDL.
Nou, ik ben de laatste tijd een beetje aan het experimenteren met een Altera FPGA SoC, maar Verilog vind ik een pak logischer (en vooral minder breedsprakig*) programmeren dan VHDL. Bovendien kunnen de meeste IDE's volgens mij beide dus dan zou voor mij de keuze snel gemaakt zijn,

*Imho is VHDL nog erger dan VB wat dat betreft :X

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Anteros
  • Registratie: Januari 2009
  • Laatst online: 00:46
farlane schreef op vrijdag 8 december 2017 @ 19:48:
[...]

Nou, ik ben de laatste tijd een beetje aan het experimenteren met een Altera FPGA SoC, maar Verilog vind ik een pak logischer (en vooral minder breedsprakig*) programmeren dan VHDL. Bovendien kunnen de meeste IDE's volgens mij beide dus dan zou voor mij de keuze snel gemaakt zijn,

*Imho is VHDL nog erger dan VB wat dat betreft :X
Ik zeg ook niet dat VHDL beter is, maar het is de standaard binnen Europa (uitzonderingen daargelaten). Het is zonde om veel tijd te steken in Verilog als je (later) binnen Europa professioneel met FPGA's bezig wilt zijn. Nu is het uiteraard mogelijk om VHDL te leren naast Verilog, maar de vraag is of je dan interessant (genoeg) bent voor een werkgever.

IDE's/tools zoals Vivado en Quartus ondersteunen idd beiden, maar een werkgever zal toch een taal opleggen. En in Europa is dat dus meestal VHDL.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Anteros schreef op vrijdag 8 december 2017 @ 19:59:
[...]
Ik zeg ook niet dat VHDL beter is ...
Oh dat wilde ik ook niet suggereren, daarvoor heb ik niet genoeg ervaring met de materie :P Ik wilde enkel aangeven dat de breedsprakigheid van VHDL wat overdone lijkt.

Ik kwam nog wel dit tegen : http://insights.sigasi.co.../verilogs-major-flaw.html

Ik heb nog wat te leren want het is me nog niet duidelijk wat er nou moeilijk wordt gedaan over wel/niet blocking en dat soort geneuzel .. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Twieka
  • Registratie: Oktober 2010
  • Laatst online: 01-03 17:06
Ik werk voor een Amerikaanse processor bouwer en hier wordt nog gewoon VHDL gebruikt. Weliswaar met een aantal pre-processors en macro talen om e.e.a te vereenvoudigen. Het verschil tussen Verilog en VHDL is gewoon minimaal. Sowieso, omschakelen tussen deze twee talen heb je binnen een dag geleerd, als werkgever zou ik geen waarde hechten aan welke taal beheerst wordt. Chisel is een leuke toevoeging aan het rijtje.

Count ones/zeros voor een smal signaal (4 bits oid) zou je met een lookup table kunnen doen. Iets zoals onderaan deze link: https://stackoverflow.com...sign-of-a-vhdl-lut-module.

[ Voor 21% gewijzigd door Twieka op 08-12-2017 23:02 ]


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 27-09 13:03
Twieka schreef op vrijdag 8 december 2017 @ 22:43:
Count ones/zeros voor een smal signaal (4 bits oid) zou je met een lookup table kunnen doen. Iets zoals onderaan deze link: https://stackoverflow.com...sign-of-a-vhdl-lut-module.
De TS wilde een parity berekenen/controleren, meer dan een XOR heb je daar niet voor nodig.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1