реклама на сайте
подробности

 
 
> Особенности логики, Вопросы по проектированию RTL
drozel
сообщение Dec 17 2015, 08:15
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Добрый день. Пытаюсь адаптировать свой verilog, проверенный на fpga, для реализации в кремнии.
Периодически возникают те или иные вопросы, ответ на которые хочется найти тут, у спецов.
Первый вопрос:

Представим 8-разрядный счетчик, считающий по клоку. По достижению им числа 100 нужно переключиться в режим 1, по достижению 200 - в режим 2 и остаться в нем до сброса.
Раньше, в ПЛИС (в связи с избыточностью ячеек), я бы сделал так:
Код
reg [7:0]cnt;
always @(posedge clk, negedge nrst)
begin
    if (~nrst) cnt <= 0;
    else begin
        if(cnt<200) cnt <=cnt + 1'b1;
    end
end

always @*
begin
    if(cnt<100) mode <= 0;
    else if(cnt <200) mode <= 1;
    else mode <= 2;
end


Теперь, представляю, во что выльется этот код: синтезатор реализует 3 компаратора (причем для определения диапазона) из простых элементов для декодирования значения счетчика. Думаю, как упростить схему. Рождается код:
Код
reg [7:0]cnt;
always @(posedge clk, negedge nrst)
begin
    if (~nrst) begin
        cnt <= 0;
        mode <= 0;
    end
    else begin
cnt <= cnt+1;
        if(cnt==100 || cnt==200) mode <= mode+1;
    end
end

Тут уже компарирование не диапазона, а конкретных значений, зато логика mode становится синхронной.
Проверил в DC - действительно, экономия по площади и кол-ву ячеек - почти в 2 раза.
Не имеет ли второй вариант каких-то подводных камней?

Сообщение отредактировал drozel - Dec 17 2015, 11:51
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
iosifk
сообщение Dec 17 2015, 12:51
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(drozel @ Dec 17 2015, 11:15) *
always @*
begin
if(cnt<100) mode <= 0;
else if(cnt <200) mode <= 1;
else mode <= 2;
end[/code]



Не имеет ли второй вариант каких-то подводных камней?

Вот первый вариант - асинхронный. И он-то как раз "имеет", потому как "cnt" переключается далеко не одновременно. Да и еще компаратор свое добавит. А потому "mode" может переключаться как угодно из-за гонки фронтов... В зависимости от погоды и настроения...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
drozel
сообщение Dec 17 2015, 13:02
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(iosifk @ Dec 17 2015, 18:51) *
Вот первый вариант - асинхронный. И он-то как раз "имеет", потому как "cnt" переключается далеко не одновременно. Да и еще компаратор свое добавит. А потому "mode" может переключаться как угодно из-за гонки фронтов... В зависимости от погоды и настроения...

Хорошее замечание, спасибо.
Кстати, отловил еще одно отличие: в синхронном примере нет насыщения счетчика. После того, как добавил, площадь второго варианта стала почти в 1.5 раза больше. Т.е. синхронный более накладный. Видимо, все таки синтезер очень сильно упрощает логику сравнения, даже если речь идет о диапазонах.
Еще, в синхронном отстал один critical path.
Go to the top of the page
 
+Quote Post
masics
сообщение Dec 17 2015, 13:05
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 21-02-05
Из: Melbourne, Australia
Пользователь №: 2 779



Цитата(drozel @ Dec 18 2015, 00:02) *
Хорошее замечание, спасибо.
Кстати, отловил еще одно отличие: в синхронном примере нет насыщения счетчика. После того, как добавил, площадь второго варианта стала почти в 1.5 раза больше. Т.е. синхронный более накладный. Видимо, все таки синтезер очень сильно упрощает логику сравнения, даже если речь идет о диапазонах.
Еще, в синхронном отстал один critical path.

1. дайте посмотреть на код.
2. что значит "отстал один critical path"?
Go to the top of the page
 
+Quote Post
drozel
сообщение Dec 17 2015, 13:09
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(masics @ Dec 17 2015, 19:05) *
1. дайте посмотреть на код.
2. что значит "отстал один critical path"?

Код
module top (
    input clk,
    input nrst,
    output reg [1:0]mode
);

reg [7:0]cnt;
always @(posedge clk, negedge nrst)
begin
    if (~nrst) begin
        cnt <= 0;
        mode <= 0;
    end
    else begin
        if(cnt<200)    cnt <= cnt + 1;
        if(cnt==99 || cnt==199) mode <= mode+1;
    end
end

endmodule

Вы говорили про тайминги. Я не до конца понял, что Вы имели ввиду, посмотрел отчет по slack. У варианта 2 они чуть лучше, кроме одного пути: младший бит cnt - сумматор - старший бит через логику.

К слову про глитчи: предположим, что на выходе mode еще одна защелка, которая защелкивает по окончанию счета.

Вариант 2:
Прикрепленное изображение

Вариант 1:
Прикрепленное изображение


Сообщение отредактировал drozel - Dec 17 2015, 13:13
Go to the top of the page
 
+Quote Post
masics
сообщение Dec 17 2015, 13:17
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 21-02-05
Из: Melbourne, Australia
Пользователь №: 2 779



1. А если поменять "if(cnt<200) cnt <= cnt + 1;" на "if(mode != 2) cnt <= cnt + 1'b1;"?
2. Для такого маленького дизайна не стоит обращать на critical path. В любом случае, это всё поменяется при placement.

Цитата(iosifk @ Dec 18 2015, 00:13) *
На самом деле не все так однозначно... Вы пишите (cnt<100)... А что будет, если не 100, а 127? И не 200, а 255? Тогда компараторы могут просто сравнивать только старшие разряды и логика значительно сократится... Т.е. если старший разряд 0, то mode = 0, если 1, то и mode = 1, а если два старших разряда 1, то mode = 2...

Ага, давайте сделаем 128 итераций вместо 100. Какая разница? Ну результат шифрования будет неверный, зато гейты съэкономили.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- drozel   Особенности логики   Dec 17 2015, 08:15
- - masics   1. Словестное описание не соответствует verilog...   Dec 17 2015, 11:32
|- - drozel   Цитата(masics @ Dec 17 2015, 17:32) 1. Сл...   Dec 17 2015, 11:53
- - masics   Да. Так лучше со всех сторон. Включая timing.   Dec 17 2015, 12:20
||- - ZASADA   Цитата(masics @ Dec 17 2015, 16:17) Ага, ...   Dec 17 2015, 18:20
||- - masics   Цитата(ZASADA @ Dec 18 2015, 05:20) никто...   Dec 18 2015, 02:34
||- - Shivers   Цитата(masics @ Dec 18 2015, 05:34) А я б...   Dec 18 2015, 06:36
||- - masics   Цитата(Shivers @ Dec 18 2015, 17:36) 1. С...   Dec 18 2015, 06:40
||- - lexx   Цитата(Shivers @ Dec 18 2015, 10:36) 1. С...   Jan 5 2016, 15:04
|- - iosifk   Цитата(drozel @ Dec 17 2015, 16:02) Хорош...   Dec 17 2015, 13:13
- - Shivers   Я бы еще посоветовал всегда полностью прописывать ...   Dec 17 2015, 15:05
- - drozel   Цитата(masics @ Dec 17 2015, 19:17) 1. А ...   Dec 18 2015, 04:29
|- - masics   Цитата(drozel @ Dec 18 2015, 15:29) а a,b...   Dec 18 2015, 04:34
|- - drozel   Цитата(masics @ Dec 18 2015, 10:34) Есть ...   Dec 18 2015, 04:38
- - Torpeda   1) результат синтеза во многом зависит от: SDC, Fm...   Dec 25 2015, 12:33


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 01:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016