2012-07-02 5 views
2

Verilog를 배우고 CPLD로 작업 중이므로 막혔습니다. 내가 작성한 코드는 LED를 토글 (toggle)하지만 합성 중에 경고를 계속합니다. 찾을 추정 시계 LEDON | | 기간 1000.00ns와 CLK MT420 :래티스 다이아몬드 : 시계 설정

@W :

//toggles LED on and off after 1000000 clock cycles 

module LEDON(
LED, 
clk 
); 

output LED; 
reg LED; 

input clk ; 
wire clk; 

reg [31:0] count; 
wire count_max = 32'd1_000_000; 

assign count_nxt = (count >= count_max) ? 32'd0 : count + 32'd1; 
assign led_state_nxt = (count == count_max) ? ~LED : LED; 

always @(posedge clk) 

begin 
    count <= count_nxt; 
    LED <= led_state_nxt; 

end 

endmodule 

나는 이러한 경고를 얻을. "p : clk"개체에 사용자 정의 시계를 선언하십시오.
경고 -지도 : C :/Documents and Settings/belo/Desktop/LedOn2/LedON2.lpf (4) : FREQUENCY NET "clk"2.080000 MHz에서 오류가 발생했습니다.
WARNING - map : 기본 설정 구문 분석 결과 : 1 의미 론적 오류가 감지되었습니다.
경고 - map : "C :/Documents and Settings/belo/Desktop/LedOn2/LedON2.lpf"환경 설정 파일에 오류가 있습니다.
WARNING - map : 환경 설정 파일 "C :/Documents and Settings/belo/Desktop/LedOn2/LedON2.prf"에 의미 론적 오류가 있습니다.

내 LPF 파일은 다음과 같습니다 :

BLOCK RESETPATHS ; 
BLOCK ASYNCPATHS ; 
LOCATE COMP "LED" SITE "41" ; 
FREQUENCY NET "clk" 2.08 MHz ; 

그래서 사람이 시계의 경고를 수정하는 방법을 알고 있는가?

+0

내 LPF 파일의 코드를 다음과 같이 변경하여 대부분의 경고를 해결할 수있었습니다. FREQUENCY NET "clk"2.08 MHz; 주파수 포트 "clk"에 2.08 MHz; 그러나 LED는 여전히 깜박이지 않습니다. –

+0

오류 : @W : CL189 : "C : \ Documents and Settings \ belo \ Desktop \ LedOn2 \ LEDON.v": 20 : 0 : 20 : 5 | 레지스터 비트 수 [2]는 항상 0입니다. .. @W : CL189 : "C : \ Documents and Settings \ belo \ Desktop \ LedOn2 \ LEDON.v": 20 : 0 : 20 : 5 | 등록 비트 수 [1]는 항상 0입니다. @W : CL189 : "C : \ Documents and Settings \ belo \ Desktop \ LedOn2 \ LEDON."": 20 : 0 : 20 : 5 | 등록 비트 수 [0]은 항상 0입니다 ... @W : MT420 | 유추 한 클록 LEDON | clk 기간이 1000.00ns입니다. 사용자 정의를 선언하십시오. 시계 개체 "p : clk" –

+0

이것을 시뮬레이션 했습니까? –

답변

1

이 줄이 맞는지 확실하지 않습니다. "wire count_max = 32'd1_000_000;" 합성 가능합니다. 그것은 시뮬레이션을 제외하고는 무시 될 수도 있습니다 (이것은 툴 체인에 달려있을 수 있습니다 - ASIC에서는 합성 가능하지 않지만 FPGA에서는 ... 가능할 수도 있습니다 !!).

라인 수> = count_max는 카운트를 0과 비교하며 (최대 카운트가 아님) 따라서 이것이 최적화되지 않고 있습니다 (경고 참조). 이것이 종합적으로 관리되었지만 아무 것도하지 않는 이유입니다.

여러 솔루션이 있습니다. 1) 대신 매개 변수를 사용하여이 (가) C에서 C에서 const를 ++ 또는 #DEFINE 같다 :

parameter count_max = 32'd1_000_000; 

2) 그냥 작은 카운터를 사용하고 첫 번째 해결

reg [16:0] count; // counts 131,072 cycles 

assign led_next = (count == 0 ? ~LED : LED); 
always @(posedge clk) 
begin 
    count <= count + 1; 
    LED <= led_next; 
end 
0

를 오버 플로우 할 때 전환 경고는 SDC 제한 파일을 작성하여 원하는 클럭 속도를 알려줌으로써 수행 할 수 있습니다.

create_clock -period 480.769 -name {clk} [get_ports {clk}] 

기간은 NS이다 : 여기

은 대략 2.08 MHz의 실행 클럭을 생성하는 예이다. 제한하려는 시계가 입력이 아닌 경우 get_ports 대신 get_nets를 사용할 수 있습니다.