data/full_repos/permissive/159830616/YJ431_PL.srcs/sources_1/new/FB_PWM.v
'utf-8' codec can't decode byte 0xd7 in position 610: invalid continuation byte
1: b'%Warning-MULTITOP: data/full_repos/permissive/159830616/YJ431_PL.srcs/sources_1/new/FB_PWM.v:269: Multiple top level modules\n                                                                                                : ... Suggest see manual; fix the duplicates, or use --top-module to select top.\n                   ... Use "/* verilator lint_off MULTITOP */" and lint_on around source to disable this message.\n                                                                                                : ... Top module \'FB_PWMREG\'\nmodule FB_PWMREG(\n       ^~~~~~~~~\n                                                                                                : ... Top module \'PWM\'\nmodule PWM(\n       ^~~\n%Error: Exiting due to 1 warning(s)\n'
module FB_PWMREG(
    RST_n,
	BUS_ADDR,
	BUS_DATA,
	BUS_CS,

	BUS_read,
	BUS_write,

	PWM_BASE,


	FREQ_Cnt_Reg,
    CH0_duty_Reg,
	CH1_duty_Reg,
	CH2_duty_Reg,
	CH3_duty_Reg,
	CH4_duty_Reg,
    CH5_duty_Reg,
    CH6_duty_Reg,
    CH7_duty_Reg

    );
    
    input RST_n;
    input [31:0] BUS_ADDR;
    inout [31:0] BUS_DATA;
    input BUS_CS;

    input BUS_read;
    input BUS_write;

    input [9:0] PWM_BASE;


	output reg [31:0] FREQ_Cnt_Reg = 32'd10000;
	output reg [31:0] CH0_duty_Reg = 32'd1 ;
	output reg [31:0] CH1_duty_Reg = 32'd1;
	output reg [31:0] CH2_duty_Reg = 32'd1;
	output reg [31:0] CH3_duty_Reg = 32'd1;
	output reg [31:0] CH4_duty_Reg;
	output reg [31:0] CH5_duty_Reg;
	output reg [31:0] CH6_duty_Reg;
	output reg [31:0] CH7_duty_Reg;
	
	wire AD_TRI_n;
	wire ADD_COMF;


	
	reg [31:0] BUS_DATA_REG = 32'b0;
	
	assign ADD_COMF = ( BUS_ADDR[31:22] == PWM_BASE[9:0] ) ? 1'b1:1'b0;
	assign AD_TRI_n = ADD_COMF & ~BUS_CS & BUS_read ;


   
	assign BUS_DATA = AD_TRI_n ? BUS_DATA_REG : 32'bz;
   
   


always@( posedge BUS_CS or negedge RST_n )
    if ( !RST_n ) begin
        FREQ_Cnt_Reg <= 32'd1;
        CH0_duty_Reg <= 32'b0;
        CH1_duty_Reg <= 32'b0;
        CH2_duty_Reg <= 32'b0;
        CH3_duty_Reg <= 32'b0;
        CH4_duty_Reg <= 32'b0;
        CH5_duty_Reg <= 32'b0;
        CH6_duty_Reg <= 32'b0;
        CH7_duty_Reg <= 32'b0;
    end
    
    else begin
        if ( ADD_COMF ) begin
            if ( BUS_write == 1'b1 ) begin
                case(BUS_ADDR[21:0])
                    22'b000000: begin                
                        FREQ_Cnt_Reg [31:0] <= BUS_DATA [31:0];
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg;
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;  
                    end                
                    22'b000100: begin
                        FREQ_Cnt_Reg  <= FREQ_Cnt_Reg;
    
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH0_duty_Reg [31:0] <= BUS_DATA [31:0];
                        end
    
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg;
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                    22'b001000: begin
                        FREQ_Cnt_Reg  <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH1_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH2_duty_Reg <= CH2_duty_Reg;
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                    
                    22'b001100: begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH2_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b010000: begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH3_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b010100:begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH4_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b011000:begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH5_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;                    	
                    end
                           
                    22'b011100:begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH6_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b100000:begin 
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH7_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end 
                    end
                endcase
            end        
        end
    end



always@( negedge BUS_CS or negedge RST_n )
    if ( !RST_n ) begin
        BUS_DATA_REG <= 32'b0;
    end
    
    else begin
        if ( ADD_COMF ) begin
            if ( BUS_read == 1'b1 ) begin
                case(BUS_ADDR[21:0])
                    22'b000000:
                        BUS_DATA_REG[31:0] <= FREQ_Cnt_Reg[31:0];
                    22'b000100:
                        BUS_DATA_REG[31:0] <= CH0_duty_Reg[31:0];
                    22'b001000:
                        BUS_DATA_REG[31:0] <= CH1_duty_Reg[31:0];
                    22'b001100:
                        BUS_DATA_REG[31:0] <= CH2_duty_Reg[31:0];
                    22'b010000:
                        BUS_DATA_REG[31:0] <= CH3_duty_Reg[31:0];
                    22'b010100:
                        BUS_DATA_REG[31:0] <= CH4_duty_Reg[31:0];
                    22'b011000:
                        BUS_DATA_REG[31:0] <= CH5_duty_Reg[31:0];
                    22'b011100:
                        BUS_DATA_REG[31:0] <= CH6_duty_Reg[31:0];
                    22'b100000:
                        BUS_DATA_REG[31:0] <= CH7_duty_Reg[31:0];
                    default:
                        BUS_DATA_REG[31:0] <=32'hffffffff;
                endcase
            end
        end
    end

endmodule
module FB_PWMREG(
    RST_n,
	BUS_ADDR,
	BUS_DATA,
	BUS_CS,

	BUS_read,
	BUS_write,

	PWM_BASE,


	FREQ_Cnt_Reg,
    CH0_duty_Reg,
	CH1_duty_Reg,
	CH2_duty_Reg,
	CH3_duty_Reg,
	CH4_duty_Reg,
    CH5_duty_Reg,
    CH6_duty_Reg,
    CH7_duty_Reg

    );

    
    input RST_n;
    input [31:0] BUS_ADDR;
    inout [31:0] BUS_DATA;
    input BUS_CS;

    input BUS_read;
    input BUS_write;

    input [9:0] PWM_BASE;


	output reg [31:0] FREQ_Cnt_Reg = 32'd10000;
	output reg [31:0] CH0_duty_Reg = 32'd1 ;
	output reg [31:0] CH1_duty_Reg = 32'd1;
	output reg [31:0] CH2_duty_Reg = 32'd1;
	output reg [31:0] CH3_duty_Reg = 32'd1;
	output reg [31:0] CH4_duty_Reg;
	output reg [31:0] CH5_duty_Reg;
	output reg [31:0] CH6_duty_Reg;
	output reg [31:0] CH7_duty_Reg;
	
	wire AD_TRI_n;
	wire ADD_COMF;


	
	reg [31:0] BUS_DATA_REG = 32'b0;
	
	assign ADD_COMF = ( BUS_ADDR[31:22] == PWM_BASE[9:0] ) ? 1'b1:1'b0;
	assign AD_TRI_n = ADD_COMF & ~BUS_CS & BUS_read ;


   
	assign BUS_DATA = AD_TRI_n ? BUS_DATA_REG : 32'bz;
   
   


always@( posedge BUS_CS or negedge RST_n )
    if ( !RST_n ) begin
        FREQ_Cnt_Reg <= 32'd1;
        CH0_duty_Reg <= 32'b0;
        CH1_duty_Reg <= 32'b0;
        CH2_duty_Reg <= 32'b0;
        CH3_duty_Reg <= 32'b0;
        CH4_duty_Reg <= 32'b0;
        CH5_duty_Reg <= 32'b0;
        CH6_duty_Reg <= 32'b0;
        CH7_duty_Reg <= 32'b0;
    end
    
    else begin
        if ( ADD_COMF ) begin
            if ( BUS_write == 1'b1 ) begin
                case(BUS_ADDR[21:0])
                    22'b000000: begin                
                        FREQ_Cnt_Reg [31:0] <= BUS_DATA [31:0];
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg;
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;  
                    end                
                    22'b000100: begin
                        FREQ_Cnt_Reg  <= FREQ_Cnt_Reg;
    
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH0_duty_Reg [31:0] <= BUS_DATA [31:0];
                        end
    
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg;
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                    22'b001000: begin
                        FREQ_Cnt_Reg  <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH1_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH2_duty_Reg <= CH2_duty_Reg;
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                    
                    22'b001100: begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH2_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b010000: begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH3_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b010100:begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH4_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b011000:begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH5_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH6_duty_Reg <= CH6_duty_Reg;
                        CH7_duty_Reg <= CH7_duty_Reg;                    	
                    end
                           
                    22'b011100:begin
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH6_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end
                        CH7_duty_Reg <= CH7_duty_Reg;
                    end
                           
                    22'b100000:begin 
                        FREQ_Cnt_Reg <= FREQ_Cnt_Reg;
                        CH0_duty_Reg <= CH0_duty_Reg;
                        CH1_duty_Reg <= CH1_duty_Reg;
                        CH2_duty_Reg <= CH2_duty_Reg; 
                        CH3_duty_Reg <= CH4_duty_Reg;   
                        CH4_duty_Reg <= CH4_duty_Reg;
                        CH5_duty_Reg <= CH5_duty_Reg;
                        CH6_duty_Reg <= CH6_duty_Reg;
                        if ( BUS_DATA [31:0] < FREQ_Cnt_Reg [31:0] ) begin
                            CH7_duty_Reg[31:0] <= BUS_DATA [31:0];
                        end 
                    end
                endcase
            end        
        end
    end



always@( negedge BUS_CS or negedge RST_n )
    if ( !RST_n ) begin
        BUS_DATA_REG <= 32'b0;
    end
    
    else begin
        if ( ADD_COMF ) begin
            if ( BUS_read == 1'b1 ) begin
                case(BUS_ADDR[21:0])
                    22'b000000:
                        BUS_DATA_REG[31:0] <= FREQ_Cnt_Reg[31:0];
                    22'b000100:
                        BUS_DATA_REG[31:0] <= CH0_duty_Reg[31:0];
                    22'b001000:
                        BUS_DATA_REG[31:0] <= CH1_duty_Reg[31:0];
                    22'b001100:
                        BUS_DATA_REG[31:0] <= CH2_duty_Reg[31:0];
                    22'b010000:
                        BUS_DATA_REG[31:0] <= CH3_duty_Reg[31:0];
                    22'b010100:
                        BUS_DATA_REG[31:0] <= CH4_duty_Reg[31:0];
                    22'b011000:
                        BUS_DATA_REG[31:0] <= CH5_duty_Reg[31:0];
                    22'b011100:
                        BUS_DATA_REG[31:0] <= CH6_duty_Reg[31:0];
                    22'b100000:
                        BUS_DATA_REG[31:0] <= CH7_duty_Reg[31:0];
                    default:
                        BUS_DATA_REG[31:0] <=32'hffffffff;
                endcase
            end
        end
    end

endmodule