OpenCores
URL https://opencores.org/ocsvn/lcd_block/lcd_block/trunk

Subversion Repositories lcd_block

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /lcd_block/trunk/hdl/iseProject
    from Rev 7 to Rev 8
    Reverse comparison

Rev 7 → Rev 8

/lcd_controller.v
3,7 → 3,8
module lcd_controller(
input rst,
input clk,
input [7:0] data_in,
input rs_in,
input [7:0] data_in,
input strobe_in,
input [7:0] period_clk_ns,
output lcd_e,
25,11 → 26,12
localparam lcd_init_wait_40us = 8;
localparam lcd_init_write_02 = 9;
localparam lcd_init_wait_50us = 10;
localparam lcd_init_strobe = 11;
localparam lcd_init_state_done = 11;
localparam lcd_init_strobe = 12;
reg [3:0] lcd_init_states, lcd_init_state_next; // Declare two variables of 4 bits to hold the FSM states
reg [19:0] counter_wait_lcd_init;
reg [7:0] counter_wait_strobe_lcd_init;
reg [19:0] time_wait_lcd_init;
reg [23:0] counter_wait_lcd_init;
reg [8:0] counter_wait_strobe_lcd_init, counter_wait_stabilize_lcd_init;
reg [23:0] time_wait_lcd_init;
reg [3:0] lcd_init_data_out; // FSM output LCD_DATA
reg lcd_init_e_out; // FSM output LCD_E
reg lcd_init_done;
36,13 → 38,19
// States for FSM that send data to LCD
localparam lcd_data_rst = 1;
localparam lcd_data_wait = 2;
localparam lcd_data_wait_1us = 2;
localparam lcd_data_wr_nibble_high = 3;
localparam lcd_data_wr_nibble_low = 4;
localparam lcd_data_strobe = 5;
localparam lcd_data_wait_40us = 6;
localparam lcd_data_done = 7;
reg [19:0] time_wait_lcd_data;
reg [19:0] counter_wait_lcd_data;
reg [8:0] counter_wait_strobe_lcd_data, counter_wait_stabilize_lcd_data;
reg [3:0] lcd_data_states, lcd_data_state_next; // Declare two variables of 4 bits to hold the FSM states
reg [3:0] lcd_data_data_out; // FSM output LCD_DATA
reg lcd_data_e_out; // FSM output LCD_E
reg done;
/*
55,8 → 63,10
lcd_init_states <= lcd_init_rst;
counter_wait_lcd_init <= 0;
counter_wait_strobe_lcd_init <= 0;
counter_wait_stabilize_lcd_init <= 0;
lcd_init_e_out <= 0;
lcd_init_done <= 0;
lcd_init_data_out <= 0;
end
else
begin
73,20 → 83,32
lcd_init_wait:
begin
counter_wait_lcd_init <= counter_wait_lcd_init + period_clk_ns;
if (counter_wait_lcd_init > time_wait_lcd_init)
lcd_init_states <= lcd_init_state_next;
if (counter_wait_lcd_init >= time_wait_lcd_init)
begin
lcd_init_states <= lcd_init_state_next;
counter_wait_lcd_init <= 0;
end
end
// Strobe the LCD for at least 240 ns
lcd_init_strobe:
begin
lcd_init_e_out = 1;
counter_wait_strobe_lcd_init <= counter_wait_strobe_lcd_init + period_clk_ns;
if (counter_wait_strobe_lcd_init > 240)
// We need to wait at least 40ns to stabilize the data before strobing the data...
counter_wait_stabilize_lcd_init <= counter_wait_stabilize_lcd_init + period_clk_ns;
if (counter_wait_stabilize_lcd_init >= 40)
begin
lcd_init_states <= lcd_init_state_next;
lcd_init_e_out <= 0;
end
lcd_init_e_out <= 1;
// After we got a strobe high hold for more 240 ns
counter_wait_strobe_lcd_init <= counter_wait_strobe_lcd_init + period_clk_ns;
if (counter_wait_strobe_lcd_init >= 240)
begin
lcd_init_states <= lcd_init_state_next;
counter_wait_stabilize_lcd_init <= 0;
counter_wait_strobe_lcd_init <= 0;
lcd_init_e_out <= 0;
end
end
end
lcd_init_write_03_01:
129,13 → 151,13
lcd_init_wait_40us:
begin
time_wait_lcd_init <= 100000; // Wait for 100us
time_wait_lcd_init <= 40000; // Wait for 40us
lcd_init_states <= lcd_init_wait;
lcd_init_state_next <= lcd_init_write_02;
end
lcd_init_write_02:
// Send 0x3 and pulse LCD_E for 240ns
// Send 0x2 and pulse LCD_E for 240ns
begin
lcd_init_data_out <= 4'h2;
lcd_init_states <= lcd_init_strobe; // Strobe for at least 230 ns
144,18 → 166,26
lcd_init_wait_50us:
begin
time_wait_lcd_init <= 100000; // Wait for 100us
time_wait_lcd_init <= 50000; // Wait for 50us
lcd_init_states <= lcd_init_wait;
lcd_init_state_next <= lcd_init_wait_50us;
lcd_init_state_next <= lcd_init_state_done;
end
lcd_init_state_done:
begin
lcd_init_done <= 1;
lcd_init_state_next <= lcd_init_state_done;
end
endcase;
end;
end;
assign lcd_e = lcd_init_e_out;
assign lcd_nibble = lcd_init_data_out;
assign lcd_rw = 0;
// Will assign the output of the FSM init or the FSM data depending if initialization is already done
assign lcd_e = (!lcd_init_done) ? lcd_init_e_out : lcd_data_e_out;
assign lcd_nibble = (!lcd_init_done) ? lcd_init_data_out : lcd_data_data_out ;
/*
FSM that deals to send data to the LCD (nibble High + nibble Low)
*/
163,8 → 193,96
begin
if (~lcd_init_done)
begin
lcd_data_e_out <= 0;
lcd_data_data_out <= 0;
lcd_data_states <= lcd_data_rst;
done <= 0;
counter_wait_stabilize_lcd_data <= 0;
counter_wait_lcd_data <= 0;
counter_wait_strobe_lcd_data <= 0;
end
else
begin
case (lcd_data_states)
lcd_data_rst:
begin
done <= 0;
// Start to send data when strobe_in =1
if (strobe_in == 1)
begin
lcd_data_states <= lcd_data_wr_nibble_high;
end
else
lcd_data_states <= lcd_data_rst;
end
lcd_data_wr_nibble_high:
begin
// First send the high nibble
lcd_data_data_out <= data_in[7:4];
lcd_data_states <= lcd_data_strobe;
lcd_data_state_next <= lcd_data_wait_1us;
end
lcd_data_strobe:
begin
// We need to wait at least 40ns to stabilize the data before strobing the data...
counter_wait_stabilize_lcd_data <= counter_wait_stabilize_lcd_data + period_clk_ns;
if (counter_wait_stabilize_lcd_data >= 40)
begin
lcd_data_e_out <= 1;
// After we got a strobe high hold for more 240 ns
counter_wait_strobe_lcd_data <= counter_wait_strobe_lcd_data + period_clk_ns;
if (counter_wait_strobe_lcd_data >= 240)
begin
lcd_data_states <= lcd_data_state_next;
counter_wait_stabilize_lcd_data <= 0;
counter_wait_strobe_lcd_data <= 0;
lcd_data_e_out <= 0;
end
end
end
// Wait for 1us before sending the low nibble
lcd_data_wait_1us:
begin
counter_wait_lcd_data <= counter_wait_lcd_data + period_clk_ns;
if (counter_wait_lcd_data >= 1000)
begin
lcd_data_states <= lcd_data_wr_nibble_low;
counter_wait_lcd_data <= 0;
end
end
lcd_data_wr_nibble_low:
begin
// After send the low nibble
lcd_data_data_out <= data_in[3:0];
lcd_data_states <= lcd_data_strobe;
lcd_data_state_next <= lcd_data_wait_40us;
end
// Wait for 40us before sending the next byte
lcd_data_wait_40us:
begin
counter_wait_lcd_data <= counter_wait_lcd_data + period_clk_ns;
if (counter_wait_lcd_data >= 40000)
begin
lcd_data_states <= lcd_data_done;
counter_wait_lcd_data <= 0;
end
end
lcd_data_done:
begin
// Signal that we done sending the data
done <= 1;
lcd_data_states <= lcd_data_rst;
end
endcase
end
end;
 
endmodule
/testLcd_controller.v
5,6 → 5,7
// Inputs
reg rst;
reg clk;
reg rs_in;
reg [7:0] data_in;
reg strobe_in;
reg [7:0] period_clk_ns;
21,6 → 22,7
lcd_controller uut (
.rst(rst),
.clk(clk),
.rs_in(rs_in),
.data_in(data_in),
.strobe_in(strobe_in),
.period_clk_ns(period_clk_ns),
52,8 → 54,12
#20;
rst = 0;
// Add stimulus here
 
// One advantege over of Verilog over VHDL (Access to internal signals...)
// Like wait until... from Verilog
@(posedge uut.lcd_init_done);
data_in = 65;
#20 strobe_in = 1; #20 strobe_in = 0;
@(posedge done);
end
endmodule
/iseProject.gise
26,6 → 26,7
<file xil_pn:fileType="FILE_LOG" xil_pn:name="fuse.log"/>
<file xil_pn:fileType="FILE_DIRECTORY" xil_pn:name="isim"/>
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_CMD" xil_pn:name="isim.cmd"/>
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_LOG" xil_pn:name="isim.log"/>
<file xil_pn:fileType="FILE_CMD_LOG" xil_pn:name="lcd_controller.cmd_log"/>
<file xil_pn:branch="Implementation" xil_pn:fileType="FILE_LSO" xil_pn:name="lcd_controller.lso"/>
<file xil_pn:branch="Implementation" xil_pn:fileType="FILE_NGC" xil_pn:name="lcd_controller.ngc"/>
35,6 → 36,7
<file xil_pn:branch="Implementation" xil_pn:fileType="FILE_XST_REPORT" xil_pn:name="lcd_controller.syr"/>
<file xil_pn:branch="Implementation" xil_pn:fileType="FILE_XST" xil_pn:name="lcd_controller.xst"/>
<file xil_pn:fileType="FILE_HTML" xil_pn:name="lcd_controller_envsettings.html"/>
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="lcd_controller_isim_beh.exe"/>
<file xil_pn:fileType="FILE_HTML" xil_pn:name="lcd_controller_summary.html"/>
<file xil_pn:fileType="FILE_XRPT" xil_pn:name="lcd_controller_xst.xrpt"/>
<file xil_pn:fileType="FILE_XST_PROJECT" xil_pn:name="testLcd_controller_beh.prj"/>
50,18 → 52,22
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
</transform>
<transform xil_pn:end_ts="1337576939" xil_pn:in_ck="-5497409596377948253" xil_pn:name="TRAN_copyAbstractToPostAbstractSimulation" xil_pn:start_ts="1337576939">
<transform xil_pn:end_ts="1337622824" xil_pn:in_ck="-5497409596377948253" xil_pn:name="TRAN_copyAbstractToPostAbstractSimulation" xil_pn:start_ts="1337622824">
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
<status xil_pn:value="OutOfDateForInputs"/>
<status xil_pn:value="OutOfDateForOutputs"/>
<status xil_pn:value="InputChanged"/>
<status xil_pn:value="OutputChanged"/>
<outfile xil_pn:name="lcd_controller.v"/>
<outfile xil_pn:name="lcd_wishbone_slave.v"/>
<outfile xil_pn:name="testLcd_controller.v"/>
</transform>
<transform xil_pn:end_ts="1337522725" xil_pn:name="TRAN_xawsToSimhdl" xil_pn:prop_ck="2836371237087295533" xil_pn:start_ts="1337522725">
<transform xil_pn:end_ts="1337620875" xil_pn:name="TRAN_xawsToSimhdl" xil_pn:prop_ck="2836371237087295533" xil_pn:start_ts="1337620875">
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
</transform>
<transform xil_pn:end_ts="1337522725" xil_pn:name="TRAN_schematicsToHdlSim" xil_pn:prop_ck="-2387588251019774503" xil_pn:start_ts="1337522725">
<transform xil_pn:end_ts="1337620875" xil_pn:name="TRAN_schematicsToHdlSim" xil_pn:prop_ck="-2387588251019774503" xil_pn:start_ts="1337620875">
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
</transform>
69,28 → 75,41
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
</transform>
<transform xil_pn:end_ts="1337576939" xil_pn:in_ck="-5497409596377948253" xil_pn:name="TRAN_copyPostAbstractToPreSimulation" xil_pn:start_ts="1337576939">
<transform xil_pn:end_ts="1337622824" xil_pn:in_ck="-5497409596377948253" xil_pn:name="TRAN_copyPostAbstractToPreSimulation" xil_pn:start_ts="1337622824">
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
<status xil_pn:value="OutOfDateForInputs"/>
<status xil_pn:value="OutOfDateForPredecessor"/>
<status xil_pn:value="OutOfDateForOutputs"/>
<status xil_pn:value="InputChanged"/>
<status xil_pn:value="OutputChanged"/>
<outfile xil_pn:name="lcd_controller.v"/>
<outfile xil_pn:name="lcd_wishbone_slave.v"/>
<outfile xil_pn:name="testLcd_controller.v"/>
</transform>
<transform xil_pn:end_ts="1337576940" xil_pn:in_ck="-5497409596377948253" xil_pn:name="TRAN_ISimulateBehavioralModelRunFuse" xil_pn:prop_ck="-1659802317889134806" xil_pn:start_ts="1337576939">
<transform xil_pn:end_ts="1337622825" xil_pn:in_ck="-5497409596377948253" xil_pn:name="TRAN_ISimulateBehavioralModelRunFuse" xil_pn:prop_ck="-1659802317889134806" xil_pn:start_ts="1337622824">
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
<status xil_pn:value="OutOfDateForInputs"/>
<status xil_pn:value="OutOfDateForPredecessor"/>
<status xil_pn:value="OutOfDateForOutputs"/>
<status xil_pn:value="InputChanged"/>
<status xil_pn:value="OutputChanged"/>
<outfile xil_pn:name="fuse.log"/>
<outfile xil_pn:name="isim"/>
<outfile xil_pn:name="isim.log"/>
<outfile xil_pn:name="testLcd_controller_beh.prj"/>
<outfile xil_pn:name="testLcd_controller_isim_beh.exe"/>
<outfile xil_pn:name="xilinxsim.ini"/>
</transform>
<transform xil_pn:end_ts="1337576941" xil_pn:in_ck="2483329315479921445" xil_pn:name="TRAN_ISimulateBehavioralModel" xil_pn:prop_ck="2007445876491768972" xil_pn:start_ts="1337576940">
<transform xil_pn:end_ts="1337622826" xil_pn:in_ck="8162874102102850794" xil_pn:name="TRAN_ISimulateBehavioralModel" xil_pn:prop_ck="2007445876491768972" xil_pn:start_ts="1337622825">
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
<status xil_pn:value="OutOfDateForPredecessor"/>
<status xil_pn:value="OutOfDateForOutputs"/>
<status xil_pn:value="OutputChanged"/>
<outfile xil_pn:name="isim.cmd"/>
<outfile xil_pn:name="isim.log"/>
<outfile xil_pn:name="testLcd_controller_isim_beh.wdb"/>
</transform>
<transform xil_pn:end_ts="1337471657" xil_pn:name="TRAN_copyInitialToXSTAbstractSynthesis" xil_pn:start_ts="1337471656">
121,12 → 140,10
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="ReadyToRun"/>
</transform>
<transform xil_pn:end_ts="1337475492" xil_pn:in_ck="-3373480295076389399" xil_pn:name="TRANEXT_xstsynthesize_virtex6" xil_pn:prop_ck="5624389301805847959" xil_pn:start_ts="1337475474">
<transform xil_pn:end_ts="1337646427" xil_pn:in_ck="-3373480295076389399" xil_pn:name="TRANEXT_xstsynthesize_virtex6" xil_pn:prop_ck="5624389301805847959" xil_pn:start_ts="1337646409">
<status xil_pn:value="SuccessfullyRun"/>
<status xil_pn:value="WarningsGenerated"/>
<status xil_pn:value="ReadyToRun"/>
<status xil_pn:value="OutOfDateForInputs"/>
<status xil_pn:value="InputChanged"/>
<outfile xil_pn:name="_xmsgs/xst.xmsgs"/>
<outfile xil_pn:name="lcd_controller.lso"/>
<outfile xil_pn:name="lcd_controller.ngc"/>

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.