SmallPrograms.Lola.txt 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. (* LSC.Compile @ LSV.List Test.Lola.v *)
  2. MODULE Counter (IN CLK50M, rstIn: BIT;
  3. IN swi: BYTE; OUT leds: BYTE);
  4. REG (CLK50M) rst: BIT;
  5. cnt0: [16] BIT; (*milliseconds*)
  6. cnt1: [10] BIT; (*half seconds*)
  7. cnt2: [8] BIT;
  8. VAR tick0, tick1: BIT;
  9. BEGIN leds := swi.7 -> swi : cnt2;
  10. tick0 := (cnt0 = 24999);
  11. tick1 := tick0 & (cnt1 = 499);
  12. rst := ~rstIn;
  13. cnt0 := ~rst -> 0 : tick0 -> 0 : cnt0 + 1;
  14. cnt1 := ~rst -> 0 : tick1 -> 0 : cnt1 + tick0;
  15. cnt2 := ~rst -> 0 : cnt2 + tick1
  16. END Counter.
  17. MODULE Shifter(IN CLK50M, rstIn: BIT;
  18. IN swi: BYTE; OUT leds: BYTE);
  19. REG (CLK50M) rst, up: BIT;
  20. cnt0: [16] BIT; (*milliseconds*)
  21. cnt1: [10] BIT; (*half seconds*)
  22. shreg: [8] BIT;
  23. VAR tick0, tick1: BIT;
  24. BEGIN leds := swi.7 -> swi : shreg;
  25. tick0 := (cnt0 = 24999);
  26. tick1 := tick0 & (cnt1 = 499);
  27. rst := ~rstIn;
  28. cnt0 := ~rst -> 0 : tick0 -> 0 : cnt0 + 1;
  29. cnt1 := ~rst -> 0 : tick1 -> 0 : cnt1 + tick0;
  30. shreg := ~rst -> 1'8 :
  31. ~tick1 -> shreg :
  32. up -> {shreg[6:0], 0'1} : {0'1, shreg[7:1]};
  33. up := shreg.0 -> 1 : shreg.7 -> 0 : up
  34. END Shifter.