Решетка Алмаз: Настройка часов

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

//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 |Найден предполагаемый тактовый сигнал LEDON|clk с периодом 1000,00 нс. Пожалуйста, объявите определяемые пользователем часы для объекта "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" есть семантические ошибки.

Мой файл LPF выглядит так:

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

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


person Ben Elo    schedule 02.07.2012    source источник
comment
Мне удалось исправить большинство предупреждений, изменив код в моем файле LPF с: FREQUENCY NET clk 2.08 MHz ; на ЧАСТОТНЫЙ ПОРТ clk 2,08 МГц ; Но светодиод все равно не моргает.   -  person Ben Elo    schedule 02.07.2012
comment
Ошибки Теперь: @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 и Settings\belo\Desktop\LedOn2\LEDON.v:20:0:20:5|Счетчик регистровых битов[0] всегда равен 0, оптимизация... @W: MT420 |Найдены предполагаемые часы LEDON|clk с периодом 1000,00 нс . Пожалуйста, объявите определяемые пользователем часы для объекта p:clk   -  person Ben Elo    schedule 02.07.2012
comment
Вы смоделировали это?   -  person    schedule 03.07.2012


Ответы (2)


Я не уверен, что эта строка: "wire count_max = 32'd1_000_000;" является синтезируемым. Это может быть проигнорировано, кроме как в моделировании (это может зависеть от вашей цепочки инструментов - это не синтезируется для ASIC, но для FPGA ... возможно !!).

Строка count>= count_max сравнивает count с 0 (а не с max), и поэтому это оптимизируется (см. предупреждения). Вот почему ему удалось синтезировать, но ничего не сделать.

Есть несколько решений. 1) Вместо этого используйте параметр (это похоже на const в 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
person dave    schedule 03.07.2012

Решение вашего первого предупреждения может быть выполнено путем создания файла ограничений SDC, указывающего, какую тактовую частоту вы хотите иметь.

Вот пример создания тактового генератора с частотой примерно 2,08 МГц:

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

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

person Mathias    schedule 22.12.2016