Advertisement
Slapoguzov

lab2

Oct 28th, 2015
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    00:42:53 10/29/2015
  7. // Design Name:
  8. // Module Name:    rotary_controller
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module rotary_controller #(parameter DATA_ADDR = 32'h00000500, parameter STEP_ADDR = 32'h00000501) (
  22.     //controller
  23.      output [7:0] LED,
  24.     input ROT_A,
  25.     input ROT_B,
  26.      //wishbone
  27.     inout clk_i,
  28.     inout rst_i,
  29.     input [31:0] ADDR_I,
  30.     input WE_I,
  31.     input [31:0] DATA_I,
  32.     output reg [31:0] DATA_O,
  33.     input CYC_I,
  34.     input STB_I,
  35.     output ACK_O
  36.     );
  37.  
  38. localparam IDLE = 0;
  39. localparam ACK  = 1;
  40.  
  41. reg state_r;
  42.  
  43. reg[7:0] data;
  44. reg[7:0] step;
  45.  
  46. wire read  = cyc_i & stb_i & !we_i;
  47. wire write = cyc_i & stb_i & we_i;
  48.  
  49. always@(posedge clk_i, posedge rst_i)
  50.     if(rst_i) begin
  51.         ACK_O   <= 0;
  52.         DATA_O   <= 0;
  53.           data <= 8'b0;
  54.           step <= 8'b0;
  55.     end else begin
  56.      
  57.           ACK_O   <= 0;
  58.          
  59.           case(state_r)
  60.             IDLE:
  61.                 begin
  62.                     if(write) begin
  63.                                 case(ADDR_I)
  64.                                     DATA_ADDR:
  65.                                         begin
  66.                                             data <= DATA_I[7:0];
  67.                                             state_r <= 1;
  68.                                             ACK_O   <= 1'b1;                                           
  69.                                         end
  70.                                     STEP_ADDR:
  71.                                         begin
  72.                                             step <= DATA_I[7:0];
  73.                                             state_r <= 1;
  74.                                             ACK_O   <= 1'b1;
  75.                                         end
  76.                                     default:
  77.                                         begin
  78.                                         end
  79.                                 endcase
  80.                     end else if(read) begin
  81.                                 DATA_O <= 32'b0;
  82.                                 case(ADDR_I)
  83.                                     DATA_ADDR:
  84.                                         begin
  85.                                             DATA_O[7:0] <= data;
  86.                                             state_r <= 1;
  87.                                         end
  88.                                     STEP_ADDR:
  89.                                         begin
  90.                                             DATA_O[7:0] <= step;
  91.                                             state_r <= 1;
  92.                                         end
  93.                                     default:
  94.                                         begin
  95.                                         end
  96.                                 endcase
  97.                     end
  98.                 end
  99.             ACK:
  100.                 begin
  101.                     ack_o   <= 1'b0;
  102.                     state_r <= IDLE;
  103.                 end
  104.         endcase
  105.      end
  106. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement