Advertisement
Guest User

Untitled

a guest
Dec 18th, 2017
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //==================================================================================================
  2. //  Filename      : lab3.v
  3. //  Created On    : 2017-12-15 32:40:49
  4. //  Last Modified : 2017-12-18 19:13:29
  5. //  Revision      :
  6. //  Author        : Ilya
  7. //  Company       : OKB RES SUAI
  8. //  Email         : tigoldghost@gmail.com
  9. //
  10. //  Description   :
  11. //
  12. //
  13. //==================================================================================================
  14. module lab3
  15. (
  16. input wire clk,
  17.  
  18.  
  19. input wire up,
  20. input wire down,
  21. output reg resultat
  22. );
  23.  
  24. localparam  st0 = 8'b0000_0001,
  25.                st1 = 8'b0000_0010,
  26.                st2 = 8'b0000_0100;
  27. localparam  dr0 = 8'b0000_0001,
  28.                dr1 = 8'b0000_0010,
  29.                dr2 = 8'b0000_0100;
  30. localparam INC = 32'd15_000;  
  31. localparam  T  = 32'd250_000;
  32.  
  33. reg [15:0] cnt;
  34. reg signed [31:0] cnt2;  //  signed - знаковый регистр
  35. reg [7:0] state;
  36. reg [7:0]state_dr;
  37. reg signed [31:0] v;
  38. reg  ra;
  39. reg  rb;
  40. reg  fl;
  41. reg signed [31:0] xu;
  42. assign in_up = ~up;
  43. assign in_down = ~down;
  44. initial begin
  45.     cnt = 0; // 8'b_0000_0000;
  46.     state = st0;
  47.     v = T/32'd4;
  48.     xu = 32'd0;
  49.     state_dr = dr0;
  50. end
  51.  
  52. //*************************************
  53. always @(posedge clk) begin
  54.     case (state_dr)
  55.     dr0: begin
  56.             if (cnt > 16'd5) begin
  57.                 cnt = 0;
  58.                 if(in_up)state_dr = dr1;
  59.                 else if(in_down)state_dr = dr2;
  60.                 else state_dr = dr0;
  61.             end
  62.             else begin
  63.                     state_dr =  dr0;
  64.             end
  65.            
  66.             if (in_up||in_down) begin
  67.                 cnt = cnt +16'd1;
  68.             end
  69.             else begin
  70.                 cnt = 0;
  71.             end
  72.         end
  73.     dr1:begin
  74.         if(!in_up)begin
  75.             if (cnt > 16'd5) begin
  76.                 state_dr =  dr0;
  77.                 cnt = 0;
  78.                 ra = 1'b1;
  79.             end
  80.             else begin
  81.                 state_dr =  dr1;
  82.             end
  83.             if (in_up == 1'b0) begin
  84.                 cnt = cnt + 16'd1;
  85.             end
  86.             else begin
  87.                 cnt = 0;
  88.             end
  89.         end
  90.         else
  91.         begin
  92.             state_dr =  dr1;
  93.         end
  94.         end
  95.         dr2:begin
  96.         if(!in_down)begin
  97.             if (cnt > 16'd5) begin
  98.                 state_dr = dr0;
  99.                 cnt = 0;
  100.                 rb = 1'b1;
  101.             end
  102.             else begin
  103.                 state_dr = dr2;
  104.             end
  105.             if (in_down == 1'b0) begin
  106.                 cnt = cnt + 16'd1;
  107.             end
  108.             else begin 
  109.                 cnt = 0;
  110.             end
  111.         end
  112.         else
  113.         begin
  114.             state_dr = dr2;
  115.         end
  116.         end
  117.         endcase
  118.  
  119.         case(state)
  120.         st0:begin
  121.             resultat = 1'b1;
  122.             if (cnt2 > v) begin
  123.             state = st1;
  124.             cnt2 = 0;
  125.             if (v <= INC-32'b1) begin
  126.                 v = 32'd0;
  127.                 xu = T;
  128.                 fl = 1'b1;
  129.             end
  130.             else if(v >=  T) begin
  131.                 v = T   ;
  132.                 xu = 32'd1;
  133.             end
  134.             else begin
  135.                 xu = T - v;
  136.             end
  137.             end
  138.             else begin
  139.                 state = st0;
  140.                 cnt2 = cnt2 + 32'd1;
  141.             end
  142.         end
  143.         st1:begin
  144.             resultat = 1'b0;
  145.             if (cnt2 > xu) begin // T = 200
  146.                 state = st2;
  147.                 cnt2 = 0;
  148.             end
  149.             else begin
  150.                 state = st1;
  151.                 cnt2 = cnt2 + 32'd1;
  152.             end
  153.         end
  154.         st2:begin
  155.             if  (ra) begin
  156.                 v = v + INC;
  157.                 fl = 1'b0;
  158.             end
  159.             if (rb && !fl) begin
  160.                 v = v - INC;
  161.             end
  162.             state = st0;
  163.             ra = 1'b0;
  164.             rb = 1'b0;
  165.         end
  166.  
  167.         endcase
  168. end
  169. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement