★ Counter
카운터는 클럭펄스가 인가될 때마다 값을 증가 또는 감소시키는 회로를 총칭하며, 주파수 분주기, 타이밍 제어신호 생성 등 디지털회로 설계에 폭넓게 사용되는 순차회로이다. 플립플롭과 조합논리회가 결합된 형태로 구현되며, 동작방식에 따라 동기식, 비동기식으로 구분된다.
동기식 카운터는 모든 플립플롭이 하나의 공통 클럭신호에 의해 구동되며, 따라서 모든 플립플롭의 상태변경이 동시에 일어난다. 동기식 카운터는 설계와 검증이 용이하며, 계수 속도가 빠른 장점이 있으나 비동기식 카운터에 비해 회로가 복잡하다는 단점이 있다.
비동기식 카운터는 천단의 플립플롭에 클럭신호가 인가되면, 플립플롭의 출력이 다음 단의 플립플롭을 트리거시키는 방식으로 동작하며, 클럭의 영향이 물결처럼 후단으로 파급된다는 듯에서 리플 카운터라고도 한다. 동기식 카운터에 비해 회로가 단순해지는 장점이있지만, 각 플립플롭의 전파 지연시간이 누적되어 최종단의 출력에 나타나므로 계수속도가 느리다는 단점이 있다.
카운터는 Verilog의 +, -연산자를 이용해 쉽게 모델링될 수 있다. 다음 코드는 active-low 비동기 리셋을 갖는 8비트 증가 카운터의 Verilog modeling이다. 비동기 리셋을 위해 negedge rst가 event목록에 포함되었으며, if(!rst)조건문에 의해 계수기가 0으로 초기화되고, rst=1인 동안에 계수기 값이 +1씩 증가한다.
module counter_up(clk,rst,cnt);
input clk,rst;
output reg [7:0] cnt;
always@(posedge clk or negedge rst)begin
if(!rst) cnt <= 0;
else cnt <= cnt + 1;
end
endmodule
▣ TESTBENCH
module tb_counter_up;
reg clk,rst;
wire [7:0] cnt;
counter_up u0(clk,rst,cnt);
always
#10 clk = ~clk;
initial begin
clk = 1'b0;
rst = 1'b0;
#20 rst = 1'b1;
end
endmodule
계수기를 이용하면 클록 분주기를 쉽게 구현할 수 있다. 예를들어 1MHz의 마스터 클록으로부터 100KHz의 분주 클럭을 생성하는 1/10 주파수 분주기(frequency divider)는 마스터 클럭을 10번 계수하는 카운터를 이용하여 구현될 수 있다. 다음은 1/10주파수 분주기의 Verilog modeling이다.
if(!rst)조건문에 의해 카운터가 0으로 초기화되며, rst=1인 동안 증가 계수기가 동작한다. 0부터 9까지 계수한 후 cnt=9가 되면 계수기를 0으로 초기화하고, 분주 클록 clk_div를 1로 만든다. cnt < 9인 동안에는 cnt를 +1씩 증가시키고 분주 클럭 clk_div는 0으로 만든다. 카운터 값 cnt는 0에서 9까지 계수되어야하므로 cnt는 4비트로 선언되었다.
module frq_div(mclk,rst,clk_div);
input mclk,rst;
output reg clk_div;
reg [3:0] cnt;
always@(posedge clk or negedge rst)begin
if(!rst)begin
cnt <= 0;
clk_div <= 0;
end
else begin
if(cnt == 9)begin
cnt <= 0;
clk_div <= 1;
end
else begin
cnt <= cnt +1;
clk_div <= 1'b0;
end
end
end
endmodule
▣ TESTBENCH
module tb_frq_div;
reg mclk,rst;
wire clk_div
frq_div u0(mclk,rst,clk_div);
always
#10 clk = ~clk;
initial begin
mclk = 1'b0;
rst = 1'b0;
#20 rst = 1'b1;
end
endmodule
'UVM & RTL > Verilog HDL' 카테고리의 다른 글
[32] Verilog HDL 순차회로( FSM ) (0) | 2022.03.06 |
---|---|
[31] Verilog HDL 순차회로 설계과제 (카운터) (0) | 2022.03.06 |
[29] Verilog HDL 순차회로 설계과제 (시프트 레지스터) (0) | 2022.03.05 |
[28] Verilog HDL 순차회로 (시프트 레지스터) (0) | 2022.03.05 |
[27] Verilog HDL blocking할당문과 nonblocking할당문 설계과제 (2) | 2022.03.05 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!