fsm_arbiter2

Download FSM_Arbiter2

If you can't read please download the document

Upload: deepak-kumawat

Post on 01-Oct-2015

215 views

Category:

Documents


1 download

DESCRIPTION

f

TRANSCRIPT

`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 12:17:07 11/08/2014 // Design Name: // Module Name: FSM_Arbiter2 // Project Name: // Target Devices: // Tool versions: // Description: //// Dependencies: //// Revision: // Revision 0.01 - File Created// Additional Comments: //////////////////////////////////////////////////////////////////////////////////////Program Name: To Design a Modified Priority Resolver Type FSM Arbiter...........module FSM_Arbiter2(reset_n, clk, R, ack, G );//Port Declarations............................................................... input reset_n;input clk;input [2:0] R;output reg ack=1;output reg [2:0] G = 0;//State Parameter Declarations..........................................................parameter [1:0] s0 = 2'b00, //Idle State s1 = 2'b01, //Grant to resource 1 s2 = 2'b10, //Grant to resource 2 s3 = 2'b11; //Grant to resource 3 //Mode Parameter Declaration.........................................................parameter [1:0] m0 = 2'b00, //Normal Mode m1 = 2'b01, //Round Robin Mode m2 = 2'b10; //Auto Pilot Mode //Register Declarations........................................................... reg [1:0] current=0 ;reg [2:0] tmp=0;reg [1:0] mode=m1;//Program starts here.............................................................always @ (posedge clk or negedge reset_n)beginif(reset_n == 0)begin current[1:0] = s0;G[2:0] = 0; ack = 0;endelse case(current)s0 : begin/* ???what is the use of this line??? */ // G[2:0] = (current == s0)? 3'b000 : 0;if(tmp == 0) tmp=R;if ( tmp[2] == 1)begin current = s1; G[2:0]=3'b100;ack = 0;endelse if (tmp[1] == 1)begin current = s2;G[2:0]=3'b010;ack = 0;endelse if (tmp[0] == 1)begin current = s3;G[2:0]=3'b001; ack = 0;end/* else begin current = s0;G[2:0]=3'b000;ack = 0;end*/ //$display("G is %b",G[2:0]);ends1 : beginif ( R[2] == 0 || (mode==m1 && (R[1] == 1 || R[0] == 1))) begin current = s0;G[2:0] = 3'b000;tmp[2]=0;endif(tmp==0) ack=1; if(mode == m2) begin endends2 : beginif ( R[1] == 0 || (mode==m1 && (R[2] == 1 || R[0] == 1))) begin current = s0;G[2:0] = 3'b000;tmp[1]=0;endif(tmp==0) ack=1; if(mode == m2) begin end ends3 : beginif ( R[1] == 0 || (mode==m1 && (R[2] == 1 || R[1] == 1))) begin current = s0;G[2:0] = 3'b000;tmp[0]=0;endif(tmp==0) ack=1; if(mode == m2) begin endendendcaseendendmodule