package global_pkg; typedef enum byte {direct = 8'h3b, inverse = 8'h3f} t_InitChar; typedef struct packed { bit td; bit tc; bit tb; bit ta; bit [3:0] nr_hist; } t_FormatChar; typedef struct packed { t_InitChar ts; t_FormatChar t0; } t_atr; endpackage : global_pkg import global_pkg::*; module p2s (in_array, out1, clk, reset, en); parameter LE = 8; input clk, reset, en; input [LE-1:0] in_array; output out1; reg [LE-1:0] par; reg out1; always @(posedge clk) begin if (reset) par <= 'b0; else if (en) par <= in_array; else {out1,par} <= par << 1; end // always @(posedge clk) endmodule : p2s module test; parameter LE = 8; bit clk, reset, en; bit data_out; t_atr my_atr; t_FormatChar data_array; reg out1; p2s #(LE) par2ser (data_array, data_out, clk, reset, en); initial begin reset = 1; data_array = 8'b1100_1010; #10 reset = 0; #10 en = 1; #10 en = 0; p2s_task(data_array); $finish; end always #5 clk = ~clk; always @(posedge clk iff !reset) $display($stime,,"data_array:%b data_out:%b out1:%b par2ser.array:%b", data_array, data_out, out1, par2ser.par); task p2s_task (input [LE-1:0] in_array); reg [LE-1:0] par; par <= in_array; repeat (LE) @(posedge clk) {out1, par} <= par << 1; @(posedge clk) return; endtask : p2s_task endmodule : test