Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> VHDL

Sensitivitelijsten in VHDL-processen voor betrouwbare RTL-ontwerpen

In productieklare VHDL worden processen meestal gedreven door een sensitivitelijst in plaats van wait-statements. Een sensitivitelijst opsomt elk signaal dat het proces moet activeren wanneer het verandert.

Hoewel wait on en wait until handig zijn voor simulatie, worden ze zelden gebruikt in synthetiseerbare RTL. In synthetise wordt een wait-statement vaak genegeerd, wat leidt tot onvoorspelbare hardware. Een sensitivitelijst daarentegen wijst direct op een combinatorische of kloksynchrone blok die synthetise-tools betrouwbaar kunnen implementeren.

Basistutorial VHDL – Procesgevoeligheid

Bij het schrijven van code voor een simulator steun ik altijd op wait-statements om timing te controleren. Voor ontwerpen die naar silicium gesynthetiseerd worden, vermijd ik wait volledig en gebruik ik sensitivitelijsten.

De syntaxis voor een proces met een sensitivitelijst is:

process( signaal1, signaal2, ... ) is
begin
  -- hoofdfunctie hier
end process;

Let op dat elk signaal dat binnen het proces gelezen wordt, in de lijst moet staan. De VHDL-compiler waarschuwt niet voor een ontbrekend signaal, maar het weglaten ervan verandert het gedrag na synthetise.

VHDL‑2008 introduceerde het sleutelwoord all om automatisch elk gelezen signaal op te nemen, bijv. process(all). De meeste commerciële synthetise-tools ondersteunen deze functie echter nog niet.

Oefening

In de bijbehorende videotutorial bouwen we een proces dat een sensitivitelijst gebruikt.

De uiteindelijk geproduceerde VHDL-code in deze les:

entity T09_SensitivityListTb is end entity;
architecture sim of T09_SensitivityListTb is
  signal CountUp   : integer := 0;
  signal CountDown : integer := 10;
begin
  -- Proces met wait for
  process is
  begin
    CountUp   <= CountUp + 1;
    CountDown <= CountDown - 1;
    wait for 10 ns;
  end process;

  -- Proces getriggerd met Wait On
  process is
  begin
    if CountUp = CountDown then
      report "Proces A: Jackpot!";
    end if;
    wait on CountUp, CountDown;
  end process;

  -- Equivalent proces met sensitivitelijst
  process(CountUp, CountDown) is
  begin
    if CountUp = CountDown then
      report "Proces B: Jackpot!";
    end if;
  end process;
end architecture;

Het uitvoeren van deze testbench in ModelSim levert:

VSIM 2> run
# ** Note: Proces A: Jackpot!
# Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb
# ** Note: Proces B: Jackpot!
# Time: 40 ns Iteration: 1 Instance: /t09_sensitivitylisttb

Analyse

De console-output toont aan dat zowel het wait on-proces als het sensitivitelijst-proces onder identieke omstandigheden afvuren. Deze equivalentie geldt omdat een sensitivitelijst impliciet gedraagt als een wait on aan het einde van het proces.

In de praktijk zijn sensitivitelijsten de standaard voor synthetiseerbare RTL. Ze bieden duidelijke intentie, laten synthetise-tools correcte hardware genereren en vermijden de ambiguïteiten die wait-statements kunnen introduceren.

Sensitivitelijsten in VHDL-processen voor betrouwbare RTL-ontwerpen

Belangrijkste punten

  • Een sensitivitelijst-proces is functioneel identiek aan een proces dat eindigt met wait on.
  • Alle signalen die binnen het proces gelezen worden, moeten op de sensitivitelijst staan.
  • Gebruik wait-statements voor simulatie-only code; gebruik sensitivitelijsten voor synthetiseerbare RTL.

Ga verder naar de volgende tutorial hier.

VHDL

  1. Dynamische string-lijsten in VHDL: Best Practices & Voorbeeld
  2. Een Tcl-gedreven testbench maken voor een VHDL code-lock module
  3. Een PWM-controller implementeren in VHDL: Ontwerp, Simulatie en FPGA-demo
  4. Ontwerpen van een robuuste VHDL-ringbuffer FIFO in blok-RAM
  5. Een self-checking testbench in VHDL bouwen – Een praktische gids
  6. Een dynamische gelinkte lijst in VHDL implementeren met protected types en access pointers
  7. In-process procedures benutten voor schonere VHDL FSM-ontwerpen
  8. Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
  9. VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp
  10. Een eindige-toestandsmachine in VHDL ontwerpen: een praktisch verkeerslichtvoorbeeld
  11. Procedures in VHDL gebruiken: je ontwerp vereenvoudigen met herbruikbare code