Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module rotary_encoder (input dt, input sw, input clk, output c, output [7:0] segs, output [2:0] bits);
  2.  
  3.     reg [9:0] rot;
  4.     reg [2:0] num1;
  5.     reg [3:0] num3;
  6.     reg [5:0] r;
  7.     reg on;
  8.    
  9.     reg bit2, bit3;
  10.    
  11.     initial begin
  12.         bit2 <= 0;
  13.         bit3 <= 0;
  14.         rot <= 0;
  15.     end
  16.    
  17.     initial on = 1;
  18.    
  19.     assign c = on;
  20.    
  21.     display3num d3(bit3, clk, num3, segs, bits);
  22.     //display2num d2(bit2, clk, num1, segs, bits[1:0]);
  23.    
  24.     always @(posedge sw) begin
  25.         if (!dt) begin
  26.             rot = rot + 1;
  27.             on <= 0;
  28.         end
  29.         else begin
  30.             rot = rot - 1;
  31.             on <= 1;
  32.         end
  33.         #10;
  34.     end
  35.    
  36.     always @(*) begin
  37.         r = rot % 20;
  38.         if (r < 0 ) begin
  39.             r = -r;
  40.         end
  41.         case (r)
  42.             0: begin
  43.                 bit2 = 1;
  44.                 bit3 = 0;
  45.                 num3 = 4'b0000;
  46.             end
  47.             20: begin
  48.                 bit2 = 1;
  49.                 bit3 = 0;
  50.                 num3 = 4'b0000;
  51.             end
  52.             1: begin
  53.                 bit2 = 1;
  54.                 bit3 = 0;
  55.                 num3 = 4'b0001;
  56.             end
  57.             2: begin
  58.                 bit2 = 1;
  59.                 bit3 = 0;
  60.                 num3 = 4'b0010;
  61.             end
  62.             3: begin
  63.                 bit2 = 1;
  64.                 bit3 = 0;
  65.                 num3 = 4'b0011;
  66.             end
  67.             4: begin
  68.                 bit2 = 1;
  69.                 bit3 = 0;
  70.                 num3 = 4'b0100;
  71.             end
  72.             5: begin
  73.                 bit2 = 1;
  74.                 bit3 = 0;
  75.                 num3 = 4'b0101;
  76.             end
  77.             6: begin
  78.                 bit2 = 0;
  79.                 bit3 = 1;
  80.                 num3 = 4'b0000;
  81.             end
  82.             7: begin
  83.                 bit2 = 0;
  84.                 bit3 = 1;
  85.                 num3 = 4'b0001;
  86.             end
  87.             8: begin
  88.                 bit2 = 0;
  89.                 bit3 = 1;
  90.                 num3 = 4'b0010;
  91.             end
  92.             9: begin
  93.                 bit2 = 0;
  94.                 bit3 = 1;
  95.                 num3 = 4'b0011;
  96.             end
  97.             10: begin
  98.                 bit2 = 0;
  99.                 bit3 = 1;
  100.                 num3 = 4'b0100;
  101.             end
  102.             11: begin
  103.                 bit2 = 0;
  104.                 bit3 = 1;
  105.                 num3 = 4'b0101;
  106.             end
  107.             12: begin
  108.                 bit2 = 0;
  109.                 bit3 = 1;
  110.                 num3 = 4'b0110;
  111.             end
  112.             13: begin
  113.                 bit2 = 0;
  114.                 bit3 = 1;
  115.                 num3 = 4'b0111;
  116.             end
  117.             14: begin
  118.                 bit2 = 0;
  119.                 bit3 = 1;
  120.                 num3 = 4'b1000;
  121.             end
  122.             15: begin
  123.                 bit2 = 0;
  124.                 bit3 = 1;
  125.                 num3 = 4'b1001;
  126.             end
  127.             16: begin
  128.                 bit2 = 0;
  129.                 bit3 = 1;
  130.                 num3 = 4'b1010;
  131.             end
  132.             17: begin
  133.                 bit2 = 0;
  134.                 bit3 = 1;
  135.                 num3 = 4'b1011;
  136.             end
  137.             18: begin
  138.                 bit2 = 0;
  139.                 bit3 = 1;
  140.                 num3 = 4'b1100;
  141.             end
  142.             19: begin
  143.                 bit2 = 0;
  144.                 bit3 = 1;
  145.                 num3 = 4'b1101;
  146.             end
  147.         endcase
  148.     end
  149.    
  150. endmodule
  151.  
  152.  
  153.  
  154.  
  155. module display3num(input flag, input CLK, input [3:0] num, output [7:0] segs, output [2:0] bits);
  156.  
  157.     reg [2:0] b = 3'b111;
  158.     reg [7:0] num1, num2, num3;
  159.     reg [7:0] s = 8'b11111111;
  160.  
  161.     reg [1:0] state;
  162.     reg [32:0] ctr;
  163.  
  164.     assign segs = s;
  165.     assign bits = b;
  166.  
  167.     always begin
  168.         if (flag) begin
  169.             case(num)
  170.                 4'b0000: begin
  171.                     num1 = 8'b10011111;
  172.                     num2 = 8'b00000011;
  173.                     num3 = 8'b00000001;
  174.                 end
  175.                 4'b0001: begin
  176.                     num1 = 8'b10011111;
  177.                     num2 = 8'b00100101;
  178.                     num3 = 8'b01000001;
  179.                 end
  180.                 4'b0010: begin
  181.                     num1 = 8'b10011111;
  182.                     num2 = 8'b10011001;
  183.                     num3 = 8'b10011001;
  184.                 end
  185.                 4'b0011: begin
  186.                     num1 = 8'b10011111;
  187.                     num2 = 8'b01000001;
  188.                     num3 = 8'b00100101;
  189.                 end
  190.                 4'b0100: begin
  191.                     num1 = 8'b10011111;
  192.                     num2 = 8'b00000001;
  193.                     num3 = 8'b00000011;
  194.                 end
  195.                 4'b0101: begin
  196.                     num1 = 8'b10011111;
  197.                     num2 = 8'b00001001;
  198.                     num3 = 8'b00000001;
  199.                 end
  200.                 4'b0110: begin
  201.                     num1 = 8'b00100101;
  202.                     num2 = 8'b10011111;
  203.                     num3 = 8'b01000001;
  204.                 end
  205.                 4'b0111: begin
  206.                     num1 = 8'b00100101;
  207.                     num2 = 8'b00001101;
  208.                     num3 = 8'b10011001;
  209.                 end
  210.                 4'b1000: begin
  211.                     num1 = 8'b00100101;
  212.                     num2 = 8'b01001001;
  213.                     num3 = 8'b00100101;
  214.                 end
  215.                 4'b1001: begin
  216.                     num1 = 8'b00100101;
  217.                     num2 = 8'b00011111;
  218.                     num3 = 8'b00000011;
  219.                 end
  220.                 4'b1010: begin
  221.                     num1 = 8'b00100101;
  222.                     num2 = 8'b00000001;
  223.                     num3 = 8'b00000001;
  224.                 end
  225.                 4'b1011: begin
  226.                     num1 = 8'b00001101;
  227.                     num2 = 8'b00000011;
  228.                     num3 = 8'b00001101;
  229.                 end
  230.                 4'b1100: begin
  231.                     num1 = 8'b00001101;
  232.                     num2 = 8'b00100101;
  233.                     num3 = 8'b10011001;
  234.                 end
  235.                 4'b1101: begin
  236.                     num1 = 8'b00001101;
  237.                     num2 = 8'b10011001;
  238.                     num3 = 8'b00100101;
  239.                 end
  240.             endcase
  241.         end
  242.         else begin
  243.             case(num[2:0])
  244.                 3'b000: begin
  245.                     num1 = 8'b00000011;
  246.                     num2 = num1;
  247.                 end
  248.                 3'b001: begin
  249.                     num1 = 8'b00000001;
  250.                     num2 = 8'b10011111;
  251.                 end
  252.                 3'b010: begin
  253.                     num1 = 8'b01000001;
  254.                     num2 = 8'b00001101;
  255.                 end
  256.                 3'b011: begin
  257.                     num1 = 8'b10011001;
  258.                     num2 = 8'b01001001;
  259.                 end
  260.                 3'b100: begin
  261.                     num1 = 8'b00100101;
  262.                     num2 = 8'b00011111;
  263.                 end
  264.                 3'b101: begin
  265.                     num1 = 8'b00000011;
  266.                     num2 = 8'b00001001;
  267.                 end
  268.             endcase
  269.         end
  270.     end
  271.  
  272.     always @ (posedge CLK) begin
  273.  
  274.         ctr <= ctr + 1;
  275.         state <= ctr[16:15];
  276.        
  277.         if (flag) begin
  278.             if (state == 2'b00) begin
  279.                     s = num3;
  280.                     b = 3'b110;
  281.                 end
  282.             else if (state == 2'b01) begin
  283.                     s = num2;
  284.                     b = 3'b101;
  285.                 end
  286.             else if (state == 2'b10) begin
  287.                     s = num1;
  288.                     b = 3'b011;
  289.                 end
  290.         end
  291.         else begin
  292.             if (state[0] == 1'b0) begin
  293.                     s = num1;
  294.                     b = 3'b110;
  295.                 end
  296.             else if (state[0] == 1'b1) begin
  297.                     s = num2;
  298.                     b = 3'b101;
  299.                 end
  300.         end
  301.     end
  302.  
  303. endmodule
  304.  
  305. /*module display2num(input flag, input CLK, input [2:0] num, output [7:0] segs, output [1:0] bits);
  306.  
  307.     reg [1:0] b = 2'b11;
  308.     reg [7:0] s = 8'b11111111;
  309.     reg [7:0] num1, num2;
  310.  
  311.     reg state = 0;
  312.     reg state_old = 0;
  313.     integer c = 0;
  314.     reg [32:0] ctr;
  315.  
  316.     assign segs = s;
  317.     assign bits = b;
  318.  
  319.     always begin
  320.         case(num)
  321.             3'b000: begin
  322.                 num1 = 8'b00000011;
  323.                 num2 = num1;
  324.             end
  325.             3'b001: begin
  326.                 num1 = 8'b00000001;
  327.                 num2 = 8'b10011111;
  328.             end
  329.             3'b010: begin
  330.                 num1 = 8'b01000001;
  331.                 num2 = 8'b00001101;
  332.             end
  333.             3'b011: begin
  334.                 num1 = 8'b10011001;
  335.                 num2 = 8'b01001001;
  336.             end
  337.             3'b100: begin
  338.                 num1 = 8'b00100101;
  339.                 num2 = 8'b00011111;
  340.             end
  341.             3'b101: begin
  342.                 num1 = 8'b00000011;
  343.                 num2 = 8'b00001001;
  344.             end
  345.         endcase
  346.     end
  347.  
  348.     always @ (posedge CLK) begin
  349.  
  350.         ctr <= ctr + 1;
  351.         state <= ctr[15];
  352.        
  353.         if (flag) begin
  354.             if (state == 1'b0) begin
  355.                     s = num1;
  356.                     b = 2'b10;
  357.                 end
  358.             else if (state == 1'b1) begin
  359.                     s = num2;
  360.                     b = 2'b01;
  361.                 end
  362.         end
  363.         else b = 2'b11;
  364.     end
  365.  
  366. endmodule*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement