Guest User

Untitled

a guest
Oct 20th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. module lcd_512(lcd_512_1_or_0,direction,clk,reset);
  2. output [511:0]lcd_512_1_or_0;
  3. input [1:0] direction;
  4. input clk,reset;
  5.  
  6. reg [8:0] head;
  7. reg [8:0] next_head;
  8. reg [4:0] counter;
  9. reg [4:0] next_counter;
  10. reg [3:0] lcd_512[0:511];
  11. reg [3:0] next_lcd_512[0:511];
  12. reg [511:0]lcd_512_1_or_0;
  13. reg [511:0]next_lcd_512_1_or_0;
  14.  
  15. integer i;
  16.  
  17. always@(posedge clk or negedge reset)
  18. begin
  19. if(!reset)
  20. begin
  21. head<=9'd3;
  22. counter<=5'd3;
  23. lcd_512[0]<=4'b0001;
  24. lcd_512[1]<=4'b0010;
  25. lcd_512[2]<=4'b0011;
  26.  
  27. for(i=3;i<512;i=i+1)
  28. begin
  29. lcd_512[i]<=4'b0000;
  30. end
  31.  
  32. lcd_512_1_or_0<=512'd0;
  33.  
  34. end
  35. else
  36. begin
  37. head<=next_head;
  38. counter<=next_counter;
  39. for(i=0;i<512;i=i+1)
  40. begin
  41. lcd_512[i]<=next_lcd_512[i];
  42. lcd_512_1_or_0[i]<=next_lcd_512_1_or_0[i];
  43. $display("lcd_512[%d]=%d ",i,lcd_512[i]);
  44. end
  45. $display("head=%b lcd_512_1_or_0=%b ",head,lcd_512_1_or_0);
  46. for(i=0;i<512;i=i+1)
  47. begin
  48. //lcd_512_1_or_0[i]<=1'b1;
  49. $display("lcd_512_1_or_0[%d]=%d ",i,lcd_512_1_or_0[i]);
  50.  
  51. end
  52. end
  53. end
  54.  
  55. always@(*)// head
  56. begin
  57. if(direction==2'b00)// direction is right
  58. begin
  59. if(head==9'd31||head==9'd63||head==9'd95||head==9'd127||head==9'd159||head==9'd191||head==9'd223||head==9'd255||head==9'd287||head==9'd319||head==9'd351||head==9'd383||head==9'd415||head==9'd447||head==9'd479||head==9'd511)
  60. begin// head to right boundary
  61. next_head=head-31;// to left
  62. end
  63. else// go to right
  64. begin
  65. next_head=head+1;
  66. end
  67. end
  68. else if(direction==2'b01)// direction is low
  69. begin
  70. if(head>=480&&head<=511)// head to bottom
  71. begin
  72. next_head=head-480;// to top
  73. end
  74. else
  75. begin
  76. next_head=head+32;// go to bottom
  77. end
  78. end
  79. else if(direction==2'b10)// direction is left
  80. begin
  81. if(head==9'd0||head==9'd32||head==9'd64||head==9'd96||head==9'd128||head==9'd160||head==9'd192||head==9'd224||head==9'd256||head==9'd288||head==9'd320||head==9'd352||head==9'd384||head==9'd416||head==9'd448||head==9'd480)
  82. begin// head to left boundary
  83. next_head=head+31;//to right
  84. end
  85. else
  86. begin
  87. next_head=head-1;// go to left
  88. end
  89. end
  90. else if(direction==2'b11)// direction is up
  91. begin
  92. if(head>=0&&head<=31)// if head to top
  93. begin
  94. next_head=head+480;// to bottom
  95. end
  96. else// don`t to top
  97. begin
  98. next_head=head-32;// go to top
  99. end
  100. end
  101. else
  102. begin
  103. next_head=head;
  104. end
  105. end
  106.  
  107. always@(*)// counter
  108. begin
  109. next_counter=counter;
  110. end
  111.  
  112. always@(*)// lcd_512
  113. begin
  114. next_lcd_512[head]=counter;
  115. for(i=0;i<512;i=i+1)
  116. begin
  117. if(i!=head)
  118. begin
  119. if(lcd_512[i]!=4'b0000)
  120. begin
  121. next_lcd_512[i]=lcd_512[i]-4'b0001;
  122. end
  123. else
  124. begin
  125. next_lcd_512[i]=4'b0000;
  126. end
  127. end
  128. //$display("next_lcd_512[%d]=%d",i,next_lcd_512[i]);
  129. end
  130. end
  131.  
  132. always@(*)// lcd_512_1_or_0
  133. begin
  134. for(i=0;i<512;i=i+1)
  135. begin
  136. if(lcd_512[i]!=4'b0000)
  137. begin
  138. //$display("%d ",i);
  139. next_lcd_512_1_or_0[i]=1'b1;
  140.  
  141. end
  142. else if(lcd_512[i]==4'b0000)
  143. begin
  144. next_lcd_512_1_or_0[i]=1'b0;
  145. end
  146. else
  147. begin
  148. next_lcd_512_1_or_0[i]=lcd_512_1_or_0[i] ;
  149. end
  150. $display("lcd_512_1_or_0[%d]=%d ",i,next_lcd_512_1_or_0[i]);
  151. end
  152. end
  153.  
  154. endmodule
Add Comment
Please, Sign In to add comment