// behavioural model of running 5-word median filter
module median_beh (outWord, clk, reset, inWord);
   output [3:0]	outWord;
   input	clk, reset;
   input [3:0]	inWord;
   
   reg [3:0]	outWord;
   
   integer	count, i, j;
   reg [3:0]	mem [0:4];
   reg [3:0]	workSpace [0:4];
   reg [3:0]	tmp;
   
   initial begin
      count = 0;
   end
   
   always @(posedge clk) begin
      if (reset == 1)
	 for (i = 0; i < 5; i = i + 1)
	    mem [i] = 0;
      else begin
	 // update array of lst 5 words
	 mem [count] = inWord;
	 count = (count == 4) ? 0 : count + 1;
	 
	 // copy array into work space
	 for (i = 0; i < 5; i = i + 1)
	    workSpace [i] = mem [i];
	 
	 // sort workSpace - using bubble sort
	 for (i = 0; i < 4; i = i + 1)
	    for (j = 4; j > i; j = j - 1)
	       if (workSpace [j] < workSpace [j-1]) begin
		  tmp             = workSpace [j-1]; 
		  workSpace [j-1] = workSpace [j]; 
		  workSpace [j]   = tmp;
	       end
	 
	 // output result
	 outWord = workSpace[2];
      end // else: !if(reset == 1)
      
      
      // test output
      #3  for (i = 0; i < 5; i = i + 1)
	 $display ("     %d %d %d", i, mem[i], workSpace[i]);
      
   end
   
endmodule

module testStimulus;
   
   reg [3:0]  inWord;
   reg	      clk, reset;
   wire [3:0] outWord;
   
   
   // instantiate behavioural model
   median_beh beh (outWord, clk, reset, inWord);
   
   initial begin
      clk = 0;
      reset = 1;
      #100 reset = 0;
      
      #5003 $finish;
   end 
   
   always #50 clk = ~clk;
   
   always @(negedge clk) // tricky way to update values
      inWord = {$random} / 4 % 16;
   
   always @(posedge clk)
      #2 $display("input word %d - ", inWord, "output word %d", outWord);
   
endmodule // testStimulus

<div align="center"><br /><script type="text/javascript"><!--
google_ad_client = "pub-7293844627074885";
//468x60, Created at 07. 11. 25
google_ad_slot = "8619794253";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />&nbsp;</div>