/// Solution to LSU EE 4702-1 Spring 2001 Homework 1
module priority_encoder_1_b(grant,found_out,request,found_in);
output grant, found_out;
input request, found_in;
wire request, found_in;
reg grant, found_out;
always @( request or found_in ) begin
found_out = found_in | request;
grant = !found_in & request;
end
endmodule
module priority_encoder_1_es(grant,found_out,request,found_in);
output grant, found_out;
input request, found_in;
wire grant, found_out;
wire request, found_in;
or o1(found_out, found_in, request);
and a1(grant, not_found_in, request);
not n1(not_found_in, found_in);
endmodule
module priority_encoder_1_is(grant, found_out, request, found_in);
input request, found_in;
output grant, found_out;
wire found_out = found_in | request;
wire grant = !found_in & request;
endmodule
module test_pe(done, okay_b, okay_is, okay_es);
output done, okay_b, okay_is, okay_es;
reg done, okay_b, okay_is, okay_es;
reg request, found_in;
wire grant_b, found_out_b;
wire grant_is, found_out_is;
wire grant_es, found_out_es;
priority_encoder_1_b peb(grant_b,found_out_b,request,found_in);
priority_encoder_1_es pees(grant_es,found_out_es,request,found_in);
priority_encoder_1_is peis(grant_is,found_out_is,request,found_in);
reg [1:0] answers [0:3];
integer i;
initial begin
done = 0;
okay_b = 1; okay_es = 1; okay_is = 1;
answers[2'b00] = 2'b00;
answers[2'b01] = 2'b01;
answers[2'b10] = 2'b11;
answers[2'b11] = 2'b01;
for(i=0; i<4; i=i+1) begin
{request, found_in } = i;
#1;
if( {grant_b,found_out_b} !== answers[i] ) okay_b = 0;
if( {grant_is,found_out_is} !== answers[i] ) okay_is = 0;
if( {grant_es,found_out_es} !== answers[i] ) okay_es = 0;
end // for (i=0; i<4; i=i+1)
done = 1;
end // initial begin
endmodule // test_pe