Advertisement
Guest User

Untitled

a guest
Jul 5th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2.  
  3. // LCD Write Test ("Hello")
  4. // ----------------------------------------------------------------------------
  5. // For:     Hitachi HD44780 Controller (And Compatible)
  6. //          8-Bit Mode
  7. //
  8. // Author:  Geoff Sevart
  9.  
  10. module LCD_Hitachi_HD44780_8Bit_WriteTestDiagnostic(
  11.          input CLK,
  12.          output [7:0] LCD_D,
  13.          output LCD_RS,
  14.          output LCD_RW,
  15.          output LCD_E,
  16.          output Done
  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_Done;
  27.  
  28.     initial begin
  29.         ib_DB = 0;
  30.         ib_RS = 0;
  31.         ib_E = 0;
  32.        
  33.         ib_Done = 0;
  34.     end
  35.  
  36.     always @(posedge CLK) begin
  37.         case(caseindex)
  38.             //*** *** *** WRITE DDRAM BYTE *** *** ***
  39.  
  40.             0: begin
  41.                 //Set Data, RS, and E - Then Wait for Data Setup
  42.  
  43.                 ib_DB <= 8'b01001000;
  44.                 ib_RS <= 1;
  45.                 ib_E <= 0;
  46.                 caseindex <= 1;
  47.             end
  48.  
  49.             1: begin
  50.                 //Delay
  51.  
  52.                 if (counter_cycles == 10) begin
  53.                     counter_cycles <= 0;
  54.                     caseindex <= 2;
  55.                 end else begin
  56.                     counter_cycles <= counter_cycles + 1;
  57.                 end
  58.             end
  59.  
  60.             2: begin
  61.                 //Raise E - Then Wait for Recognition
  62.  
  63.                 ib_E <= 1;
  64.                 caseindex <= 3;
  65.             end
  66.  
  67.             3: begin
  68.                 //Delay
  69.  
  70.                 if (counter_cycles == 25) begin
  71.                     counter_cycles <= 0;
  72.                     caseindex <= 4;
  73.                 end else begin
  74.                     counter_cycles <= counter_cycles + 1;
  75.                 end
  76.             end
  77.  
  78.             4: begin
  79.                 //Drop E - Then Wait for Command to Complete
  80.  
  81.                 ib_E <= 0;
  82.                 caseindex <= 5;
  83.             end
  84.  
  85.             5: begin
  86.                 //Delay
  87.  
  88.                 if (counter_cycles == 2500) begin
  89.                     counter_cycles <= 0;
  90.                     caseindex <= 6;
  91.                 end else begin
  92.                     counter_cycles <= counter_cycles + 1;
  93.                 end
  94.             end
  95.  
  96.             //*** *** *** WRITE DDRAM BYTE *** *** ***
  97.  
  98.             6: begin
  99.                 //Set Data, RS, and E - Then Wait for Data Setup
  100.  
  101.                 ib_DB <= 8'b01100101;
  102.                 ib_RS <= 1;
  103.                 ib_E <= 0;
  104.                 caseindex <= 7;
  105.             end
  106.  
  107.             7: begin
  108.                 //Delay
  109.  
  110.                 if (counter_cycles == 10) begin
  111.                     counter_cycles <= 0;
  112.                     caseindex <= 8;
  113.                 end else begin
  114.                     counter_cycles <= counter_cycles + 1;
  115.                 end
  116.             end
  117.  
  118.             8: begin
  119.                 //Raise E - Then Wait for Recognition
  120.  
  121.                 ib_E <= 1;
  122.                 caseindex <= 9;
  123.             end
  124.  
  125.             9: begin
  126.                 //Delay
  127.  
  128.                 if (counter_cycles == 25) begin
  129.                     counter_cycles <= 0;
  130.                     caseindex <= 10;
  131.                 end else begin
  132.                     counter_cycles <= counter_cycles + 1;
  133.                 end
  134.             end
  135.  
  136.             10: begin
  137.                 //Drop E - Then Wait for Command to Complete
  138.  
  139.                 ib_E <= 0;
  140.                 caseindex <= 11;
  141.             end
  142.  
  143.             11: begin
  144.                 //Delay
  145.  
  146.                 if (counter_cycles == 2500) begin
  147.                     counter_cycles <= 0;
  148.                     caseindex <= 12;
  149.                 end else begin
  150.                     counter_cycles <= counter_cycles + 1;
  151.                 end
  152.             end
  153.  
  154.             //*** *** *** WRITE DDRAM BYTE *** *** ***
  155.  
  156.             12: begin
  157.                 //Set Data, RS, and E - Then Wait for Data Setup
  158.  
  159.                 ib_DB <= 8'b01101100;
  160.                 ib_RS <= 1;
  161.                 ib_E <= 0;
  162.                 caseindex <= 13;
  163.             end
  164.  
  165.             13: begin
  166.                 //Delay
  167.  
  168.                 if (counter_cycles == 10) 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.                 //Raise E - Then Wait for Recognition
  178.  
  179.                 ib_E <= 1;
  180.                 caseindex <= 15;
  181.             end
  182.  
  183.             15: begin
  184.                 //Delay
  185.  
  186.                 if (counter_cycles == 25) begin
  187.                     counter_cycles <= 0;
  188.                     caseindex <= 16;
  189.                 end else begin
  190.                     counter_cycles <= counter_cycles + 1;
  191.                 end
  192.             end
  193.  
  194.             16: begin
  195.                 //Drop E - Then Wait for Command to Complete
  196.  
  197.                 ib_E <= 0;
  198.                 caseindex <= 17;
  199.             end
  200.  
  201.             17: begin
  202.                 //Delay
  203.  
  204.                 if (counter_cycles == 2500) begin
  205.                     counter_cycles <= 0;
  206.                     caseindex <= 18;
  207.                 end else begin
  208.                     counter_cycles <= counter_cycles + 1;
  209.                 end
  210.             end
  211.  
  212.             //*** *** *** WRITE DDRAM BYTE *** *** ***
  213.  
  214.             18: begin
  215.                 //Set Data, RS, and E - Then Wait for Data Setup
  216.  
  217.                 ib_DB <= 8'b01101100;
  218.                 ib_RS <= 1;
  219.                 ib_E <= 0;
  220.                 caseindex <= 19;
  221.             end
  222.  
  223.             19: begin
  224.                 //Delay
  225.  
  226.                 if (counter_cycles == 10) begin
  227.                     counter_cycles <= 0;
  228.                     caseindex <= 20;
  229.                 end else begin
  230.                     counter_cycles <= counter_cycles + 1;
  231.                 end
  232.             end
  233.  
  234.             20: begin
  235.                 //Raise E - Then Wait for Recognition
  236.  
  237.                 ib_E <= 1;
  238.                 caseindex <= 21;
  239.             end
  240.  
  241.             21: begin
  242.                 //Delay
  243.  
  244.                 if (counter_cycles == 25) begin
  245.                     counter_cycles <= 0;
  246.                     caseindex <= 22;
  247.                 end else begin
  248.                     counter_cycles <= counter_cycles + 1;
  249.                 end
  250.             end
  251.  
  252.             22: begin
  253.                 //Drop E - Then Wait for Command to Complete
  254.  
  255.                 ib_E <= 0;
  256.                 caseindex <= 23;
  257.             end
  258.  
  259.             23: begin
  260.                 //Delay
  261.  
  262.                 if (counter_cycles == 2500) begin
  263.                     counter_cycles <= 0;
  264.                     caseindex <= 24;
  265.                 end else begin
  266.                     counter_cycles <= counter_cycles + 1;
  267.                 end
  268.             end
  269.  
  270.             //*** *** *** WRITE DDRAM BYTE *** *** ***
  271.  
  272.             24: begin
  273.                 //Set Data, RS, and E - Then Wait for Data Setup
  274.  
  275.                 ib_DB <= 8'b01101111;
  276.                 ib_RS <= 1;
  277.                 ib_E <= 0;
  278.                 caseindex <= 25;
  279.             end
  280.  
  281.             25: begin
  282.                 //Delay
  283.  
  284.                 if (counter_cycles == 10) begin
  285.                     counter_cycles <= 0;
  286.                     caseindex <= 26;
  287.                 end else begin
  288.                     counter_cycles <= counter_cycles + 1;
  289.                 end
  290.             end
  291.  
  292.             26: begin
  293.                 //Raise E - Then Wait for Recognition
  294.  
  295.                 ib_E <= 1;
  296.                 caseindex <= 27;
  297.             end
  298.  
  299.             27: begin
  300.                 //Delay
  301.  
  302.                 if (counter_cycles == 25) begin
  303.                     counter_cycles <= 0;
  304.                     caseindex <= 28;
  305.                 end else begin
  306.                     counter_cycles <= counter_cycles + 1;
  307.                 end
  308.             end
  309.  
  310.             28: begin
  311.                 //Drop E - Then Wait for Command to Complete
  312.  
  313.                 ib_E <= 0;
  314.                 caseindex <= 29;
  315.             end
  316.  
  317.             29: begin
  318.                 //Delay
  319.  
  320.                 if (counter_cycles == 2500) begin
  321.                     counter_cycles <= 0;
  322.                     caseindex <= 30;
  323.                 end else begin
  324.                     counter_cycles <= counter_cycles + 1;
  325.                 end
  326.             end
  327.            
  328.             30: begin
  329.                 ib_Done <= 1;
  330.             end
  331.         endcase
  332.     end
  333.  
  334.     assign LCD_Data = ib_Done ? 1'bz : ib_DB;
  335.     assign LCD_RS = ib_Done ? 1'bz : ib_RS;
  336.     assign LCD_RW = ib_Done ? 1'bz : 0;
  337.     assign LCD_E = ib_Done ? 1'bz : ib_E;
  338.    
  339.     assign Done = ib_Done;
  340.  
  341. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement