diff options
| -rw-r--r-- | simple_gemac/address_filter.v | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/simple_gemac/address_filter.v b/simple_gemac/address_filter.v new file mode 100644 index 000000000..2d2f4df51 --- /dev/null +++ b/simple_gemac/address_filter.v @@ -0,0 +1,34 @@ + + +module address_filter +  (input clk, +   input reset, +   input go, +   input [7:0] data, +   input [47:0] address, +   output match, +   output done); + +   reg [2:0] af_state; + +   always @(posedge clk) +     if(reset) +       af_state     <= 0; +     else +       if(go) +	 af_state <= (data == address[47:40]) ? 1 : 7; +       else +	 case(af_state) +	   1 : af_state <= (data == address[39:32]) ? 2 : 7; +	   2 : af_state <= (data == address[31:24]) ? 3 : 7; +	   3 : af_state <= (data == address[23:16]) ? 4 : 7; +	   4 : af_state <= (data == address[15:8])  ? 5 : 7; +	   5 : af_state <= (data == address[7:0]) ? 6 : 7; +	 endcase // case (af_state) + +   assign match  = (af_state==6); +   assign done 	 = (af_state==6)|(af_state==7); +    +endmodule // address_filter + +    | 
