Advertisement
Guest User

no_full_state

a guest
Sep 2nd, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2.  
  3. module sample_mgmt(
  4.     input wire clk,
  5.     input wire rst,
  6.     input wire [15:0] input_data,
  7.     input wire input_enable,
  8.     output reg output_enable,
  9.     output reg [9:0] ram_addr,
  10.     output reg [15:0] value,
  11.     output reg full
  12.     );
  13.    
  14.     localparam
  15.         CLEAR       = 2'b00,
  16.         IDLE        = 2'b01,
  17.         WRITE       = 2'b10,
  18.         FULL        = 2'b11,
  19.         FRAME_SIZE  = 1023;
  20.    
  21.     reg [1:0]   state, state_nxt;
  22.     reg [15:0]  value_nxt;
  23.     reg [9:0]   ram_addr_nxt, ram_addr_delay;
  24.     reg output_enable_nxt, full_nxt;
  25.    
  26.    
  27.     always @(posedge clk)
  28.         if(!rst)
  29.             begin
  30.                 ram_addr        <= ram_addr_delay;
  31.                 ram_addr_delay  <= ram_addr_nxt;
  32.                 value           <= value_nxt;
  33.                 full            <= full_nxt;
  34.                 output_enable   <= output_enable_nxt;
  35.                 state           <= state_nxt;
  36.             end
  37.         else
  38.             begin
  39.                 ram_addr        <= 10'd0;
  40.                 ram_addr_delay  <= 10'd0;
  41.                 value           <= 16'd0;
  42.                 full            <= 1'd0;
  43.                 output_enable   <= 1'd0;
  44.                 state           <= IDLE;
  45.             end
  46.    
  47.     always@(state or input_enable or ram_addr_delay)                   //next state logic
  48.         begin
  49.             case(state)
  50.                 IDLE:       state_nxt = input_enable ? WRITE : IDLE;
  51.                 WRITE:      state_nxt = (ram_addr_delay == FRAME_SIZE) ? FULL : IDLE;
  52.                 //FULL:       state_nxt = IDLE;
  53.                 CLEAR:      state_nxt = (ram_addr_delay == FRAME_SIZE) ? IDLE : CLEAR;
  54.                 default:    state_nxt = IDLE;
  55.             endcase
  56.         end
  57.  
  58.     always @(*)                     //@* czy @state?
  59.         begin
  60.             value_nxt         = value;                  //defaults
  61.             full_nxt          = full;
  62.             ram_addr_nxt      = ram_addr_delay;
  63.             output_enable_nxt = output_enable;
  64.             case(state)
  65.                 IDLE:
  66.                     begin
  67.                         full_nxt = 0;
  68.                         output_enable_nxt = 0;
  69.                     end
  70.                 WRITE:
  71.                     begin
  72.                         value_nxt = input_data;
  73.                         ram_addr_nxt = ram_addr_delay + 1;    
  74.                         output_enable_nxt = 1;
  75.                         full_nxt = (ram_addr_delay == FRAME_SIZE);  
  76.                     end
  77.                     /*
  78.                 FULL:
  79.                     begin
  80.                         ram_addr_nxt = 0;
  81.                         output_enable_nxt = 0;          //changed from output_enable to 0
  82.                         full_nxt = 1;
  83.                     end
  84.                     */
  85.                 CLEAR:
  86.                     begin
  87.                         value_nxt = 0;
  88.                         full_nxt = 0;
  89.                         ram_addr_nxt = ram_addr_delay + 1;
  90.                         output_enable_nxt = 1;
  91.                     end
  92.             endcase
  93.         end
  94. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement