Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- `define ASSERT(expr) begin if (!(expr)) begin $display("FAIL"); $finish; end end
- module priority_encoder_v1(input [3:0] in, output [1:0] out, output v);
- assign v = |in;
- assign out = (in[3] == 1) ? 3 :
- (in[2] == 1) ? 2 :
- (in[1] == 1) ? 1 :
- 0;
- endmodule
- module priority_encoder_v2(input [3:0] in, output reg [1:0] out, output reg v);
- always @* begin
- v = |in;
- out = (in[3] == 1) ? 3 :
- (in[2] == 1) ? 2 :
- (in[1] == 1) ? 1 :
- 0;
- end
- endmodule
- module testbench #(parameter SIZE=4);
- reg [SIZE:0] in; // 1 bit bigger
- wire [1:0] out;
- wire v;
- priority_encoder_v1 pe(in[SIZE-1:0], out, v);
- initial begin
- for (in = 0; in < (1<<SIZE); in = in + 1) begin
- #1 $display("in=%d, out=%d, v=%d", in, out, v);
- if (in == 0)
- `ASSERT(v === 0)
- else begin
- `ASSERT(v === 1)
- if (in >= 4'b1000)
- `ASSERT(out === 3)
- else if (in >= 4'b0100)
- `ASSERT(out === 2)
- else if (in >= 4'b0010)
- `ASSERT(out === 1)
- else if (in >= 4'b0001)
- `ASSERT(out === 0)
- end
- end
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement