Advertisement
your_passenger

Untitled

May 25th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. include "lpm_shiftreg.inc";
  2. include "lpm_counter.inc";
  3.  
  4. SUBDESIGN uart
  5. (
  6. clock, in : input;
  7. out[7..0] : output;
  8. )
  9.  
  10. VARIABLE
  11. shifter: lpm_shiftreg with (
  12. lpm_width=8,
  13. lpm_direction="left"
  14. );
  15.  
  16. divider[3..1]: dff;
  17.  
  18. outer: lpm_shiftreg with
  19. (lpm_width=8, lpm_direction="left");
  20.  
  21. counter: lpm_counter with (
  22. lpm_width=4,
  23. lpm_direction="up"
  24. );
  25.  
  26. state: MACHINE with
  27. STATES (wait, start, read, finish);
  28.  
  29. BEGIN
  30.  
  31. TABLE
  32. shifter.q[6..2] => outer.shiftin;
  33. b"00000" => GND;
  34. b"00001" => GND;
  35. b"00010" => GND;
  36. b"00011" => GND;
  37. b"00100" => GND;
  38. b"00101" => GND;
  39. b"00110" => GND;
  40. b"00111" => VCC;
  41. b"01000" => GND;
  42. b"01001" => GND;
  43. b"01010" => GND;
  44. b"01011" => VCC;
  45. b"01100" => GND;
  46. b"01101" => VCC;
  47. b"01110" => VCC;
  48. b"01111" => VCC;
  49. b"10000" => GND;
  50. b"10001" => GND;
  51. b"10010" => GND;
  52. b"10011" => VCC;
  53. b"10100" => GND;
  54. b"10101" => VCC;
  55. b"10110" => VCC;
  56. b"10111" => VCC;
  57. b"11000" => GND;
  58. b"11001" => VCC;
  59. b"11010" => VCC;
  60. b"11011" => VCC;
  61. b"11100" => VCC;
  62. b"11101" => VCC;
  63. b"11110" => VCC;
  64. b"11111" => VCC;
  65. END TABLE;
  66.  
  67. divider[].d = !divider[].q;
  68. divider[1].clk = clock;
  69. divider[3..2].clk = divider[2..1].q;
  70.  
  71. shifter.clock = !clock;
  72. shifter.shiftin = in;
  73.  
  74. counter.clock = divider[3].q;
  75. state.clk = divider[3].q;
  76.  
  77. CASE state IS
  78. WHEN wait =>
  79. IF (in == VCC) THEN
  80. state = start;
  81. END IF;
  82.  
  83. counter.cnt_en = GND;
  84. counter.sclr = GND;
  85. shifter.sclr = VCC;
  86.  
  87. WHEN start =>
  88. counter.cnt_en = VCC;
  89. counter.sclr = GND;
  90. state = read;
  91. shifter.sclr = VCC;
  92.  
  93. WHEN read =>
  94. counter.cnt_en = VCC;
  95.  
  96. IF (counter.q[] == 8) THEN
  97. counter.sclr = VCC;
  98. state = finish;
  99. END IF;
  100.  
  101. shifter.sclr = GND;
  102.  
  103. WHEN finish =>
  104. counter.cnt_en = VCC;
  105.  
  106. IF (counter.q[] == 2) THEN
  107. counter.sclr = VCC;
  108. state = wait;
  109. END IF;
  110.  
  111. shifter.sclr = VCC;
  112. END CASE;
  113.  
  114. outer.clock = divider[3].q;
  115. out[7..0]=outer.q[7..0];
  116.  
  117. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement