Advertisement
Guest User

Untitled

a guest
Jul 5th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VeriLog 12.46 KB | None | 0 0
  1. `timescale 1ns / 1ps
  2.  
  3. // LCD Initializer
  4. // ----------------------------------------------------------------------------
  5. // For:     Hitachi HD44780 Controller (And Compatible)
  6. //          8-Bit Mode
  7. //
  8. // Author:  Geoff Sevart
  9.  
  10. module LCD_Hitachi_HD44780_8Bit_Initializer(
  11.          input CLK,
  12.          output [7:0] LCD_D,
  13.          output LCD_RS,
  14.          output LCD_RW,
  15.          output LCD_E,
  16.          output Ready
  17.     );
  18.  
  19.     reg [31:0] counter_cycles;
  20.     reg [7:0] caseindex;
  21.  
  22.     reg [7:0] ib_DB;
  23.     reg ib_RS;
  24.     reg ib_E;
  25.    
  26.     reg ib_Ready;
  27.  
  28.     initial begin
  29.         ib_DB = 0;
  30.         ib_RS = 0;
  31.         ib_E = 0;
  32.        
  33.         ib_Ready = 0;
  34.     end
  35.  
  36.     always @(posedge CLK) begin
  37.         case(caseindex)
  38.             0: begin
  39.                 //Delay
  40.  
  41.                 if (counter_cycles == 25000000) begin
  42.                     counter_cycles <= 0;
  43.                     caseindex <= 1;
  44.                 end else begin
  45.                     counter_cycles <= counter_cycles + 1;
  46.                 end
  47.             end
  48.  
  49.             //*** *** *** FUNCTION SET *** *** ***
  50.  
  51.             1: begin
  52.                 //Set Data, RS, and E - Then Wait for Data Setup
  53.  
  54.                 ib_DB <= 8'b00111000;
  55.                 ib_RS <= 0;
  56.                 ib_E <= 0;
  57.                 caseindex <= 2;
  58.             end
  59.  
  60.             2: begin
  61.                 //Delay
  62.  
  63.                 if (counter_cycles == 10) begin
  64.                     counter_cycles <= 0;
  65.                     caseindex <= 3;
  66.                 end else begin
  67.                     counter_cycles <= counter_cycles + 1;
  68.                 end
  69.             end
  70.  
  71.             3: begin
  72.                 //Raise E - Then Wait for Recognition
  73.  
  74.                 ib_E <= 1;
  75.                 caseindex <= 4;
  76.             end
  77.  
  78.             4: begin
  79.                 //Delay
  80.  
  81.                 if (counter_cycles == 25) begin
  82.                     counter_cycles <= 0;
  83.                     caseindex <= 5;
  84.                 end else begin
  85.                     counter_cycles <= counter_cycles + 1;
  86.                 end
  87.             end
  88.  
  89.             5: begin
  90.                 //Drop E - Then Wait for Command to Complete
  91.  
  92.                 ib_E <= 0;
  93.                 caseindex <= 6;
  94.             end
  95.  
  96.             6: begin
  97.                 //Delay
  98.  
  99.                 if (counter_cycles == 2500) begin
  100.                     counter_cycles <= 0;
  101.                     caseindex <= 7;
  102.                 end else begin
  103.                     counter_cycles <= counter_cycles + 1;
  104.                 end
  105.             end
  106.  
  107.             7: begin
  108.                 //Delay
  109.  
  110.                 if (counter_cycles == 300000) begin
  111.                     counter_cycles <= 0;
  112.                     caseindex <= 8;
  113.                 end else begin
  114.                     counter_cycles <= counter_cycles + 1;
  115.                 end
  116.             end
  117.  
  118.             //*** *** *** FUNCTION SET *** *** ***
  119.  
  120.             8: begin
  121.                 //Set Data, RS, and E - Then Wait for Data Setup
  122.  
  123.                 ib_DB <= 8'b00111000;
  124.                 ib_RS <= 0;
  125.                 ib_E <= 0;
  126.                 caseindex <= 9;
  127.             end
  128.  
  129.             9: begin
  130.                 //Delay
  131.  
  132.                 if (counter_cycles == 10) begin
  133.                     counter_cycles <= 0;
  134.                     caseindex <= 10;
  135.                 end else begin
  136.                     counter_cycles <= counter_cycles + 1;
  137.                 end
  138.             end
  139.  
  140.             10: begin
  141.                 //Raise E - Then Wait for Recognition
  142.  
  143.                 ib_E <= 1;
  144.                 caseindex <= 11;
  145.             end
  146.  
  147.             11: begin
  148.                 //Delay
  149.  
  150.                 if (counter_cycles == 25) begin
  151.                     counter_cycles <= 0;
  152.                     caseindex <= 12;
  153.                 end else begin
  154.                     counter_cycles <= counter_cycles + 1;
  155.                 end
  156.             end
  157.  
  158.             12: begin
  159.                 //Drop E - Then Wait for Command to Complete
  160.  
  161.                 ib_E <= 0;
  162.                 caseindex <= 13;
  163.             end
  164.  
  165.             13: begin
  166.                 //Delay
  167.  
  168.                 if (counter_cycles == 2500) begin
  169.                     counter_cycles <= 0;
  170.                     caseindex <= 14;
  171.                 end else begin
  172.                     counter_cycles <= counter_cycles + 1;
  173.                 end
  174.             end
  175.  
  176.             14: begin
  177.                 //Delay
  178.  
  179.                 if (counter_cycles == 7500) begin
  180.                     counter_cycles <= 0;
  181.                     caseindex <= 15;
  182.                 end else begin
  183.                     counter_cycles <= counter_cycles + 1;
  184.                 end
  185.             end
  186.  
  187.             //*** *** *** FUNCTION SET *** *** ***
  188.  
  189.             15: begin
  190.                 //Set Data, RS, and E - Then Wait for Data Setup
  191.  
  192.                 ib_DB <= 8'b00111000;
  193.                 ib_RS <= 0;
  194.                 ib_E <= 0;
  195.                 caseindex <= 16;
  196.             end
  197.  
  198.             16: begin
  199.                 //Delay
  200.  
  201.                 if (counter_cycles == 10) begin
  202.                     counter_cycles <= 0;
  203.                     caseindex <= 17;
  204.                 end else begin
  205.                     counter_cycles <= counter_cycles + 1;
  206.                 end
  207.             end
  208.  
  209.             17: begin
  210.                 //Raise E - Then Wait for Recognition
  211.  
  212.                 ib_E <= 1;
  213.                 caseindex <= 18;
  214.             end
  215.  
  216.             18: begin
  217.                 //Delay
  218.  
  219.                 if (counter_cycles == 25) begin
  220.                     counter_cycles <= 0;
  221.                     caseindex <= 19;
  222.                 end else begin
  223.                     counter_cycles <= counter_cycles + 1;
  224.                 end
  225.             end
  226.  
  227.             19: begin
  228.                 //Drop E - Then Wait for Command to Complete
  229.  
  230.                 ib_E <= 0;
  231.                 caseindex <= 20;
  232.             end
  233.  
  234.             20: begin
  235.                 //Delay
  236.  
  237.                 if (counter_cycles == 2500) begin
  238.                     counter_cycles <= 0;
  239.                     caseindex <= 21;
  240.                 end else begin
  241.                     counter_cycles <= counter_cycles + 1;
  242.                 end
  243.             end
  244.  
  245.             //*** *** *** FUNCTION SET *** *** ***
  246.  
  247.             21: begin
  248.                 //Set Data, RS, and E - Then Wait for Data Setup
  249.  
  250.                 ib_DB <= 8'b00111000;
  251.                 ib_RS <= 0;
  252.                 ib_E <= 0;
  253.                 caseindex <= 22;
  254.             end
  255.  
  256.             22: begin
  257.                 //Delay
  258.  
  259.                 if (counter_cycles == 10) begin
  260.                     counter_cycles <= 0;
  261.                     caseindex <= 23;
  262.                 end else begin
  263.                     counter_cycles <= counter_cycles + 1;
  264.                 end
  265.             end
  266.  
  267.             23: begin
  268.                 //Raise E - Then Wait for Recognition
  269.  
  270.                 ib_E <= 1;
  271.                 caseindex <= 24;
  272.             end
  273.  
  274.             24: begin
  275.                 //Delay
  276.  
  277.                 if (counter_cycles == 25) begin
  278.                     counter_cycles <= 0;
  279.                     caseindex <= 25;
  280.                 end else begin
  281.                     counter_cycles <= counter_cycles + 1;
  282.                 end
  283.             end
  284.  
  285.             25: begin
  286.                 //Drop E - Then Wait for Command to Complete
  287.  
  288.                 ib_E <= 0;
  289.                 caseindex <= 26;
  290.             end
  291.  
  292.             26: begin
  293.                 //Delay
  294.  
  295.                 if (counter_cycles == 2500) begin
  296.                     counter_cycles <= 0;
  297.                     caseindex <= 27;
  298.                 end else begin
  299.                     counter_cycles <= counter_cycles + 1;
  300.                 end
  301.             end
  302.  
  303.             //*** *** *** DISPLAY OFF *** *** ***
  304.  
  305.             27: begin
  306.                 //Set Data, RS, and E - Then Wait for Data Setup
  307.  
  308.                 ib_DB <= 8'b00001000;
  309.                 ib_RS <= 0;
  310.                 ib_E <= 0;
  311.                 caseindex <= 28;
  312.             end
  313.  
  314.             28: begin
  315.                 //Delay
  316.  
  317.                 if (counter_cycles == 10) begin
  318.                     counter_cycles <= 0;
  319.                     caseindex <= 29;
  320.                 end else begin
  321.                     counter_cycles <= counter_cycles + 1;
  322.                 end
  323.             end
  324.  
  325.             29: begin
  326.                 //Raise E - Then Wait for Recognition
  327.  
  328.                 ib_E <= 1;
  329.                 caseindex <= 30;
  330.             end
  331.  
  332.             30: begin
  333.                 //Delay
  334.  
  335.                 if (counter_cycles == 25) begin
  336.                     counter_cycles <= 0;
  337.                     caseindex <= 31;
  338.                 end else begin
  339.                     counter_cycles <= counter_cycles + 1;
  340.                 end
  341.             end
  342.  
  343.             31: begin
  344.                 //Drop E - Then Wait for Command to Complete
  345.  
  346.                 ib_E <= 0;
  347.                 caseindex <= 32;
  348.             end
  349.  
  350.             32: begin
  351.                 //Delay
  352.  
  353.                 if (counter_cycles == 2500) begin
  354.                     counter_cycles <= 0;
  355.                     caseindex <= 33;
  356.                 end else begin
  357.                     counter_cycles <= counter_cycles + 1;
  358.                 end
  359.             end
  360.  
  361.             //*** *** *** CLEAR DISPLAY *** *** ***
  362.  
  363.             33: begin
  364.                 //Set Data, RS, and E - Then Wait for Data Setup
  365.  
  366.                 ib_DB <= 8'b00000001;
  367.                 ib_RS <= 0;
  368.                 ib_E <= 0;
  369.                 caseindex <= 34;
  370.             end
  371.  
  372.             34: begin
  373.                 //Delay
  374.  
  375.                 if (counter_cycles == 10) begin
  376.                     counter_cycles <= 0;
  377.                     caseindex <= 35;
  378.                 end else begin
  379.                     counter_cycles <= counter_cycles + 1;
  380.                 end
  381.             end
  382.  
  383.             35: begin
  384.                 //Raise E - Then Wait for Recognition
  385.  
  386.                 ib_E <= 1;
  387.                 caseindex <= 36;
  388.             end
  389.  
  390.             36: begin
  391.                 //Delay
  392.  
  393.                 if (counter_cycles == 25) begin
  394.                     counter_cycles <= 0;
  395.                     caseindex <= 37;
  396.                 end else begin
  397.                     counter_cycles <= counter_cycles + 1;
  398.                 end
  399.             end
  400.  
  401.             37: begin
  402.                 //Drop E - Then Wait for Command to Complete
  403.  
  404.                 ib_E <= 0;
  405.                 caseindex <= 38;
  406.             end
  407.  
  408.             38: begin
  409.                 //Delay
  410.  
  411.                 if (counter_cycles == 250000) begin
  412.                     counter_cycles <= 0;
  413.                     caseindex <= 39;
  414.                 end else begin
  415.                     counter_cycles <= counter_cycles + 1;
  416.                 end
  417.             end
  418.  
  419.             //*** *** *** ENTRY MODE SET *** *** ***
  420.  
  421.             39: begin
  422.                 //Set Data, RS, and E - Then Wait for Data Setup
  423.  
  424.                 ib_DB <= 8'b00000110;
  425.                 ib_RS <= 0;
  426.                 ib_E <= 0;
  427.                 caseindex <= 40;
  428.             end
  429.  
  430.             40: begin
  431.                 //Delay
  432.  
  433.                 if (counter_cycles == 10) begin
  434.                     counter_cycles <= 0;
  435.                     caseindex <= 41;
  436.                 end else begin
  437.                     counter_cycles <= counter_cycles + 1;
  438.                 end
  439.             end
  440.  
  441.             41: begin
  442.                 //Raise E - Then Wait for Recognition
  443.  
  444.                 ib_E <= 1;
  445.                 caseindex <= 42;
  446.             end
  447.  
  448.             42: begin
  449.                 //Delay
  450.  
  451.                 if (counter_cycles == 25) begin
  452.                     counter_cycles <= 0;
  453.                     caseindex <= 43;
  454.                 end else begin
  455.                     counter_cycles <= counter_cycles + 1;
  456.                 end
  457.             end
  458.  
  459.             43: begin
  460.                 //Drop E - Then Wait for Command to Complete
  461.  
  462.                 ib_E <= 0;
  463.                 caseindex <= 44;
  464.             end
  465.  
  466.             44: begin
  467.                 //Delay
  468.  
  469.                 if (counter_cycles == 2500) begin
  470.                     counter_cycles <= 0;
  471.                     caseindex <= 45;
  472.                 end else begin
  473.                     counter_cycles <= counter_cycles + 1;
  474.                 end
  475.             end
  476.  
  477.             //*** *** *** FUNCTION SET *** *** ***
  478.  
  479.             45: begin
  480.                 //Set Data, RS, and E - Then Wait for Data Setup
  481.  
  482.                 ib_DB <= 8'b00111000;
  483.                 ib_RS <= 0;
  484.                 ib_E <= 0;
  485.                 caseindex <= 46;
  486.             end
  487.  
  488.             46: begin
  489.                 //Delay
  490.  
  491.                 if (counter_cycles == 10) begin
  492.                     counter_cycles <= 0;
  493.                     caseindex <= 47;
  494.                 end else begin
  495.                     counter_cycles <= counter_cycles + 1;
  496.                 end
  497.             end
  498.  
  499.             47: begin
  500.                 //Raise E - Then Wait for Recognition
  501.  
  502.                 ib_E <= 1;
  503.                 caseindex <= 48;
  504.             end
  505.  
  506.             48: begin
  507.                 //Delay
  508.  
  509.                 if (counter_cycles == 25) begin
  510.                     counter_cycles <= 0;
  511.                     caseindex <= 49;
  512.                 end else begin
  513.                     counter_cycles <= counter_cycles + 1;
  514.                 end
  515.             end
  516.  
  517.             49: begin
  518.                 //Drop E - Then Wait for Command to Complete
  519.  
  520.                 ib_E <= 0;
  521.                 caseindex <= 50;
  522.             end
  523.  
  524.             50: begin
  525.                 //Delay
  526.  
  527.                 if (counter_cycles == 2500) begin
  528.                     counter_cycles <= 0;
  529.                     caseindex <= 51;
  530.                 end else begin
  531.                     counter_cycles <= counter_cycles + 1;
  532.                 end
  533.             end
  534.  
  535.             //*** *** *** DISPLAY ON *** *** ***
  536.  
  537.             51: begin
  538.                 //Set Data, RS, and E - Then Wait for Data Setup
  539.  
  540.                 ib_DB <= 8'b00001111;
  541.                 ib_RS <= 0;
  542.                 ib_E <= 0;
  543.                 caseindex <= 52;
  544.             end
  545.  
  546.             52: begin
  547.                 //Delay
  548.  
  549.                 if (counter_cycles == 10) begin
  550.                     counter_cycles <= 0;
  551.                     caseindex <= 53;
  552.                 end else begin
  553.                     counter_cycles <= counter_cycles + 1;
  554.                 end
  555.             end
  556.  
  557.             53: begin
  558.                 //Raise E - Then Wait for Recognition
  559.  
  560.                 ib_E <= 1;
  561.                 caseindex <= 54;
  562.             end
  563.  
  564.             54: begin
  565.                 //Delay
  566.  
  567.                 if (counter_cycles == 25) begin
  568.                     counter_cycles <= 0;
  569.                     caseindex <= 55;
  570.                 end else begin
  571.                     counter_cycles <= counter_cycles + 1;
  572.                 end
  573.             end
  574.  
  575.             55: begin
  576.                 //Drop E - Then Wait for Command to Complete
  577.  
  578.                 ib_E <= 0;
  579.                 caseindex <= 56;
  580.             end
  581.  
  582.             56: begin
  583.                 //Delay
  584.  
  585.                 if (counter_cycles == 2500) begin
  586.                     counter_cycles <= 0;
  587.                     caseindex <= 57;
  588.                 end else begin
  589.                     counter_cycles <= counter_cycles + 1;
  590.                 end
  591.             end
  592.  
  593.             //*** *** *** ENTRY MODE SET *** *** ***
  594.  
  595.             57: begin
  596.                 //Set Data, RS, and E - Then Wait for Data Setup
  597.  
  598.                 ib_DB <= 8'b00000110;
  599.                 ib_RS <= 0;
  600.                 ib_E <= 0;
  601.                 caseindex <= 58;
  602.             end
  603.  
  604.             58: begin
  605.                 //Delay
  606.  
  607.                 if (counter_cycles == 10) begin
  608.                     counter_cycles <= 0;
  609.                     caseindex <= 59;
  610.                 end else begin
  611.                     counter_cycles <= counter_cycles + 1;
  612.                 end
  613.             end
  614.  
  615.             59: begin
  616.                 //Raise E - Then Wait for Recognition
  617.  
  618.                 ib_E <= 1;
  619.                 caseindex <= 60;
  620.             end
  621.  
  622.             60: begin
  623.                 //Delay
  624.  
  625.                 if (counter_cycles == 25) begin
  626.                     counter_cycles <= 0;
  627.                     caseindex <= 61;
  628.                 end else begin
  629.                     counter_cycles <= counter_cycles + 1;
  630.                 end
  631.             end
  632.  
  633.             61: begin
  634.                 //Drop E - Then Wait for Command to Complete
  635.  
  636.                 ib_E <= 0;
  637.                 caseindex <= 62;
  638.             end
  639.  
  640.             62: begin
  641.                 //Delay
  642.  
  643.                 if (counter_cycles == 2500) begin
  644.                     counter_cycles <= 0;
  645.                     caseindex <= 63;
  646.                 end else begin
  647.                     counter_cycles <= counter_cycles + 1;
  648.                 end
  649.             end
  650.  
  651.             //*** *** *** SET DDRAM Address *** *** ***
  652.  
  653.             63: begin
  654.                 //Set Data, RS, and E - Then Wait for Data Setup
  655.  
  656.                 ib_DB <= 8'b10000000;
  657.                 ib_RS <= 0;
  658.                 ib_E <= 0;
  659.                 caseindex <= 64;
  660.             end
  661.  
  662.             64: begin
  663.                 //Delay
  664.  
  665.                 if (counter_cycles == 10) begin
  666.                     counter_cycles <= 0;
  667.                     caseindex <= 65;
  668.                 end else begin
  669.                     counter_cycles <= counter_cycles + 1;
  670.                 end
  671.             end
  672.  
  673.             65: begin
  674.                 //Raise E - Then Wait for Recognition
  675.  
  676.                 ib_E <= 1;
  677.                 caseindex <= 66;
  678.             end
  679.  
  680.             66: begin
  681.                 //Delay
  682.  
  683.                 if (counter_cycles == 25) begin
  684.                     counter_cycles <= 0;
  685.                     caseindex <= 67;
  686.                 end else begin
  687.                     counter_cycles <= counter_cycles + 1;
  688.                 end
  689.             end
  690.  
  691.             67: begin
  692.                 //Drop E - Then Wait for Command to Complete
  693.  
  694.                 ib_E <= 0;
  695.                 caseindex <= 68;
  696.             end
  697.  
  698.             68: begin
  699.                 //Delay
  700.  
  701.                 if (counter_cycles == 2500) begin
  702.                     counter_cycles <= 0;
  703.                     caseindex <= 69;
  704.                 end else begin
  705.                     counter_cycles <= counter_cycles + 1;
  706.                 end
  707.             end
  708.            
  709.             69: begin
  710.                 ib_Ready <= 1;
  711.             end
  712.         endcase
  713.     end
  714.  
  715.     assign LCD_Data = ib_DB;
  716.     assign LCD_RS = ib_RS;
  717.     assign LCD_RW = 0;
  718.     assign LCD_E = ib_E;
  719.    
  720.     assign Ready = ib_Ready;
  721.  
  722. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement