나는이 답변을 찾고 있지만 아무 소용이 시도했다. 내 코드를 다시 합성 할 때 문제가 생겼고 클럭 문제로 인한 것으로 의심된다.특정 주파수 Verilog에서 핀 강제
DCM을 사용하여 외부 크리스털 발진기에 25MHz ~ 50MHz를 곱합니다. 그러나이 툴은 외부의 물리적 구성 요소이기 때문에 수정 오실레이터가 실제로 어떤 주파수인지 알 수 없을 것이라고 생각합니다. 내 코드는 다음과 같습니다.
//since our crystal oscillator is only 25Mhz, we use a DCM to multiply it by two since the desired is 50Mhz
DCM #(
.CLKFX_DIVIDE (2),
.CLKFX_MULTIPLY (4)
) dcm_master (
.CLKFB (CLK_FB),
.CLKIN (CLK_crystal),
.RST (DcmReset),
.CLK0 (MasterClk0Unbuf),
.CLK90 (),
.CLK180 (),
.CLK270 (),
.CLK2X (),
.CLK2X180(),
.CLKFX (MasterClkFxUnBuf),
.CLKFX180(),
.CLKDV (),
.LOCKED (DcmLocked),
.STATUS (),
.PSCLK (1'b0),
.PSEN (1'b0),
.PSINCDEC (1'b0),
.PSDONE ()
);
//we provide feedback to the DCM's phase input (possibly not neccessary)
BUFG bufg_master_dcm_clk_0 (.I(MasterClk0Unbuf), .O(CLK_FB));
BUFG bufg_master_dcm_clk_fx (.I(MasterClkFxUnBuf), .O(CLK_FX));
//code taken from xilinx. We toggle using a bufgmux between the onboard and external clock
// BUFGMUX: Global Clock Buffer 2-to-1 MUX
// Spartan-3
// Xilinx HDL Libraries Guide, version 13.2
BUFGMUX BUFGMUX_inst (
.O(CLK), // Clock MUX output
.I0(CLK_FX), // Clock0 input
.I1(CLK_local), // Clock1 input
.S(sw[6]) // Clock select input
);
ucf의이 코드는 툴이 내 DCM의 출력을 50MHz로 인식하게합니까?
PIN "bufg_master_dcm_clk_fx.O" TNM_NET = CLK50;
TIMESPEC TS_CLKBuf = PERIOD "CLK50" 100 MHz HIGH 50%;
또한 BUFG를 올바르게 사용하고 있습니까? 자일링스는 IBUFG를 사용하여 외부 클럭을 DCM에 연결해야한다고 말하면서 BUFG가 칩의 절반 만 처리 할 수 있다고 말하는 오류가 발생한다 (문제가 있다고 생각된다).
덕분에,
나단
'always @ (posedge CLK 또는 negedge CLK)'를 사용할 수없는 이유가 있습니까? – N8TRO
@ Nathan G - 그렇게하려고하면 오류가 발생합니다 - "레지스터 또는 래치를 설명하는 데 사용하는 설명 스타일이 현재 소프트웨어 릴리스에서 지원되지 않습니다". 두 클럭 에지에서 플립 플롭을 어떻게 구동하는지 쉽게 시각화 할 수 없습니다. –
Verilog 구현보다는 합성을위한 클록 제약 적용에 관한 질문입니까? – Morgan