###########################
process (SW1,atpdata)begin
case SW1 is
when '1' => LED <= atpdata(15 downto 8);
when '0' => LED <= atpdata(7 downto 0);
when others => LED <= (others => '0');
end case;
end process;
--ライトカウンタ
process(RESET,sw2_sig,PS2CK,COUNT)begin
if(RESET = '0' )then
COUNT <= "0000";
else
if(sw2_sig= '0')then
COUNT <= "0000";
elsif(PS2CK'event and PS2CK ='0')then
if(COUNT = "1111")then
COUNT <= "0000";
else
COUNT <= COUNT +1;
end if;
end if;
end if;
end process;
/*---- counter ----*/
always @(posedge CLK or posedge ~_RESET) // 66MHz -> 503Hz
begin
if( ~_RESET )
begin
counter <= 17'h00;
end
else
begin
counter <= counter + 17'h01;
end
end
/*---- register ----*/
always @(posedge ~_WR or posedge ~_RESET )
begin
if( ~_RESET )
begin
pwm_reg <= 5'h00;
end
else
if( BL )
begin
pwm_reg <= D[15:11];
end
end
/*---- compare ----*/
always @(posedge CLK or posedge ~_RESET )
begin
if( ~_RESET )
begin
PWM <= 1'b0;
end
else
if( pwm_reg > counter[16:12])
begin
PWM <= 1'b1;
end
else
begin
PWM <= 1'b0;
end
end
・
・
・
endmodule
=============================================
/*---- register ----*/
always @(negedge _RESET or posedge CLK ) begin
if( ~_RESET ) begin
pwm_reg <= 5'h00;
end else begin
if( ~_WR & BL ) begin
pwm_reg <= D[15:11];
end
end
end
=============================================
/*---- counter ----*/
always @(posedge CLK or posedge ~_RESET) // 66MHz -> 503Hz
begin
if( ~_RESET )
begin
counter <= 17'h00;
end
else
begin
counter <= counter + 17'h01;
end
end
/*---- register ----*/
always @(posedge CLK or posedge ~_RESET )
begin
if( ~_RESET )
begin
pwm_reg <= 5'h00;
end
else
if( BL & ~_WR)
begin
pwm_reg <= ~D[15:11]; //DATA値反転
end
end
/*---- compare ----*/
always @(posedge CLK or posedge ~_RESET )
begin
if( ~_RESET )
begin
PWM <= 1'b0;
end
else
if( pwm_reg > counter[16:12])
begin
PWM <= 1'b1;
end
else
begin
PWM <= 1'b0;
end
end
・
・
・
endmodule