Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module lcd_512(lcd_512_1_or_0,direction,clk,reset);
- output [511:0]lcd_512_1_or_0;
- input [1:0] direction;
- input clk,reset;
- reg [8:0] head;
- reg [8:0] next_head;
- reg [4:0] counter;
- reg [4:0] next_counter;
- reg [3:0] lcd_512[0:511];
- reg [3:0] next_lcd_512[0:511];
- reg [511:0]lcd_512_1_or_0;
- reg [511:0]next_lcd_512_1_or_0;
- integer i;
- always@(posedge clk or negedge reset)
- begin
- if(!reset)
- begin
- head<=9'd3;
- counter<=5'd3;
- lcd_512[0]<=4'b0001;
- lcd_512[1]<=4'b0010;
- lcd_512[2]<=4'b0011;
- for(i=3;i<512;i=i+1)
- begin
- lcd_512[i]<=4'b0000;
- end
- lcd_512_1_or_0<=512'd0;
- end
- else
- begin
- head<=next_head;
- counter<=next_counter;
- for(i=0;i<512;i=i+1)
- begin
- lcd_512[i]<=next_lcd_512[i];
- lcd_512_1_or_0[i]<=next_lcd_512_1_or_0[i];
- $display("lcd_512[%d]=%d ",i,lcd_512[i]);
- end
- $display("head=%b lcd_512_1_or_0=%b ",head,lcd_512_1_or_0);
- for(i=0;i<512;i=i+1)
- begin
- //lcd_512_1_or_0[i]<=1'b1;
- $display("lcd_512_1_or_0[%d]=%d ",i,lcd_512_1_or_0[i]);
- end
- end
- end
- always@(*)// head
- begin
- if(direction==2'b00)// direction is right
- begin
- 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)
- begin// head to right boundary
- next_head=head-31;// to left
- end
- else// go to right
- begin
- next_head=head+1;
- end
- end
- else if(direction==2'b01)// direction is low
- begin
- if(head>=480&&head<=511)// head to bottom
- begin
- next_head=head-480;// to top
- end
- else
- begin
- next_head=head+32;// go to bottom
- end
- end
- else if(direction==2'b10)// direction is left
- begin
- 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)
- begin// head to left boundary
- next_head=head+31;//to right
- end
- else
- begin
- next_head=head-1;// go to left
- end
- end
- else if(direction==2'b11)// direction is up
- begin
- if(head>=0&&head<=31)// if head to top
- begin
- next_head=head+480;// to bottom
- end
- else// don`t to top
- begin
- next_head=head-32;// go to top
- end
- end
- else
- begin
- next_head=head;
- end
- end
- always@(*)// counter
- begin
- next_counter=counter;
- end
- always@(*)// lcd_512
- begin
- next_lcd_512[head]=counter;
- for(i=0;i<512;i=i+1)
- begin
- if(i!=head)
- begin
- if(lcd_512[i]!=4'b0000)
- begin
- next_lcd_512[i]=lcd_512[i]-4'b0001;
- end
- else
- begin
- next_lcd_512[i]=4'b0000;
- end
- end
- //$display("next_lcd_512[%d]=%d",i,next_lcd_512[i]);
- end
- end
- always@(*)// lcd_512_1_or_0
- begin
- for(i=0;i<512;i=i+1)
- begin
- if(lcd_512[i]!=4'b0000)
- begin
- //$display("%d ",i);
- next_lcd_512_1_or_0[i]=1'b1;
- end
- else if(lcd_512[i]==4'b0000)
- begin
- next_lcd_512_1_or_0[i]=1'b0;
- end
- else
- begin
- next_lcd_512_1_or_0[i]=lcd_512_1_or_0[i] ;
- end
- $display("lcd_512_1_or_0[%d]=%d ",i,next_lcd_512_1_or_0[i]);
- end
- end
- endmodule
Add Comment
Please, Sign In to add comment