I am trying use the output of a 16-bit encoder as to give input to the register(PIPO). The 16-bit encoder will give 4-bit binary output; these 4-bit binary output will be given as input to the register.
`timescale 1ps/1ps
module encoder16to4 (clk,en,encoder_in,encoder_out);
input clk,en;
input [15:0]encoder_in;
output reg [3:0] encoder_out;
always @(*) begin
if(en)
case(encoder_in)
16'b0000000000000001 : encoder_out =4'b0000;
16'b0000000000000010 : encoder_out =4'b0001;
16'b0000000000000100 : encoder_out =4'b0010;
16'b0000000000001000 : encoder_out =4'b0011;
16'b0000000000010000 : encoder_out =4'b0100;
16'b0000000000100000 : encoder_out =4'b0101;
16'b0000000001000000 : encoder_out =4'b0110;
16'b0000000010000000 : encoder_out =4'b0111;
16'b0000000100000000 : encoder_out =4'b1000;
16'b0000001000000000 : encoder_out =4'b1001;
16'b0000010000000000 : encoder_out =4'b1010;
16'b0000100000000000 : encoder_out =4'b1011;
16'b0001000000000000 : encoder_out =4'b1100;
16'b0010000000000000 : encoder_out =4'b1101;
16'b0100000000000000 : encoder_out =4'b1110;
16'b1000000000000000 : encoder_out =4'b1111;
default: encoder_out = 3'bxxx;
endcase
else
encoder_out= 3'b000;
end
endmodule
module PIPO (clk,reset,pipo_in,pipo_out);
input clk;
input reset;
input [3:0] pipo_in;
output reg [3:0] pipo_out;
always @(*) begin
if (reset)
pipo_out = 4'b0000;
else
pipo_out = pipo_in;
end
endmodule
Here is the test bench where i am trying to instantiated the above said
module tb;
reg clk;
reg en;
reg reset;
reg [15:0]encoder_in;
reg [3:0]encoder_out;
reg [3:0]pipo_in;
wire [3:0]pipo_out;
encoder16to4 iencoder16to4(.clk(clk),.en(en),.encoder_in(encoder_in),.encoder_out(pipo_in));
initial begin
clk=0;
forever
#50 clk= ~clk;
end
initial begin
$monitor("Time=%2t, Clock=%d, en=%b, in=%b, out=%b, pipo_in=%b, pipo_out=%b", $time, clk, en,encoder_in,encoder_out,pipo_in,pipo_out);
$dumpfile("tb.vcd");
$dumpvars(0,tb);
clk=1;en=1;encoder_in=16'b0000000000000001;encoder_out =4'b0000;pipo_in=4'b0000;
clk=1;en=1;encoder_in=16'b0000000000000010;encoder_out =4'b0001;pipo_in=4'b0001;
clk=1;en=1;encoder_in=16'b0000000000000100;encoder_out =4'b0010;pipo_in=4'b0010;
clk=1;en=1;encoder_in=16'b0000000000001000;encoder_out =4'b0011;pipo_in=4'b0011;
clk=1;en=1;encoder_in=16'b0000000000010000;encoder_out =4'b0100;pipo_in=4'b0100;
clk=1;en=1;encoder_in=16'b0000000000100000;encoder_out =4'b0101;pipo_in=4'b0101;
$finish;
end
endmodule
This is the error I am getting in the terminal.
tb.v:12: error: reg pipo_in; cannot be driven by primitives or continuous assignment.
tb.v:12: error: Output port expression must support continuous assignment.
tb.v:12: : Port 4 (encoder_out) of encoder16to4 is connected to pipo_in
Line 12
encoder16to4 iencoder16to4(.clk(clk),.en(en),.encoder_in(encoder_in),.encoder_out(pipo_in));
What correction should I do to make it work? Any help would be appreciated.