|
我设计了一个LCD1602的程序,但是优化结果占用零个资源,我查看RTL的确生成了实际复杂的电路出来,包括输入输出端口都存在,就是不占用一个LE,下载到板子中也没反应,求高人指点,小弟不胜感激。
module lcd(clk,LCD_Rs,LCD_Rw,LCD_En,LCD_Data);
input clk;
output LCD_Rs,LCD_Rw,LCD_En;
output LCD_Data[7:0];
reg LCD_Rs,LCD_En;
reg[7:0]LCD_Data;
reg DIV_Clk;
reg[5:0]DIV_Cunt;
always@(posedge clk)
begin
DIV_Cunt =DIV_Cunt +1'b1;
if(DIV_Cunt==6'b111111)DIV_Clk =~DIV_Clk;
end
reg[7:0]setp;
reg[1:0]Ctrl;
always@(posedge DIV_Clk)
begin
case(setp)
8'd0:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h06;
2'd2: LCD_En =1'b1;
endcase
end
8'd1:
begin
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h0c;
2'd2: LCD_En =1'b1;
endcase
end
8'd2:
begin
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h14;
2'd2: LCD_En =1'b1;
endcase
end
8'd3:
begin
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h38;
2'd2: LCD_En =1'b1;
endcase
end
8'd4:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h80;
2'd2: LCD_En =1'b1;
endcase
end
8'd5:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="w" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd6:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h81;
2'd2: LCD_En =1'b1;
endcase
end
8'd7:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="w" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd8:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h82;
2'd2: LCD_En =1'b1;
endcase
end
8'd9:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="w" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd10:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h83;
2'd2: LCD_En =1'b1;
endcase
end
8'd11:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="." +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd12:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h84;
2'd2: LCD_En =1'b1;
endcase
end
8'd13:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="s" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd14:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h85;
2'd2: LCD_En =1'b1;
endcase
end
8'd15:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="h" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd16:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h86;
2'd2: LCD_En =1'b1;
endcase
end
8'd17:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="i" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd18:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h87;
2'd2: LCD_En =1'b1;
endcase
end
8'd19:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="w" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd20:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h88;
2'd2: LCD_En =1'b1;
endcase
end
8'd21:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="e" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd22:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h89;
2'd2: LCD_En =1'b1;
endcase
end
8'd23:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="i" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd24:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h8a;
2'd2: LCD_En =1'b1;
endcase
end
8'd25:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="." +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd26:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h8b;
2'd2: LCD_En =1'b1;
endcase
end
8'd27:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="c" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd28:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h8c;
2'd2: LCD_En =1'b1;
endcase
end
8'd29:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="o" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
8'd30:
begin
LCD_Rs =1'b1;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data =8'h8d;
2'd2: LCD_En =1'b1;
endcase
end
8'd31:
begin
LCD_Rs =1'b0;
case(Ctrl)
2'd0: LCD_En =1'b0;
2'd1: LCD_Data ="m" +8'h30;
2'd2: LCD_En =1'b1;
endcase
end
endcase
Ctrl =Ctrl +1'b1;
if(Ctrl==2'd3)
begin
setp =setp +1'b1;
Ctrl =2'd0;
if(setp >8'd32)setp =8'd32;
end
end
assign LCD_Rw =1'b0;
endmodule |
|