Jump to content

    

VHDL or Verilog

Мне-то хватит, вопрос в том, что синтезируется в результате? Счетчик на 27 бит, или на 32?

Синтезаторы довольно эффективно оптимизируют лишние разряды.

 

Share this post


Link to post
Share on other sites
Синтезаторы довольно эффективно оптимизируют лишние разряды.

 

 

Это если диапазон счета ограничен простой логикой внутри. Как в случае простого счетчика, где сравнивают с константой. Но не всегда диапазон вообще вычислим.

Например, как самое простое. Хочу измерить длину внешнего импульса, зная при этом, что она не может превышать сто миллионов тактов.

Share this post


Link to post
Share on other sites
Хочу измерить длину внешнего импульса, зная при этом, что она не может превышать сто миллионов тактов.

bit [26:0] timer;

Ну, будет с запасом на 30% на уход длительности туды-сюды.

Share this post


Link to post
Share on other sites

интересно, как это на троичные архитектуры ложится? я это к тому, что явное указание диапазона лучше, чем по степеням двойки.

Share this post


Link to post
Share on other sites
bit [26:0] counter;

 

 

И я об этом. Вместо того, чтобы работать в категориях "число от нуля до ста миллионов" программист всё равно должен следить сам за шириной регистров, в которые упакуется это число. Примитивизм. Я, кстати, не помню по памяти значения степеней двойки, превышающие 16.

 

VHDL тоже не идеален в этом смысле, так как диапазон целых ограничен практически 32 битами, вместо того, чтобы поддержать в языке целые произвольной длины. Это уже давным-давно не проблема. Но что есть сейчас всяко лучше, чем отсутствие диапазонов вообще.

Share this post


Link to post
Share on other sites
VHDL тоже не идеален в этом смысле, так как диапазон целых ограничен практически 32 битами, вместо того, чтобы поддержать в языке целые произвольной длины.

А в SV есть :)

longint 2-state data type, 64-bit signed integer

Share this post


Link to post
Share on other sites

64-бита принципиально ни чем не лучше, так как на любое ограничение найдется своя задача.

Было уже и 4 гигабайта и 2000 год... Шерсть клочьями кое-откуда летит ежедневно.

Share this post


Link to post
Share on other sites
А в SV есть :)

longint 2-state data type, 64-bit signed integer

 

 

Без ограничения диапазона? Вместо 33-битного счетчика может 64-битный впихнуть? :)

 

Share this post


Link to post
Share on other sites

Нужную разрядность можно задавать только в топ-модуле, а во вложенных модулях брать с запасом, например:

module top(
   output [3:0] q, 
   input en, clk
);
timer t(q, en, clk);
endmodule

module timer(
   output reg [63:0] q=0, 
   input en, clk
);
reg enreg=0;
always@(posedge clk)
   enreg <= en;
wire start = ~enreg & en;   
always@(posedge clk) 
   if(start) q <= 1;
   else if(en) q <= q + 1;
endmodule

- синтезатор выкинет лишние разряды.

 

Share this post


Link to post
Share on other sites
На мой - минус.

 

Да, это так. Но уровень Вашего познания гораздо выше среднего.

А мне надо среднее.

Share this post


Link to post
Share on other sites
И я об этом. Вместо того, чтобы работать в категориях "число от нуля до ста миллионов" программист всё равно должен следить сам за шириной регистров, в которые упакуется это число. Примитивизм. Я, кстати, не помню по памяти значения степеней двойки, превышающие 16.

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

 

 

В более поздних версиях языка этой проблемы нет, но есть проблема с поддержкой от Xilinx.

 

 

Если кратко. Начинал с VHDL. Перешел на Verilog. Не жалею.

Share this post


Link to post
Share on other sites
Без ограничения диапазона? Вместо 33-битного счетчика может 64-битный впихнуть?

Не впихнет. Вернее, впихнет, но потом ненужное отрежет. Как плохому танцору. :)

А что, в VHDL, сколько битов задашь, столько и будет в проекте?

Даже если переменная integer изменяется в диапазоне 1, 2, 3?

 

Или это уже вообще не относится к сфере ответственности языка? А к синтезатору?

Share this post


Link to post
Share on other sites

Вот вы разные высокоуровневые SV/VHDL-2008 обсуждаете, скажите, вы ресурсы ПЛИС и градации скорости экономите или с запасом закладываете?

Ведь, наверное, нужен запас ресурсов и дополнительная градация скорости на реализацию "несчастливых" участков программы... Тех участков, которые человек может лучше машины сделать.

Или вы выискиваете несчастливые конструкции HDL и стараетесь их не применять?

 

Вообще, вы как высокоуровнево пишете на HDL, как-то иначе, чем низкоуровнево?

 

Share this post


Link to post
Share on other sites
Не впихнет. Вернее, впихнет, но потом ненужное отрежет. Как плохому танцору. :)

А что, в VHDL, сколько битов задашь, столько и будет в проекте?

Даже если переменная integer изменяется в диапазоне 1, 2, 3?

 

Или это уже вообще не относится к сфере ответственности языка? А к синтезатору?

 

"лишние" биты, значение которых нигде не используется, удалятся любым тулзом.

 

Вопрос в том, что бит формально используется, но всегда равен нулю. Например, как в случае со счетчиком, значение которого потом считывается, например, по широкой шине. В этом случае подсказка синтезатору позволяет ему соптимизировать лучше. По крайней мере, в теории.

Share this post


Link to post
Share on other sites
Вообще, вы как высокоуровнево пишете на HDL, как-то иначе, чем низкоуровнево?

стараюсь писать красиво и почему то это очень ровно ложиться на архитектуру целевой плис :biggrin:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this