Articles
주파수 분할 기용 Verilog 코드
On 2월 17, 2021 by admin50Hz 클럭 신호에서 50MHz 신호를 16 비트 동기식 카운터. 시도했지만 작동하지 않았습니다.
module divier_16 (clk_in, clk_out); input clk_in; wire w; wire [0:15]temp; output clk_out; count_16 c1 (clk_in, w); count_16 c2 (w, temp); assign clk_out= temp[6];
댓글
- 사용 16 비트 무엇입니까?
- 그리고 무엇을 시도 했습니까? 코드를 게시 할 수 있습니까?
- 16 비트 동기식 카운터
- 이 중 두 개를 사용할 수 있습니까?
- 좋습니다. 그런 다음 먼저 1000으로 나눈 다음 1000으로 나눕니다.
답변
안타깝게도 16 비트는 50MHz 신호를 50Hz 신호로 변환하기에는 부족합니다. 이는 클럭을 100 만 단위로 나누어야하기 때문입니다. $$ 2 ^ {16} = 65536 $$ 따라서 충분하지 않습니다. A 최소 20 비트의 카운터는 다음과 같은 이유로 충분합니다. $$ 2 ^ {20} = 1048576 $$
신호를 변환하려면 1 백만 클럭 사이클로 계산 한 다음 출력 신호의 상태를 변경하면됩니다. .
예 :
always @(posedge clk_in) begin count_20 <= count_20 + 1; if(count_20 == 1000000) begin count<=0; clk_out <= !clk_out; end end
편집 : ^^가 25Hz 신호를 생성하는 것으로 밝혀 졌으므로 19 비트가 필요한 500000으로 계산합니다. 그러면 질문은 어디에서 20 번째 비트는 1 백만으로 나눌 필요가 있기 때문에 보는 것입니다. 음, clk_out 비트는 20 번째 비트 역할을합니다.
설명
- 또 다른 해결책은 이러한 16 비트 카운터 중 여러 개를 사용하는 것입니다. 그 중 적어도 16 개가 필요합니다 (16 * 65536 = 2 ² ⁰ = 1048576)
- 실수했을 수 있습니다. 제 해결책이 될 것 같습니다. 25Hz에서?
- 2 개만 필요합니다. 32 비트를 제공합니다.
- @Makoto 예, 500_000까지 세야합니다. 두 번째는 다음과 같은 경고가있을 것입니다. 항상 구성에서 다른 할당 유형을 사용하면
clk_out <= !clk_out
; - 그래도 변경됩니다
답글 남기기