SHARE
TWEET

no_full_state

a guest Sep 2nd, 2019 92 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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top