Update RTL design files
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 26081e9..e803d4f 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -39,8 +39,8 @@
     parameter BITS = 32
 )(
 `ifdef USE_POWER_PINS
-    inout vccd1,	// User area 1 1.8V supply
-    inout vssd1,	// User area 1 digital ground
+    inout vccd1,  // User area 1 1.8V supply
+    inout vssd1,  // User area 1 digital ground
 `endif
 
     // Wishbone Slave ports (WB MI A)
@@ -83,6 +83,8 @@
     wire [3:0] wstrb;
     wire [31:0] la_write;
 
+    wire can_tx, can_rx;
+
     // WB MI A
     assign valid = wbs_cyc_i && wbs_stb_i; 
     assign wstrb = wbs_sel_i & {4{wbs_we_i}};
@@ -90,76 +92,59 @@
     assign wdata = wbs_dat_i;
 
     // IO
-    assign io_out = count;
-    assign io_oeb = {(`MPRJ_IO_PADS-1){rst}};
+    // assign io_out = count;
+    // assign io_oeb = {(`MPRJ_IO_PADS-1){rst}};
+
+    assign io_oeb[(`MPRJ_IO_PADS-1):2] = {(`MPRJ_IO_PADS-3){1'b0}};
+    assign io_out[(`MPRJ_IO_PADS-1):2] = {(`MPRJ_IO_PADS-3){1'b1}};
+
+    assign io_out[0] = can_tx;
+    assign io_oeb[0] = 1'b0;
+
+    assign can_rx = io_in[1];
+    assign io_oeb[1] = 1'b1;
 
     // IRQ
-    assign irq = 3'b000;	// Unused
+    assign irq = 3'b000;  // Unused
 
     // LA
-    assign la_data_out = {{(127-BITS){1'b0}}, count};
-    // Assuming LA probes [63:32] are for controlling the count register  
-    assign la_write = ~la_oenb[63:32] & ~{BITS{valid}};
-    // Assuming LA probes [65:64] are for controlling the count clk & reset  
-    assign clk = (~la_oenb[64]) ? la_data_in[64]: wb_clk_i;
-    assign rst = (~la_oenb[65]) ? la_data_in[65]: wb_rst_i;
+    assign la_data_out[127:96] = {(BITS){1'b0}};
+    assign la_data_out[63:32] = {(BITS){1'b0}};
+    assign la_data_out[31:0] = {(BITS){1'b0}};
 
-    counter #(
+    // assign la_data_out = {{(127-BITS){1'b0}}, count};
+    // Assuming LA probes [63:32] are for controlling the count register  
+    // assign la_write = ~la_oenb[63:32] & ~{BITS{valid}};
+    // Assuming LA probes [65:64] are for controlling the count clk & reset  
+    // assign clk = (~la_oenb[64]) ? la_data_in[64]: wb_clk_i;
+    // assign rst = (~la_oenb[65]) ? la_data_in[65]: wb_rst_i;
+
+    assign clk = wb_clk_i;
+    assign rst = wb_rst_i;
+
+    yonga_can_top #(
         .BITS(BITS)
-    ) counter(
+    ) yonga_can_top(
         .clk(clk),
-        .reset(rst),
+        .rst(rst),
+
         .ready(wbs_ack_o),
         .valid(valid),
+        
         .rdata(rdata),
         .wdata(wbs_dat_i),
         .wstrb(wstrb),
-        .la_write(la_write),
-        .la_input(la_data_in[63:32]),
+        
+        .device_reg_wr_en(la_data_in[5]),
+        .device_addr(la_data_in[4:0]),
+        .device_reg_wr_data(la_data_in[63:32]),
+        .device_reg_rd_data(la_data_out[95:64]),
+
+        .can_tx(can_tx),
+        .can_rx(can_rx),
+        
         .count(count)
     );
 
 endmodule
-
-module counter #(
-    parameter BITS = 32
-)(
-    input clk,
-    input reset,
-    input valid,
-    input [3:0] wstrb,
-    input [BITS-1:0] wdata,
-    input [BITS-1:0] la_write,
-    input [BITS-1:0] la_input,
-    output ready,
-    output [BITS-1:0] rdata,
-    output [BITS-1:0] count
-);
-    reg ready;
-    reg [BITS-1:0] count;
-    reg [BITS-1:0] rdata;
-
-    always @(posedge clk) begin
-        if (reset) begin
-            count <= 0;
-            ready <= 0;
-        end else begin
-            ready <= 1'b0;
-            if (~|la_write) begin
-                count <= count + 1;
-            end
-            if (valid && !ready) begin
-                ready <= 1'b1;
-                rdata <= count;
-                if (wstrb[0]) count[7:0]   <= wdata[7:0];
-                if (wstrb[1]) count[15:8]  <= wdata[15:8];
-                if (wstrb[2]) count[23:16] <= wdata[23:16];
-                if (wstrb[3]) count[31:24] <= wdata[31:24];
-            end else if (|la_write) begin
-                count <= la_write & la_input;
-            end
-        end
-    end
-
-endmodule
 `default_nettype wire
diff --git a/verilog/rtl/yonga_can_controller.v b/verilog/rtl/yonga_can_controller.v
new file mode 100644
index 0000000..a14bbc5
--- /dev/null
+++ b/verilog/rtl/yonga_can_controller.v
@@ -0,0 +1,253 @@
+// MIT License

+

+// Copyright (c) [2022] [Yonga Technology Microelectronics R&D]

+

+// Permission is hereby granted, free of charge, to any person obtaining a copy

+// of this software and associated documentation files (the "Software"), to deal

+// in the Software without restriction, including without limitation the rights

+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

+// copies of the Software, and to permit persons to whom the Software is

+// furnished to do so, subject to the following conditions:

+

+// The above copyright notice and this permission notice shall be included in all

+// copies or substantial portions of the Software.

+

+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

+// SOFTWARE.

+

+// DESCRIPTION

+

+// The yonga_can_controller module manages the operations in CAN peripheral

+

+module yonga_can_controller(

+    input	wire	i_controller_clk,

+    input  	wire 	i_controller_rst,

+

+	input  	wire 	i_pulse_gen_synced,

+    input  	wire 	i_packetizer_rdy,

+    input  	wire   	i_ack_slot,

+	output 	reg  	o_packetizer_en,

+    output 	reg  	o_pulse_gen_en,

+		

+	input  	wire 	i_packetizer_message_bit,

+	input  	wire   	i_message_bit,

+	output 	reg   	o_message_bit,

+

+	input  	wire	i_drive_pulse,

+	input  	wire	i_sample_pulse,

+

+	input  	wire	i_config_enable,

+	input  	wire	i_sys_ctrl_sts_send,

+	output 	reg 	[2:0] o_sts_code

+);

+

+	parameter STATE_RESET = 0, STATE_SYNC = 1, STATE_CHECK_IDLE = 2, STATE_DRIVE_DATA = 3, STATE_SAMPLE_DATA = 4, STATE_IFS = 5, STATE_ERROR = 6, STATE_EN_PACKETIZER = 7;

+	reg done_tx;

+  	reg [2:0] state_reg;

+	reg bit_transmitted;

+	reg [5:0] bitcounter_reg;

+	reg prev_bit_reg;

+	reg [3:0] consecutive_ones_reg;

+	reg [3:0] zeros_reg;

+	reg is_extended, is_standart;

+	reg is_idle;

+

+	always @(posedge i_controller_clk) begin

+  		if(i_controller_rst) begin

+      		state_reg <= STATE_RESET;

+      		o_packetizer_en <= 1'b0;

+      		o_pulse_gen_en <= 1'b0;

+			o_sts_code <= 3'b0;

+			o_message_bit <= 1'b1;

+			done_tx <= 1'b0;

+			bitcounter_reg <= 6'd0;

+			consecutive_ones_reg <= 4'd0;

+			is_standart <= 1'b1;

+			is_extended <= 1'b0;

+			zeros_reg <= 4'd0;

+			prev_bit_reg <= 1'b0;

+			is_idle <= 1'b0;

+    	end

+    	else begin

+      		case(state_reg)

+        		

+        		STATE_RESET: begin

+					o_sts_code <= 3'b0;

+					o_message_bit <= 1'b1;

+					done_tx <= 1'b0;

+					bitcounter_reg <= 6'd0;

+					is_standart <= 1'b1;

+					is_extended <= 1'b0;

+          			if((i_config_enable == 0) && (i_sys_ctrl_sts_send == 1)) begin

+            			state_reg <= STATE_SYNC;

+						o_pulse_gen_en <= 1'b1;

+					end

+          		end

+        		

+        		STATE_SYNC: begin

+          			if(i_pulse_gen_synced) begin

+                        state_reg <= STATE_CHECK_IDLE;

+          			end

+          		end

+				

+				STATE_CHECK_IDLE: begin

+				o_sts_code <= 3'b0;

+					if(i_sample_pulse) begin

+						if(~is_idle) begin

+							prev_bit_reg <= i_message_bit;

+							if(prev_bit_reg) begin

+								if(i_message_bit) begin

+									consecutive_ones_reg <= consecutive_ones_reg + 1;

+								end	

+								else begin

+									consecutive_ones_reg <= 4'd0;								

+								end

+								if(consecutive_ones_reg == 4'd9) begin

+									consecutive_ones_reg = 4'd0;

+									state_reg <= STATE_EN_PACKETIZER;

+									is_idle <= 1'b0;

+								end

+							end

+						end	

+						else begin

+							state_reg <= STATE_EN_PACKETIZER;

+							is_idle <= 1'b0;

+						end		

+					end

+				end	

+				

+				STATE_EN_PACKETIZER: begin

+				    o_packetizer_en <= 1'b1;

+				    if(i_drive_pulse == 1) begin

+				    state_reg <= STATE_DRIVE_DATA;

+					end	

+				end

+			

+				STATE_DRIVE_DATA: begin

+					if(i_drive_pulse == 1) begin

+

+						state_reg <= STATE_SAMPLE_DATA;

+						

+						if(bitcounter_reg == 13 && i_packetizer_message_bit == 0) begin

+						

+							is_standart <= 1'b1;	

+							is_extended <= 1'b0;

+					

+						end 

+						else if(bitcounter_reg == 13 && i_packetizer_message_bit == 1) begin

+					

+						    is_standart <= 1'b0;

+							is_extended <= 1'b1;	

+					

+						end

+		

+					    bit_transmitted <= i_packetizer_message_bit;

+					    o_message_bit <= i_packetizer_message_bit;					    

+					       	   						  	

+					end

+				end

+		

+				STATE_SAMPLE_DATA: begin

+					if(i_sample_pulse == 1) begin

+					   bitcounter_reg <= bitcounter_reg + 1;

+					   prev_bit_reg <= i_message_bit;

+						if(prev_bit_reg) begin

+							if(i_message_bit) begin

+								consecutive_ones_reg <= consecutive_ones_reg + 1;

+							end	

+							else begin

+								consecutive_ones_reg <= 4'd0;									

+							end

+						end										

+						if(bit_transmitted == i_message_bit) begin

+							if(i_ack_slot) begin

+								o_sts_code <= 3'h3;

+								bitcounter_reg <= 0;

+								o_packetizer_en <= 0;

+								state_reg <= STATE_IFS;

+							end

+							else if(i_packetizer_rdy) begin // EOF flag

+								o_packetizer_en <= 0;

+								bitcounter_reg <= 0;

+								state_reg <= STATE_IFS;

+							end

+							else begin

+								state_reg <= STATE_DRIVE_DATA;

+							end

+						end

+						else begin

+							if(i_ack_slot == 1) begin

+								o_sts_code <= 3'h1;

+								state_reg <= STATE_DRIVE_DATA;

+							end

+							else begin

+								if(is_standart) begin

+								

+									if(bitcounter_reg < 6'd14) begin // Why 14? SOF + 11 bit standart arbitration field + RTR.

+										o_sts_code <= 3'h2;

+										o_packetizer_en <= 0;				

+										state_reg <= STATE_CHECK_IDLE; // Sampled data and transmitted data does not match. Arbitration is lost to another node. STANDART FORMAT

+										bitcounter_reg <= 6'd0;

+									end

+									else begin

+										o_sts_code <= 3'h2;

+										o_packetizer_en <= 0;

+										bitcounter_reg <= 6'd0; // Sampled data and data on bus does not match. Bit error occured. Push eror frame to bus. 

+										state_reg <= STATE_ERROR;

+									end	

+								end

+								

+								if(is_extended) begin

+								

+									if(bitcounter_reg < 6'd34) begin // Why 34? SOF + 32 bit extended arbitration field.

+										o_sts_code <= 3'h2;

+										o_packetizer_en <= 0;			

+										state_reg <= STATE_CHECK_IDLE;	// Sampled data and transmitted data does not match. Arbitration is lost to another node. EXTENDED FORMAT

+										bitcounter_reg <= 6'd0;

+									end

+									else begin 

+										

+										o_sts_code <= 3'h2;

+										o_packetizer_en <= 0;

+										state_reg <= STATE_ERROR;	// Sampled data and data on bus does not match. Bit error occured. Push eror frame to bus. 

+										bitcounter_reg <= 6'd0;								

+										

+									end

+								end	

+							end

+						end

+					end

+				end

+		

+				STATE_IFS: begin

+		        if(i_drive_pulse == 1'b1) begin  

+					if(bitcounter_reg == 6'd2) begin		

+						bitcounter_reg <= 6'd0;

+						o_message_bit <= 1;

+						is_idle <= 1'b1;

+						consecutive_ones_reg <= consecutive_ones_reg + 1;

+						done_tx <= 1'b1;

+						state_reg <= STATE_RESET;

+					end

+					else begin	

+						state_reg <= STATE_IFS;

+						consecutive_ones_reg <= consecutive_ones_reg + 1;

+						o_message_bit <= 1;

+						bitcounter_reg <= bitcounter_reg + 1;

+					end		

+				end

+			end	

+				STATE_ERROR: begin

+					state_reg <= STATE_ERROR;

+				// FILL HERE 

+

+				end		

+			endcase

+    	end

+  	end

+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/yonga_can_packetizer.v b/verilog/rtl/yonga_can_packetizer.v
new file mode 100644
index 0000000..7e19b32
--- /dev/null
+++ b/verilog/rtl/yonga_can_packetizer.v
@@ -0,0 +1,2265 @@
+// MIT License

+

+// Copyright (c) [2022] [Yonga Technology Microelectronics R&D]

+

+// Permission is hereby granted, free of charge, to any person obtaining a copy

+// of this software and associated documentation files (the "Software"), to deal

+// in the Software without restriction, including without limitation the rights

+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

+// copies of the Software, and to permit persons to whom the Software is

+// furnished to do so, subject to the following conditions:

+

+// The above copyright notice and this permission notice shall be included in all

+// copies or substantial portions of the Software.

+

+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

+// SOFTWARE.

+

+// DESCRIPTION

+

+// The yonga_can_packetizer module forms a CAN frame in accordance with CAN 2.0B standard

+

+module yonga_can_packetizer(

+    input wire i_packetizer_clk,

+    input wire i_packetizer_rst,

+

+    input wire i_packetizer_en,

+		input wire i_drive_pulse,

+    input wire [11-1:0] i_packetizer_message_sid,

+    input wire i_packetizer_message_ide,

+    input wire i_packetizer_message_r0,

+	input wire i_packetizer_message_r1,

+	input wire i_packetizer_message_srr,

+    input wire [18-1:0] i_packetizer_message_eid,

+

+    input wire i_packetizer_message_rtr,

+    input wire [4-1:0] i_packetizer_message_dlc,

+

+    input wire [8-1:0] i_packetizer_message_data_byte_0,

+    input wire [8-1:0] i_packetizer_message_data_byte_1,

+    input wire [8-1:0] i_packetizer_message_data_byte_2,

+    input wire [8-1:0] i_packetizer_message_data_byte_3,

+    input wire [8-1:0] i_packetizer_message_data_byte_4,

+    input wire [8-1:0] i_packetizer_message_data_byte_5,

+    input wire [8-1:0] i_packetizer_message_data_byte_6,

+    input wire [8-1:0] i_packetizer_message_data_byte_7,

+

+    output wire o_packetizer_rdy,

+    input wire i_packetizer_req,

+

+		output reg o_packetizer_message_bit,

+		input wire i_packetizer_message_bit,

+		output reg o_ack_slot

+  );

+

+    // state registers

+    parameter STATE_IDLE = 0, STATE_SOF = 1 , STATE_SID = 2, STATE_RTR = 3, STATE_SRR = 4, STATE_IDE = 5, STATE_EID = 6,STATE_CTRL = 7,

+			STATE_DATA = 8, STATE_CRC = 9, STATE_ACK = 10, STATE_EOF = 11, STATE_IFS = 12;

+	

+	reg  [3:0] state_reg;

+	reg  [3:0] state_reg_previous; 

+  // data registers

+  reg [11-1:0] message_sid;

+  reg message_ide;

+  reg message_r0;

+  reg [18-1:0] message_eid;

+  reg message_rtr;

+  reg message_srr;  

+  reg [6-1:0] message_control;

+  reg [4-1:0] message_dlc;

+  reg [64-1:0] message_data;

+

+  // control and status registers

+  reg prev_bit_reg;

+  reg [7-1:0] bit_counter_reg;

+  reg stuff_bit_exception_reg;

+  reg [4-1:0] num_of_consec_ones_reg;

+  reg [4-1:0] num_of_consec_zeros_reg;

+  reg packetizer_rdy_reg;

+  wire stuff_bit_exception_negedge;

+  reg stuff_bit_exception_prev;

+

+  // CRC register

+  reg [14:0] crc_reg;

+  wire       next_bit;

+  wire       crc_valid;

+  reg crc_enable;

+  reg prev_drive;

+	wire negedge_drive;

+

+  assign next_bit  = state_reg != STATE_CRC ? o_packetizer_message_bit : 1'b0;

+  assign crc_valid = crc_enable & ~stuff_bit_exception_negedge;

+  assign negedge_drive = prev_drive & ~i_drive_pulse;

+  assign stuff_bit_exception_negedge = stuff_bit_exception_prev & ~stuff_bit_exception_reg;

+  always@(posedge i_packetizer_clk)

+  begin

+	prev_drive <= i_drive_pulse;

+    if(i_packetizer_rst == 1'b1)

+    begin

+      prev_bit_reg            <= 1'b0;

+      stuff_bit_exception_reg <= 1'b0;

+      num_of_consec_ones_reg  <= 4'b0;

+      num_of_consec_zeros_reg <= 4'b0;

+      bit_counter_reg         <= 7'b0;

+      packetizer_rdy_reg      <= 1'b0;

+      state_reg               <= STATE_IDLE;

+      crc_reg                 <= 15'b0; 

+		o_ack_slot   						<= 1'b0;

+		crc_enable <= 1'b0;

+		

+    end

+    else

+    begin

+	  stuff_bit_exception_prev <= stuff_bit_exception_reg;

+	  state_reg_previous <= state_reg;

+	  if(prev_drive) begin

+      if(crc_valid)

+      begin

+		//crc_next = next_bit ^ crc_reg[14];

+        crc_reg <= crc_reg << 1'b1;

+        if(next_bit ^ crc_reg[14])

+        begin

+          crc_reg <= (crc_reg<<1'b1) ^ 16'hC599;

+        end

+		//crc_reg = crc_reg & 16'h7FFF;

+      end

+	  end

+			if(i_drive_pulse) begin

+				case(state_reg)

+					STATE_IDLE:

+					begin

+						packetizer_rdy_reg <= 1'b0;

+						o_packetizer_message_bit <= 1'b1;

+						message_sid 	 <= i_packetizer_message_sid;

+						message_ide 	 <= i_packetizer_message_ide;

+						message_eid 	 <= i_packetizer_message_eid;

+						message_rtr 	 <= i_packetizer_message_rtr;

+						message_srr 	 <= i_packetizer_message_srr;

+						

+						message_data 	 <= {i_packetizer_message_data_byte_7,i_packetizer_message_data_byte_6, i_packetizer_message_data_byte_5, i_packetizer_message_data_byte_4, i_packetizer_message_data_byte_3, i_packetizer_message_data_byte_2, i_packetizer_message_data_byte_1, i_packetizer_message_data_byte_0};

+						if(i_packetizer_message_ide==1)

+						begin

+							message_control  <= {i_packetizer_message_r1, i_packetizer_message_r0, i_packetizer_message_dlc};

+						end

+						else

+						begin

+							message_control  <= {i_packetizer_message_ide, i_packetizer_message_r0, i_packetizer_message_dlc};

+						end

+						crc_reg <= 15'b0;

+						

+						if(i_packetizer_message_dlc >= 4'd8 )

+						begin

+							message_dlc <= 4'd8;

+						end

+						else

+						begin

+							message_dlc <= i_packetizer_message_dlc;

+						end

+						//if(i_packetizer_en)

+						//begin

+							state_reg 		 <= STATE_SOF;

+							crc_enable <= 1'b0;

+								

+								//prev_bit_reg <= 1'b0;

+								

+						//end

+					end

+	

+					STATE_SOF :

+					begin

+						

+						if(i_packetizer_en == 0)

+							state_reg <= STATE_IDLE;

+						else begin

+						o_packetizer_message_bit <= 1'b0;

+						// start counting bit levels - this is needed to inject stuff bits into bitstream

+						prev_bit_reg <= 1'b0;

+						num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+						crc_enable <= 1'b1;

+						state_reg <= STATE_SID;

+							

+						end

+						

+					end

+	

+					STATE_SID :

+					begin

+						if(stuff_bit_exception_reg)

+						begin

+							o_packetizer_message_bit <= ~message_sid[10];

+							crc_enable <= 1'b1;

+							prev_bit_reg <= ~message_sid[10];			

+				

+							// shift message_sid register left by 1-bit

+							message_sid <= message_sid << 1'b1;

+	

+							// reset stuff_bit_exception_reg

+							stuff_bit_exception_reg <= 1'b0;

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else if(bit_counter_reg == 7'd10)

+							begin

+								bit_counter_reg <= 7'd0;

+								if(message_ide==1)

+									state_reg <= STATE_SRR;

+								else

+									state_reg <= STATE_RTR;

+							end

+							else

+							begin

+							// increment bit counter

+								bit_counter_reg <= bit_counter_reg + 1'b1;

+								state_reg <= STATE_SID;

+							end

+						end

+						else

+						begin

+							// check possible stuff condition

+							if(prev_bit_reg == message_sid[10])

+							begin

+								if(message_sid[10] == 1'b1)

+								begin

+									o_packetizer_message_bit <= message_sid[10];

+									crc_enable <= 1'b1;

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_sid[10];

+						

+									if(num_of_consec_ones_reg == 4'd3 && message_sid[10] == 1'b1)

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+										//message_sid <= message_sid << 1'b1;

+										// reset num_of_consec_ones_reg

+										num_of_consec_ones_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_ones_reg

+										num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+										// shift message_sid register left by 1-bit

+										message_sid <= message_sid << 1'b1;

+	

+										// check if the current bit sent is the last bit of SID field

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else if(bit_counter_reg == 7'd10)

+										begin

+											bit_counter_reg <= 7'd0;

+											if(message_ide==1)

+												state_reg <= STATE_SRR;

+											else

+												state_reg <= STATE_RTR;

+										end

+										else

+										begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_SID;

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_sid[10];

+									crc_enable <= 1'b1;

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_sid[10];

+	

+									if(num_of_consec_zeros_reg == 4'd3 && message_sid[10] == 1'b0)

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+	

+										// reset num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+										// shift message_sid register left by 1-bit

+										message_sid <= message_sid << 1'b1;

+	

+										// check if the current bit sent is the last bit of SID field

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else if(bit_counter_reg == 7'd10)

+										begin

+											bit_counter_reg <= 7'd0;

+											if(message_ide==1)

+												state_reg <= STATE_SRR;

+											else

+												state_reg <= STATE_RTR;

+										end

+										else

+										begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_SID;

+										end

+									end

+								end

+							end

+							else

+							begin

+								o_packetizer_message_bit <= message_sid[10];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_sid <= message_sid << 1'b1;

+	

+								// set next value of prev_bit_reg

+								prev_bit_reg <= message_sid[10];

+	

+								// check if the current bit sent is the last bit of SID field

+								if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd10)

+								begin

+									bit_counter_reg <= 7'd0;

+									if(message_ide==1)

+										state_reg <= STATE_SRR;

+									else

+										state_reg <= STATE_RTR;

+								end

+								else begin

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_SID;

+								end

+	

+								// reset stuff condition detect counters

+								num_of_consec_zeros_reg <= 4'd0;

+								num_of_consec_ones_reg <= 4'd0;

+							end

+						end

+					end

+	

+					STATE_RTR :

+					begin

+						if(stuff_bit_exception_reg)

+						begin

+							o_packetizer_message_bit <= ~message_rtr;

+							crc_enable <= 1'b1;

+							prev_bit_reg <= ~message_rtr;

+	

+							// reset stuff_bit_exception_reg

+							stuff_bit_exception_reg <= 1'b0;

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else

+								state_reg <= STATE_CTRL;

+						end

+						else

+						begin

+							if(prev_bit_reg == message_rtr)

+							begin

+								if(message_rtr == 1'b1)

+								begin

+									o_packetizer_message_bit <= message_rtr;

+									crc_enable <= 1'b1;

+									prev_bit_reg <= message_rtr;

+	

+									if(num_of_consec_ones_reg == 4'd3 && message_rtr == 1'b1)

+									begin

+										stuff_bit_exception_reg <= 1'b1;

+										num_of_consec_ones_reg <= 4'd0;

+									end

+									else

+									begin

+										num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else

+											state_reg <= STATE_CTRL;

+									end

+	

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_rtr;

+									crc_enable <= 1'b1;

+									prev_bit_reg <= message_rtr;

+	

+									if(num_of_consec_zeros_reg == 4'd3 && message_rtr == 1'b0)

+									begin

+										stuff_bit_exception_reg <= 1'b1;

+										num_of_consec_zeros_reg <= 4'd0;

+									end

+									else

+									begin

+										num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else

+											state_reg <= STATE_CTRL;

+									end

+								end

+							end

+							else

+							begin

+								o_packetizer_message_bit <= message_rtr;

+								crc_enable <= 1'b1;

+								prev_bit_reg <= message_rtr;

+	

+								// reset stuff condition detect counters

+								num_of_consec_zeros_reg <= 4'd0;

+								num_of_consec_ones_reg  <= 4'd0;

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;

+								else

+									state_reg <= STATE_CTRL;

+							end

+						end

+					end

+					

+					STATE_SRR :

+					begin

+						if(stuff_bit_exception_reg)

+						begin

+							o_packetizer_message_bit <= ~message_srr;

+							crc_enable <= 1'b1;

+							prev_bit_reg <= ~message_srr;

+	

+							// reset stuff_bit_exception_reg

+							stuff_bit_exception_reg <= 1'b0;

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else

+								state_reg <= STATE_IDE;

+						end

+						else

+						begin

+							if(prev_bit_reg == message_srr)

+							begin

+								if(message_srr == 1'b1)

+								begin

+									o_packetizer_message_bit <= message_srr;

+									crc_enable <= 1'b1;

+									prev_bit_reg <= message_srr;

+	

+									if(num_of_consec_ones_reg == 4'd3 && message_srr == 1'b1)

+									begin

+										stuff_bit_exception_reg <= 1'b1;

+										num_of_consec_ones_reg <= 4'd0;

+									end

+									else

+									begin

+										num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else

+											state_reg <= STATE_IDE;

+									end

+	

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_srr;

+									crc_enable <= 1'b1;

+									prev_bit_reg <= message_srr;

+	

+									if(num_of_consec_zeros_reg == 4'd3 && message_srr == 1'b0)

+									begin

+										stuff_bit_exception_reg <= 1'b1;

+										num_of_consec_zeros_reg <= 4'd0;

+									end

+									else

+									begin

+										num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else

+											state_reg <= STATE_IDE;

+									end

+								end

+							end

+							else

+							begin

+								o_packetizer_message_bit <= message_srr;

+								crc_enable <= 1'b1;

+								prev_bit_reg <= message_srr;

+	

+								// reset stuff condition detect counters

+								num_of_consec_zeros_reg <= 4'd0;

+								num_of_consec_ones_reg  <= 4'd0;

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;

+								else

+									state_reg <= STATE_IDE;

+							end

+						end

+					end

+					STATE_IDE :

+					begin

+						if(stuff_bit_exception_reg)

+						begin

+							o_packetizer_message_bit <= ~message_ide;

+							crc_enable <= 1'b1;

+							prev_bit_reg <= ~message_ide;

+	

+							// reset stuff_bit_exception_reg

+							stuff_bit_exception_reg <= 1'b0;

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else

+								state_reg <= STATE_EID;

+						end

+						else

+						begin

+							if(prev_bit_reg == message_ide)

+							begin

+								if(message_ide == 1'b1)

+								begin

+									o_packetizer_message_bit <= message_ide;

+									crc_enable <= 1'b1;

+									prev_bit_reg <= message_ide;

+	

+									if(num_of_consec_ones_reg == 4'd3 && message_ide == 1'b1)

+									begin

+										stuff_bit_exception_reg <= 1'b1;

+										num_of_consec_ones_reg <= 4'd0;

+									end

+									else

+									begin

+										num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else

+											state_reg <= STATE_EID;

+									end

+	

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_ide;

+									crc_enable <= 1'b1;

+									prev_bit_reg <= message_ide;

+	

+									if(num_of_consec_zeros_reg == 4'd3 && message_ide == 1'b0)

+									begin

+										stuff_bit_exception_reg <= 1'b1;

+										num_of_consec_zeros_reg <= 4'd0;

+									end

+									else

+									begin

+										num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else

+											state_reg <= STATE_EID;

+									end

+								end

+							end

+							else

+							begin

+								o_packetizer_message_bit <= message_ide;

+								crc_enable <= 1'b1;

+								prev_bit_reg <= message_ide;

+	

+								// reset stuff condition detect counters

+								num_of_consec_zeros_reg <= 4'd0;

+								num_of_consec_ones_reg  <= 4'd0;

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;

+								else

+									state_reg <= STATE_EID;

+							end

+						end

+					end

+					

+					STATE_EID :

+					begin

+						if(stuff_bit_exception_reg)

+						begin

+							o_packetizer_message_bit <= ~message_eid[17];

+							crc_enable <= 1'b1;

+							prev_bit_reg <= ~message_eid[17];			

+				

+							// shift message_eid register left by 1-bit

+							message_eid <= message_eid << 1'b1;

+	

+							// reset stuff_bit_exception_reg

+							stuff_bit_exception_reg <= 1'b0;

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else if(bit_counter_reg == 7'd17)

+							begin

+								bit_counter_reg <= 7'd0;

+								state_reg <= STATE_RTR;

+							end

+							else

+							begin

+							// increment bit counter

+								bit_counter_reg <= bit_counter_reg + 1'b1;

+								state_reg <= STATE_EID;

+							end

+						end

+						else

+						begin

+							// check possible stuff condition

+							if(prev_bit_reg == message_eid[17])

+							begin

+								if(message_eid[17] == 1'b1)

+								begin

+									o_packetizer_message_bit <= message_eid[17];

+									crc_enable <= 1'b1;

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_eid[17];

+						

+									if(num_of_consec_ones_reg == 4'd3 && message_eid[17] == 1'b1)

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+										//message_sid <= message_sid << 1'b1;

+										// reset num_of_consec_ones_reg

+										num_of_consec_ones_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_ones_reg

+										num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+										// shift message_eid register left by 1-bit

+										message_eid <= message_eid << 1'b1;

+	

+										// check if the current bit sent is the last bit of SID field

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else if(bit_counter_reg == 7'd17)

+										begin

+											bit_counter_reg <= 7'd0;

+											state_reg <= STATE_RTR;

+										end

+										else

+										begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_EID;

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_eid[17];

+									crc_enable <= 1'b1;

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_eid[17];

+	

+									if(num_of_consec_zeros_reg == 4'd3 && message_eid[17] == 1'b0)

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+	

+										// reset num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+										// shift message_eid register left by 1-bit

+										message_eid <= message_eid << 1'b1;

+	

+										// check if the current bit sent is the last bit of SID field

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else if(bit_counter_reg == 7'd17)

+										begin

+											bit_counter_reg <= 7'd0;

+											state_reg <= STATE_RTR;

+										end

+										else

+										begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_EID;

+										end

+									end

+								end

+							end

+							else

+							begin

+								o_packetizer_message_bit <= message_eid[17];

+								crc_enable <= 1'b1;

+								// shift message_eid register left by 1-bit

+								message_eid <= message_eid << 1'b1;

+	

+								// set next value of prev_bit_reg

+								prev_bit_reg <= message_eid[17];

+	

+								// check if the current bit sent is the last bit of SID field

+								if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd17)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_RTR;

+								end

+								else begin

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_EID;

+								end

+	

+								// reset stuff condition detect counters

+								num_of_consec_zeros_reg <= 4'd0;

+								num_of_consec_ones_reg <= 4'd0;

+							end

+						end

+					end

+	

+					STATE_CTRL:

+					begin

+						if(stuff_bit_exception_reg)

+						begin			

+							o_packetizer_message_bit <= ~message_control[5];

+							crc_enable <= 1'b1;

+							// shift message control register left by 1-bit

+							message_control <= message_control << 1'b1;

+							

+							// reset stuff_bit_exception_reg

+							stuff_bit_exception_reg <= 1'b0;

+							prev_bit_reg <= ~message_control[5];

+							

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else if(bit_counter_reg == 7'd5)

+							begin

+								bit_counter_reg <= 7'd0;

+								if(message_rtr)

+								begin

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									state_reg <= STATE_DATA;

+								end

+							end

+							else 

+							begin

+								// increment bit counter

+								bit_counter_reg <= bit_counter_reg + 1'b1;

+								state_reg <= STATE_CTRL;

+								//end		

+							end

+						end

+				

+						else

+						begin

+							// check possible stuff condition

+							if(prev_bit_reg == message_control[5])

+							begin

+								if(message_control[5] == 1'b1)

+								begin

+									o_packetizer_message_bit <= message_control[5];

+									crc_enable <= 1'b1;

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_control[5];

+	

+									if(num_of_consec_ones_reg == 4'd3  && message_control[5] == 1'b1)

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+										// reset num_of_consec_ones_reg

+										num_of_consec_ones_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_ones_reg

+										num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+										// shift message_control register left by 1-bit

+										message_control <= message_control << 1'b1;

+	

+										// check if the current bit sent is the last bit of message_control field

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else if(bit_counter_reg == 7'd5)

+										begin

+											bit_counter_reg <= 7'd0;

+											if(message_rtr)

+											begin

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												state_reg <= STATE_DATA;

+											end

+										end

+										else begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_CTRL;

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_control[5];

+									crc_enable <= 1'b1;

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_control[5];

+	

+									if(num_of_consec_zeros_reg == 4'd3 && message_control[5] == 1'b0) 

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+										// reset num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+										// shift message_sid register left by 1-bit

+										message_control <= message_control << 1'b1;

+	

+										// check if the current bit sent is the last bit of SID field

+										if(i_packetizer_en == 0)	

+											state_reg <= STATE_IDLE;	

+										else if(bit_counter_reg == 7'd5)

+										begin

+											bit_counter_reg <= 7'd0;

+											if(message_rtr)

+											begin

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												state_reg <= STATE_DATA;

+											end

+										end

+										else

+										begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_CTRL;

+										end

+									end

+								end

+							end

+							else

+							begin

+								o_packetizer_message_bit <= message_control[5];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_control <= message_control << 1'b1;

+	

+								// set next value of prev_bit_reg

+								prev_bit_reg <= message_control[5];

+	

+								// check if the current bit sent is the last bit of SID field

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;							

+								else if(bit_counter_reg == 7'd5)

+								begin

+									bit_counter_reg <= 7'd0;

+									if(message_rtr)

+									begin

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										state_reg <= STATE_DATA;

+									end

+								end

+								else

+								begin

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_CTRL;

+								end

+	

+								// reset stuff condition detect counters

+								num_of_consec_zeros_reg <= 4'd0;

+								num_of_consec_ones_reg <= 4'd0;

+							end

+						end

+					end

+	

+					STATE_DATA:

+					begin

+						if(message_dlc == 'd0)

+						begin

+							//message_data <= null;

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else

+								state_reg <= STATE_CRC;

+						end

+	

+	

+						else if(message_dlc == 'd1)

+						begin

+							if(stuff_bit_exception_reg)

+							begin

+								o_packetizer_message_bit <= ~message_data[7];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+					

+								prev_bit_reg <= ~message_data[7];

+	

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd7)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[7])

+								begin

+									if(message_data[7] == 1'b1)

+									begin

+										o_packetizer_message_bit <= message_data[7];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[7];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[7] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd7)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[7];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[7];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[7] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd7)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_data[7];

+									crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[7];

+	

+									// check if the current bit sent is the last bit of SID field

+									

+									if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd7)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end            

+						end

+	

+	

+						else if(message_dlc == 'd2)

+						begin

+	

+							if(stuff_bit_exception_reg)

+							begin

+								o_packetizer_message_bit <= ~message_data[15];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+								prev_bit_reg <= ~message_data[15];

+								

+								if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd15)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end			  

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[15])

+								begin

+									if(message_data[15] == 1'b1)

+									begin

+										o_packetizer_message_bit <= message_data[15];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[15];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[15] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;										

+											else if (bit_counter_reg == 7'd16)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[15];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[15];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[15] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd15)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_data[15];

+									crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[15];

+	

+									// check if the current bit sent is the last bit of SID field

+									if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd15)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+	

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end

+	

+						end

+	

+	

+						else if(message_dlc == 'd3)

+						begin

+	

+							if(stuff_bit_exception_reg)

+							begin

+								o_packetizer_message_bit <= ~message_data[23];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+					

+								prev_bit_reg <= ~message_data[23];

+	

+								if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd23)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end			  

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[23])

+								begin

+									if(message_data[23] == 1'b1)

+									begin

+										o_packetizer_message_bit <= message_data[23];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[23];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[23] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd23)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[23];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[23];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[23] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd23)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_data[23];

+									crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[23];

+	

+									// check if the current bit sent is the last bit of SID field

+									if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd23)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+	

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end

+	

+						end

+	

+	

+						else if(message_dlc == 'd4)

+						begin

+	

+							if(stuff_bit_exception_reg)

+							begin

+								o_packetizer_message_bit <= ~message_data[31];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+					

+								prev_bit_reg <= ~message_data[31];

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd31)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end			  

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[31])

+								begin

+									if(message_data[31] == 1'b1)

+									begin

+										// push next SID bit into FIFO

+										o_packetizer_message_bit <= message_data[31];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[31];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[31] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd31)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[31];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[31];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[31] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd31)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									// push next SID bit into FIFO

+								o_packetizer_message_bit <= message_data[31];

+								crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[31];

+	

+									// check if the current bit sent is the last bit of SID field

+									if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd31)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+	

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end

+	

+						end

+	

+	

+						else if(message_dlc == 'd5)

+						begin

+	

+							if(stuff_bit_exception_reg)

+							begin

+								// push stuff bit into FIFO

+								o_packetizer_message_bit <= ~message_data[39];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+								prev_bit_reg <= ~message_data[39];

+	

+								if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;	

+								else if(bit_counter_reg == 7'd39)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end			  

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[39])

+								begin

+									if(message_data[39] == 1'b1)

+									begin

+										// push next SID bit into FIFO

+										o_packetizer_message_bit <= message_data[39];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[39];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[39] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd39)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[39];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[39];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[39] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd39)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									// push next SID bit into FIFO

+									o_packetizer_message_bit <= message_data[39];

+									crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[39];

+	

+									// check if the current bit sent is the last bit of SID field

+									if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd39)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+	

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end

+	

+						end

+	

+	

+						else if(message_dlc == 'd6)

+						begin

+	

+							if(stuff_bit_exception_reg)

+							begin

+								// push stuff bit into FIFO

+								o_packetizer_message_bit <= ~message_data[47];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+								prev_bit_reg <= ~message_data[47];

+								

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd47)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end			  

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[47])

+								begin

+									if(message_data[47] == 1'b1)

+									begin

+										// push next SID bit into FIFO

+										o_packetizer_message_bit <= message_data[47];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[47];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[47] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd47)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[47];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[47];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[47] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd47)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									// push next SID bit into FIFO

+									o_packetizer_message_bit <= message_data[47];

+									crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[47];

+	

+									// check if the current bit sent is the last bit of SID field

+									if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd47)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+	

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end

+	

+						end

+	

+	

+						else if(message_dlc == 'd7)

+						begin

+	

+							if(stuff_bit_exception_reg)

+							begin

+								// push stuff bit into FIFO

+								o_packetizer_message_bit <= ~message_data[55];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+								prev_bit_reg <= ~message_data[55];

+	

+								if(i_packetizer_en == 0)

+									state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd55)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end			  

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[55])

+								begin

+									if(message_data[55] == 1'b1)

+									begin

+										// push next SID bit into FIFO

+										o_packetizer_message_bit <= message_data[55];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[55];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[55] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd55)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[55];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[55];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[55] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+												state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd55)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									// push next SID bit into FIFO

+									o_packetizer_message_bit <= message_data[55];

+									crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[55];

+	

+									// check if the current bit sent is the last bit of SID field

+									if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd55)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+	

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end

+	

+						end

+	

+	

+						else

+						begin

+	

+							if(stuff_bit_exception_reg)

+							begin

+								o_packetizer_message_bit <= ~message_data[63];

+								crc_enable <= 1'b1;

+								// shift message_sid register left by 1-bit

+								message_data <= message_data << 1'b1;

+	

+								// reset stuff_bit_exception_reg

+								stuff_bit_exception_reg <= 1'b0;

+								prev_bit_reg <= ~message_data[63];

+								

+								if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd63)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_CRC;

+								end

+								else

+								begin

+									// increment bit counter

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_DATA;

+								end			  

+							end

+							else

+							begin

+								// check possible stuff condition

+								if(prev_bit_reg == message_data[63])

+								begin

+									if(message_data[63] == 1'b1)

+									begin

+										o_packetizer_message_bit <= message_data[63];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[63];

+	

+										if(num_of_consec_ones_reg == 4'd3 && message_data[63] == 1'b1)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_ones_reg

+											num_of_consec_ones_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_ones_reg

+											num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd63)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+									else

+									begin

+										o_packetizer_message_bit <= message_data[63];

+										crc_enable <= 1'b1;

+										// set next value of prev_bit_reg

+										prev_bit_reg <= message_data[63];

+	

+										if(num_of_consec_zeros_reg == 4'd3 && message_data[63] == 1'b0)

+										begin

+											// stuff condition occurs

+											stuff_bit_exception_reg <= 1'b1;

+	

+											// reset num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= 4'd0;

+										end

+										else

+										begin

+											// increment num_of_consec_zeros_reg

+											num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+											// shift message_sid register left by 1-bit

+											message_data <= message_data << 1'b1;

+	

+											// check if the current bit sent is the last bit of SID field

+											if(i_packetizer_en == 0)

+													state_reg <= STATE_IDLE;

+											else if(bit_counter_reg == 7'd63)

+											begin

+												bit_counter_reg <= 7'd0;

+												state_reg <= STATE_CRC;

+											end

+											else

+											begin

+												// increment bit counter

+												bit_counter_reg <= bit_counter_reg + 1'b1;

+												state_reg <= STATE_DATA;

+											end

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= message_data[63];

+									crc_enable <= 1'b1;

+									// shift message_sid register left by 1-bit

+									message_data <= message_data << 1'b1;

+	

+									// set next value of prev_bit_reg

+									prev_bit_reg <= message_data[63];

+	

+									// check if the current bit sent is the last bit of SID field

+									if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+									else if(bit_counter_reg == 7'd63)

+									begin

+										bit_counter_reg <= 7'd0;

+										state_reg <= STATE_CRC;

+									end

+									else

+									begin

+										bit_counter_reg <= bit_counter_reg + 1'b1;

+										state_reg <= STATE_DATA;

+									end

+	

+									// reset stuff condition detect counters

+									num_of_consec_zeros_reg <= 4'd0;

+									num_of_consec_ones_reg <= 4'd0;

+								end

+							end

+						end

+					end

+	

+					STATE_CRC :

+					begin

+					crc_enable <= 1'b0;

+						

+						if(stuff_bit_exception_reg)

+						begin

+							o_packetizer_message_bit <= ~crc_reg[14];

+							prev_bit_reg <= ~crc_reg[14];			

+				

+							// shift crc_reg register left by 1-bit

+							crc_reg <= crc_reg << 1'b1;

+	

+							// reset stuff_bit_exception_reg

+							stuff_bit_exception_reg <= 1'b0;

+							if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+							else if(bit_counter_reg == 7'd14)

+							begin

+								//o_packetizer_message_bit <= 1'b1;

+								bit_counter_reg <= 7'd0;

+								state_reg <= STATE_ACK;

+							end

+							else

+							begin

+							// increment bit counter

+								bit_counter_reg <= bit_counter_reg + 1'b1;

+								state_reg <= STATE_CRC;

+							end

+						end

+						else

+						begin

+						if(bit_counter_reg == 7'd14)

+						begin

+							o_packetizer_message_bit <= 1'b1;	

+						end

+							// check possible stuff condition

+							if(prev_bit_reg == crc_reg[14])

+							begin

+								if(crc_reg[14] == 1'b1)

+								begin

+									o_packetizer_message_bit <= crc_reg[14];

+									// set next value of prev_bit_reg

+									prev_bit_reg <= crc_reg[14];

+						

+									if(num_of_consec_ones_reg == 4'd3 && crc_reg[14] == 1'b1)

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+										//message_sid <= message_sid << 1'b1;

+										// reset num_of_consec_ones_reg

+										num_of_consec_ones_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_ones_reg

+										num_of_consec_ones_reg <= num_of_consec_ones_reg + 1'b1;

+	

+										// shift message_sid register left by 1-bit

+										crc_reg <= crc_reg << 1'b1;

+	

+										// check if the current bit sent is the last bit of SID field

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else if(bit_counter_reg == 7'd14)

+										begin

+											bit_counter_reg <= 7'd0;

+											state_reg <= STATE_ACK;

+										end

+										else

+										begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_CRC;

+										end

+									end

+								end

+								else

+								begin

+									o_packetizer_message_bit <= crc_reg[14];

+									// set next value of prev_bit_reg

+									prev_bit_reg <= crc_reg[14];

+	

+									if(num_of_consec_zeros_reg == 4'd3 && crc_reg[14] == 1'b0)

+									begin

+										// stuff condition occurs

+										stuff_bit_exception_reg <= 1'b1;

+	

+										// reset num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= 4'd0;

+									end

+									else

+									begin

+										// increment num_of_consec_zeros_reg

+										num_of_consec_zeros_reg <= num_of_consec_zeros_reg + 1'b1;

+	

+										// shift message_sid register left by 1-bit

+										crc_reg <= crc_reg << 1'b1;

+	

+										// check if the current bit sent is the last bit of SID field

+										if(i_packetizer_en == 0)

+											state_reg <= STATE_IDLE;

+										else if(bit_counter_reg == 7'd14)

+										begin

+											bit_counter_reg <= 7'd0;

+											state_reg <= STATE_ACK;

+										end

+										else

+										begin

+											// increment bit counter

+											bit_counter_reg <= bit_counter_reg + 1'b1;

+											state_reg <= STATE_CRC;

+										end

+									end

+								end

+							end

+							else

+							begin

+								o_packetizer_message_bit <= crc_reg[14];

+								// shift message_sid register left by 1-bit

+								crc_reg <= crc_reg << 1'b1;

+	

+								// set next value of prev_bit_reg

+								prev_bit_reg <= crc_reg[14];

+	

+								// check if the current bit sent is the last bit of SID field

+								if(i_packetizer_en == 0)

+										state_reg <= STATE_IDLE;

+								else if(bit_counter_reg == 7'd14)

+								begin

+									bit_counter_reg <= 7'd0;

+									state_reg <= STATE_ACK;

+								end

+								else begin

+									bit_counter_reg <= bit_counter_reg + 1'b1;

+									state_reg <= STATE_CRC;

+								end

+	

+								// reset stuff condition detect counters

+								num_of_consec_zeros_reg <= 4'd0;

+								num_of_consec_ones_reg <= 4'd0;

+							end

+						end

+					end

+					STATE_ACK :

+					begin

+						if(bit_counter_reg == 7'd0)

+						begin

+							o_packetizer_message_bit <= 1'b1;

+							

+						end

+						else

+						begin

+							o_packetizer_message_bit <= 1'b1;

+						end

+						// check if the current bit sent is the last bit of SID field

+						if(i_packetizer_en == 0)

+								state_reg <= STATE_IDLE;

+						else if(bit_counter_reg == 7'd1)

+						begin

+							bit_counter_reg <= 7'd0;

+							state_reg <= STATE_EOF;

+							o_ack_slot <= 1'b1;

+						end

+						else

+						begin

+							state_reg <= STATE_ACK;

+							bit_counter_reg <= bit_counter_reg + 1'b1;

+						end

+					end

+	

+					STATE_EOF :

+					begin

+					o_ack_slot <= 1'b0;

+						o_packetizer_message_bit <= 1'b1;

+							

+						if(i_packetizer_en == 0)

+							state_reg <= STATE_IDLE;

+						else if(bit_counter_reg == 7'd6)

+						begin

+							bit_counter_reg <= 7'd0;

+							state_reg <= STATE_IDLE;

+							packetizer_rdy_reg <= 1'b1;

+						end

+						else

+						begin

+							state_reg <= STATE_EOF;

+							bit_counter_reg <= bit_counter_reg + 1'b1;

+						end

+					end

+			

+				endcase

+			end

+		end

+  end

+

+  assign o_packetizer_rdy = packetizer_rdy_reg;

+endmodule

diff --git a/verilog/rtl/yonga_can_pulse_gen.v b/verilog/rtl/yonga_can_pulse_gen.v
new file mode 100644
index 0000000..f807780
--- /dev/null
+++ b/verilog/rtl/yonga_can_pulse_gen.v
@@ -0,0 +1,128 @@
+`timescale 1ns / 1ps
+// MIT License
+
+// Copyright (c) [2022] [Yonga Technology Microelectronics R&D]
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// DESCRIPTION
+
+// The yonga_can_pulse_gen module generates appropriate bit synchronization signals
+// with respect to a particular bit rate
+
+`define NUM_OF_QUANTUM_BITS 9
+
+module yonga_can_pulse_gen(
+    input wire i_pulse_gen_clk,
+    input wire i_pulse_gen_rst,
+
+    input wire i_pulse_gen_config_en,
+
+    input wire [`NUM_OF_QUANTUM_BITS-1:0] i_pulse_gen_prescaler_val,
+    input wire [`NUM_OF_QUANTUM_BITS-1:0] i_pulse_gen_phase_seg1_time_quanta_val,
+    input wire [`NUM_OF_QUANTUM_BITS-1:0] i_pulse_gen_phase_seg2_time_quanta_val,
+
+    output wire o_pulse_gen_synced,
+
+    output wire o_pulse_gen_drive_pulse,
+    output wire o_pulse_gen_sample_pulse
+ );
+
+    // typedef enum {STATE_RESET, STATE_SYNC_SEG, STATE_PROP_SEG, STATE_PHASE_SEG1, STATE_PHASE_SEG2} state_t;
+    parameter STATE_RESET = 0, STATE_SYNC_SEG = 1, STATE_PROP_SEG = 2, STATE_PHASE_SEG1 = 3, STATE_PHASE_SEG2 = 4;
+
+    // state register
+    // reg [NUM_OF_STATE_BITS-1:0] state_reg;
+    reg [3:0] state_reg;
+
+    // timing registers
+    reg [`NUM_OF_QUANTUM_BITS-1:0] nom_time_qtm_reg;
+    reg [`NUM_OF_QUANTUM_BITS-1:0] qtm_counter_reg;
+    reg [`NUM_OF_QUANTUM_BITS-1:0] phase_seg1_counter_reg;
+    reg [`NUM_OF_QUANTUM_BITS-1:0] phase_seg2_counter_reg;
+
+    // status registers
+    reg sync_reg;
+    reg drive_pulse_reg;
+    reg sample_pulse_reg;
+
+    always@(posedge i_pulse_gen_clk) begin
+        if(i_pulse_gen_rst == 1'b1) begin
+            nom_time_qtm_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+            qtm_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+            phase_seg1_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+            phase_seg2_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+            sync_reg <= 1'b0;
+            drive_pulse_reg <= 1'b0;
+            sample_pulse_reg <= 1'b0;
+            state_reg <= STATE_RESET;
+        end
+        else begin
+            case(state_reg)
+                STATE_RESET: begin
+                    if(i_pulse_gen_config_en) begin
+                        nom_time_qtm_reg <= i_pulse_gen_prescaler_val; // assume that MINIMUM TIME QUANTUM equals 1
+                        state_reg <= STATE_SYNC_SEG;
+                    end
+                end
+                STATE_SYNC_SEG: begin
+                    qtm_counter_reg <= qtm_counter_reg + 1'b1;
+                    if(qtm_counter_reg == nom_time_qtm_reg) begin
+                        qtm_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+                        drive_pulse_reg <= 1'b1;
+                        state_reg <= STATE_PHASE_SEG1;
+                    end
+                end
+                // STATE_PROP_SEG: begin
+                // end
+                STATE_PHASE_SEG1: begin
+                    drive_pulse_reg <= 1'b0;
+                    qtm_counter_reg <= qtm_counter_reg + 1'b1;
+                    if(qtm_counter_reg == nom_time_qtm_reg) begin
+                        qtm_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+                        phase_seg1_counter_reg <= phase_seg1_counter_reg + 1'b1;
+                        if(phase_seg1_counter_reg == i_pulse_gen_phase_seg1_time_quanta_val) begin
+                            phase_seg1_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+                            sample_pulse_reg <= 1'b1;
+                            state_reg <= STATE_PHASE_SEG2;
+                        end
+                    end
+                end
+                STATE_PHASE_SEG2: begin
+                    sample_pulse_reg <= 1'b0;
+                    qtm_counter_reg <= qtm_counter_reg + 1'b1;
+                    if(qtm_counter_reg == nom_time_qtm_reg) begin
+                        qtm_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+                        phase_seg2_counter_reg <= phase_seg2_counter_reg + 1'b1;
+                        if(phase_seg2_counter_reg == i_pulse_gen_phase_seg2_time_quanta_val) begin
+                            phase_seg2_counter_reg <= {`NUM_OF_QUANTUM_BITS{1'b0}};
+                            sync_reg <= 1'b1;
+                            state_reg <= STATE_SYNC_SEG;
+                        end
+                    end
+                end
+            endcase
+        end
+    end
+
+    assign o_pulse_gen_synced = sync_reg;
+    assign o_pulse_gen_drive_pulse = drive_pulse_reg;
+    assign o_pulse_gen_sample_pulse = sample_pulse_reg;
+
+endmodule
diff --git a/verilog/rtl/yonga_can_top.v b/verilog/rtl/yonga_can_top.v
new file mode 100644
index 0000000..b22d945
--- /dev/null
+++ b/verilog/rtl/yonga_can_top.v
@@ -0,0 +1,229 @@
+// MIT License

+

+// Copyright (c) [2022] [Yonga Technology Microelectronics R&D]

+

+// Permission is hereby granted, free of charge, to any person obtaining a copy

+// of this software and associated documentation files (the "Software"), to deal

+// in the Software without restriction, including without limitation the rights

+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

+// copies of the Software, and to permit persons to whom the Software is

+// furnished to do so, subject to the following conditions:

+

+// The above copyright notice and this permission notice shall be included in all

+// copies or substantial portions of the Software.

+

+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

+// SOFTWARE.

+

+// DESCRIPTION

+

+// The yonga_can_top module includes the register access logic and

+// top-level logic of CAN peripheral

+

+`default_nettype none

+

+module yonga_can_top #(

+    parameter BITS = 32

+)(

+    input wire clk,

+    input wire rst,

+    output reg ready,

+    input wire valid,

+

+    output reg [BITS-1:0] rdata,

+    input wire [BITS-1:0] wdata,

+    input wire [3:0] wstrb,

+    

+    input wire device_reg_wr_en,

+    input wire [4:0] device_addr,

+    input wire [BITS-1:0] device_reg_wr_data,

+    output reg [BITS-1:0] device_reg_rd_data,

+

+    output wire can_tx,

+    input wire can_rx,

+    

+    output reg [BITS-1:0] count

+);

+//    reg ready;

+//    reg [BITS-1:0] device_reg_rd_data;

+//    reg [BITS-1:0] count;

+//    reg [BITS-1:0] rdata;

+

+    reg [BITS-1:0] BAUD_RATE_CFG_REG;

+    reg [BITS-1:0] MSG_ID_REG;

+    reg [BITS-1:0] MSG_CFG_REG;

+    reg [BITS-1:0] DATA_REG1_REG;

+    reg [BITS-1:0] DATA_REG2_REG;

+    reg [BITS-1:0] SYS_CFG_REG;

+    reg [BITS-1:0] SYS_CTRL_STS_REG;

+    wire [2:0] sts_code;

+    // CPU controls the peripheral via pseudo memory-mapped registers 

+    always @(posedge clk) begin

+        if (rst) begin

+            BAUD_RATE_CFG_REG <= 32'h0;

+            MSG_ID_REG <= 32'h0;

+            MSG_CFG_REG <= 32'h0;

+            DATA_REG1_REG <= 32'h0;

+            DATA_REG2_REG <= 32'h0;

+            SYS_CFG_REG <= 32'h0;

+            SYS_CTRL_STS_REG <= 32'h0;

+

+            count <= 0;

+            ready <= 0;

+            rdata <= 32'h0;

+        end

+        else begin

+            ready <= 1'b0;

+            SYS_CTRL_STS_REG[0] <= 1'b0; // SEND bit is self-clearing

+            if (valid && !ready) begin

+                ready <= 1'b1;

+                rdata <= 32'h0;

+                if(wdata[0] && device_addr[4:0] == 5'h0) begin

+                    device_reg_rd_data <= BAUD_RATE_CFG_REG;

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[0]) BAUD_RATE_CFG_REG[7:0]   <= device_reg_wr_data[7:0];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[1]) BAUD_RATE_CFG_REG[15:8]  <= device_reg_wr_data[15:8];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[2]) BAUD_RATE_CFG_REG[23:16] <= device_reg_wr_data[23:16];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[3]) BAUD_RATE_CFG_REG[31:24] <= device_reg_wr_data[31:24];

+                end

+                else if(wdata[0] && device_addr[4:0] == 5'h4) begin

+                    device_reg_rd_data <= MSG_ID_REG;

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[0]) MSG_ID_REG[7:0]   <= device_reg_wr_data[7:0];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[1]) MSG_ID_REG[15:8]  <= device_reg_wr_data[15:8];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[2]) MSG_ID_REG[23:16] <= device_reg_wr_data[23:16];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[3]) MSG_ID_REG[31:24] <= device_reg_wr_data[31:24];

+                end

+                else if(wdata[0] && device_addr[4:0] == 5'h8) begin

+                    device_reg_rd_data <= MSG_CFG_REG;

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[0]) MSG_CFG_REG[7:0]   <= device_reg_wr_data[7:0];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[1]) MSG_CFG_REG[15:8]  <= device_reg_wr_data[15:8];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[2]) MSG_CFG_REG[23:16] <= device_reg_wr_data[23:16];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[3]) MSG_CFG_REG[31:24] <= device_reg_wr_data[31:24];

+                end

+                else if(wdata[0] && device_addr[4:0] == 5'hC) begin

+                    device_reg_rd_data <= DATA_REG1_REG;

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[0]) DATA_REG1_REG[7:0]   <= device_reg_wr_data[7:0];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[1]) DATA_REG1_REG[15:8]  <= device_reg_wr_data[15:8];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[2]) DATA_REG1_REG[23:16] <= device_reg_wr_data[23:16];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[3]) DATA_REG1_REG[31:24] <= device_reg_wr_data[31:24];

+                end

+                else if(wdata[0] && device_addr[4:0] == 5'h10) begin

+                    device_reg_rd_data <= DATA_REG2_REG;

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[0]) DATA_REG2_REG[7:0]   <= device_reg_wr_data[7:0];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[1]) DATA_REG2_REG[15:8]  <= device_reg_wr_data[15:8];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[2]) DATA_REG2_REG[23:16] <= device_reg_wr_data[23:16];

+                    if (SYS_CFG_REG[1] && device_reg_wr_en && wstrb[3]) DATA_REG2_REG[31:24] <= device_reg_wr_data[31:24];

+                end

+                else if(wdata[0] && device_addr[4:0] == 5'h14) begin

+                    device_reg_rd_data <= SYS_CFG_REG;

+                    if (device_reg_wr_en && wstrb[0]) SYS_CFG_REG[7:0]   <= device_reg_wr_data[7:0];

+                    if (device_reg_wr_en && wstrb[1]) SYS_CFG_REG[15:8]  <= device_reg_wr_data[15:8];

+                    if (device_reg_wr_en && wstrb[2]) SYS_CFG_REG[23:16] <= device_reg_wr_data[23:16];

+                    if (device_reg_wr_en && wstrb[3]) SYS_CFG_REG[31:24] <= device_reg_wr_data[31:24];

+                end

+                else if(wdata[0] && device_addr[4:0] == 5'h18) begin

+                    device_reg_rd_data <= SYS_CTRL_STS_REG;

+                    if (device_reg_wr_en && wstrb[0]) SYS_CTRL_STS_REG[7:0]   <= device_reg_wr_data[7:0];

+                    if (device_reg_wr_en && wstrb[1]) SYS_CTRL_STS_REG[15:8]  <= device_reg_wr_data[15:8];

+                    if (device_reg_wr_en && wstrb[2]) SYS_CTRL_STS_REG[23:16] <= device_reg_wr_data[23:16];

+                    if (device_reg_wr_en && wstrb[3]) SYS_CTRL_STS_REG[31:24] <= device_reg_wr_data[31:24];

+                end

+            end

+            if (sts_code != 3'b0) begin

+                SYS_CTRL_STS_REG[3:1] <= sts_code;

+            end

+        end

+    end

+

+    wire ack_slot_flag;

+

+    wire pulse_gen_en, pulse_gen_synced, pulse_gen_drive_pulse, pulse_gen_sample_pulse;

+    wire packetizer_en, packetizer_rdy, packetizer_message_bit;

+

+    // use can_tx for receive channel in loopback mode

+    wire can_rx_mux;

+    assign can_rx_mux = (SYS_CFG_REG[0] == 1'b1) ? ((ack_slot_flag == 1'b1) ? ~can_tx : can_tx) : can_rx;

+

+    // instantiate yonga_can_pulse_gen

+    yonga_can_pulse_gen inst_yonga_can_pulse_gen(

+        .i_pulse_gen_clk(clk),

+        .i_pulse_gen_rst(rst),

+

+        .i_pulse_gen_config_en(pulse_gen_en),

+

+        .i_pulse_gen_prescaler_val(BAUD_RATE_CFG_REG[26:18]),

+        .i_pulse_gen_phase_seg1_time_quanta_val(BAUD_RATE_CFG_REG[17:9]),

+        .i_pulse_gen_phase_seg2_time_quanta_val(BAUD_RATE_CFG_REG[8:0]),

+

+        .o_pulse_gen_synced(pulse_gen_synced),

+

+        .o_pulse_gen_drive_pulse(pulse_gen_drive_pulse),

+        .o_pulse_gen_sample_pulse(pulse_gen_sample_pulse)

+    );

+

+    // instantiate yonga_can_controller

+    yonga_can_controller inst_yonga_can_controller(

+        .i_controller_clk(clk),

+        .i_controller_rst(rst),

+

+        .i_pulse_gen_synced(pulse_gen_synced),

+        .i_packetizer_rdy(packetizer_rdy),

+        .i_ack_slot(ack_slot_flag),

+        

+        .o_packetizer_en(packetizer_en),

+        .o_pulse_gen_en(pulse_gen_en),

+        

+        .i_packetizer_message_bit(packetizer_message_bit),

+

+        .i_message_bit(can_rx_mux),

+        .o_message_bit(can_tx),

+

+        .i_drive_pulse(pulse_gen_drive_pulse),

+        .i_sample_pulse(pulse_gen_sample_pulse),

+

+        .i_config_enable(SYS_CFG_REG[1]),

+        .i_sys_ctrl_sts_send(SYS_CTRL_STS_REG[0]),

+        .o_sts_code(sts_code)

+

+    );

+

+    // instantiate yonga_can_controller

+    yonga_can_packetizer inst_yonga_can_packetizer(

+        .i_packetizer_clk(clk),

+        .i_packetizer_rst(rst),

+        .i_packetizer_en(packetizer_en),

+        .i_drive_pulse(pulse_gen_drive_pulse),

+

+        .i_packetizer_message_sid(MSG_ID_REG[29:19]),

+        .i_packetizer_message_ide(MSG_ID_REG[18]),

+        .i_packetizer_message_r0(1'b0),

+		.i_packetizer_message_r1(1'b0),

+		.i_packetizer_message_srr(1'b1),

+        .i_packetizer_message_eid(MSG_ID_REG[17:0]),

+

+        .i_packetizer_message_rtr(MSG_CFG_REG[4]),

+        .i_packetizer_message_dlc(MSG_CFG_REG[3:0]),

+

+        .i_packetizer_message_data_byte_0(DATA_REG1_REG[7:0]),

+        .i_packetizer_message_data_byte_1(DATA_REG1_REG[15:8]),

+        .i_packetizer_message_data_byte_2(DATA_REG1_REG[23:16]),

+        .i_packetizer_message_data_byte_3(DATA_REG1_REG[31:24]),

+        .i_packetizer_message_data_byte_4(DATA_REG2_REG[7:0]),

+        .i_packetizer_message_data_byte_5(DATA_REG2_REG[15:8]),

+        .i_packetizer_message_data_byte_6(DATA_REG2_REG[23:16]),

+        .i_packetizer_message_data_byte_7(DATA_REG2_REG[31:24]),

+

+        .o_packetizer_rdy(packetizer_rdy),

+        .i_packetizer_req(/* NOT USED */),

+        .o_packetizer_message_bit(packetizer_message_bit),

+        .i_packetizer_message_bit(/* NOT USED */),

+        .o_ack_slot(ack_slot_flag)

+

+    );

+

+endmodule

+`default_nettype wire
\ No newline at end of file