빈도가 높은 부품에 대한 HDL 설명 예제 - 카운터
사용 방법에 따라 각양각색의 쓰기 방법을 쓸 수 있는데, 아래에 몇 가지 기술 예를 열거한다.
예1
가장 간단한 계수기 설명 예시.시계만 세는 거야.
VHDL
process (RST,CLK) begin
if (RST = '1')then
counter <= (others => '0');
elsif (CLK'event and CLK = '1') then
counter <= counter + 1;
end if;
end process;
verilogalways@(posedge RST or posedge CLK) begin
if (RST == 1'b1) begin
counter <= 'd0;
end else begin
counter <= counter + 1;
end
end
이 경우 최대치를 세고 0을 되돌려 반복합니다.예2
예1은 카운트다운의 기술 예다.(8비트의 예)
이 경우 0까지 세면 최대값을 반환하고 작업을 반복합니다.
VHDL
process (RST,CLK) begin
if (RST = '1')then
counter <= (others => '1');
elsif (CLK'event and CLK = '1') then
counter <= counter - 1;
end if;
end process;
verilogalways@(posedge RST or posedge CLK) begin
if (RST == 1'b1) begin
counter <= 8'hFF;
end else begin
counter <= counter - 1;
end
end
verilog의 경우 모든bit1의 대입은 지정한bit수를 입력하고 최대값을 입력하며 데이터 폭을 매개 변수로 할 때 좀 번거롭습니다.SystemVerilog의 쓰기 방식은 간단합니다.
SystemVerilog
always@(posedge RST or posedge CLK) begin
if (RST == 1'b1) begin
counter <= '1;
end else begin
counter <= counter - 1;
end
end
예3
이번에는 펄스 신호를 세어 최대치 100에 도달한 후 계수를 멈추는 계수기의 예다.
VHDL
process (RST,CLK) begin
if (RST = '1')then
counter <= (others => '0');
elsif (CLK'event and CLK = '1') then
if (pulse = '1') then
if (counter < 100) then
counter <= counter + 1;
end if;
end if;
end if;
end process;
verilogalways@(posedge RST or posedge CLK) begin
if (RST == 1'b1) begin
counter <= 'd0;
end else if (pulse == 1'b1) begin
if (counter < 100) begin
counter <= counter + 1;
end
end
end
예4
최대치 99부터 펄스 신호의 한쪽 수를 줄이고 0이 되면 최대치를 되돌려주는 계수기의 예.최대치가 99이기 때문에 7비트만 있으면 된다.
VHDL
process (RST,CLK) begin
if (RST = '1')then
counter <= "1100011";--99
elsif (CLK'event and CLK = '1') then
if (pulse = '1') then
if (counter = 0) then
counter <= "1100011";--99
else
counter <= counter - 1;
end if;
end if;
end if;
end process;
verilogalways@(posedge RST or posedge CLK) begin
if (RST == 1'b1) begin
counter <= 7'd99;
end else if (pulse == 1'b1) begin
if (counter == 0) begin
counter <= 7'd99;
end else begin
counter <= counter - 1;
end
end
end
최대값이 고정값이면 상수를 설명하고 사용하는 것이 좋습니다.위의 예에서 비트 너비에 주의하지 않고 잘 쓴 부분이 있다.비트 폭과 최대치 등을 매개 변수화한 카운터를 모듈화해 여기저기 사용하는 경우도 있기 때문에 적절히 조정하는 게 좋다고 본다.
Reference
이 문제에 관하여(빈도가 높은 부품에 대한 HDL 설명 예제 - 카운터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sk6labo/articles/3d181671149876텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)