2012-07-02 2 views
2

Я работаю над изучением Verilog и работает с CPLD, и я застрял. Код, который я написал, переключает светодиод, но во время синтеза я все время предупреждаю.Lattice Diamond: настройка часов

//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 

Я получаю эти предупреждения:

@W: MT420 | Найдено Inferred часы LEDON | CLK с периодом 1000.00ns. Пожалуйста, объявите пользовательские часы на объекте «p: clk»
ПРЕДУПРЕЖДЕНИЕ - карта: C:/Documents and Settings/belo/Desktop/LedOn2/LedON2.lpf (4): Ошибка в FREQUENCY NET «clk» 2.080000 МГц;
ПРЕДУПРЕЖДЕНИЕ - карта: результаты синтаксического анализа предпочтений: обнаружена 1 семантическая ошибка
ПРЕДУПРЕЖДЕНИЕ - карта: в файле настроек есть ошибки «C:/Documents and Settings/belo/Desktop/LedOn2/LedON2.lpf».
ПРЕДУПРЕЖДЕНИЕ - карта: в файле предпочтений есть семантические ошибки, «C:/Documents and Settings/belo/Desktop/LedOn2/LedON2.prf».

Мой ФНЧ файл выглядит следующим образом:

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

Так кто-нибудь знает, как исправить эти предупреждения часы?

+0

Мне удалось исправить большинство предупреждений, изменив код в файле LPF: FREQUENCY NET «clk» 2.08 МГц; до FREQUENCY PORT «clk» 2.08 МГц; Но светодиод все еще не мигает. –

+0

Errors Now: @W: CL189: «C: \ Documents and Settings \ white \ Desktop \ LedOn2 \ LEDON.v": 20: 0: 20: 5 | Регистрация количества бит [2] всегда 0, оптимизация. .. @W: CL189: «C: \ Documents and Settings \ white] \ Desktop \ LedOn2 \ LEDON.v": 20: 0: 20: 5 | Регистрация количества бит [1] всегда 0, оптимизация .. . @W: CL189: «C: \ Documents and Settings \ white \ Desktop \ LedOn2 \ LEDON.v ": 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++ или #define в C):

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, указывающего, какую тактовую скорость вы хотите иметь.

Ниже приведен пример для создания часов, который работает при приблизительно 2,08 МГц:

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

В случае, если период находится в нс. Если часы, которые вы хотите ограничить, не являются входом, вы можете использовать get_nets вместо get_ports.

Смежные вопросы