Serega Doc 0 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Как написать быстрое сравнение безннаковых чисел на больше меньше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anton_org 0 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Вот простой вариант для 48 разрядных чиселок. reg data0[47:0]; reg data1[47:0]; reg diff[48:0] always @(posedge clk ....) diff<={1'b0, data0}-{1'b0,data1}; assign sing=diff[48]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Что синтезированная схема сравнения будет медленнее работать чем вычитатор? Мне нужно так чтобы синтез в Quartus показал наибольшую скорость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Что синтезированная схема сравнения будет медленнее работать чем вычитатор? Мне нужно так чтобы синтез в Quartus показал наибольшую скорость. <{POST_SNAPBACK}> ХЗ как будет работать синтезированная схема сравнения, но вот этот код занял в 4.2 циклон, отдельный модуль 49 ячеек на 275 метрах по квартусу (кстати Антон спасибо, я благодаря вам я выиграл пиво) :cheers: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acex2 0 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Как написать быстрое сравнение безннаковых чисел на больше меньше? <{POST_SNAPBACK}> Самый быстрый (и ресурсоемкий) вариант - это на базе ROM (адрес - числа, данные - результат сравнения). Если числа большой разрядности - то делим их на части и результат сравнения каждой части выдаем еще на одну ROM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Не знаю как отдельно но в блоке простое сравнение работает быстрее чем вычитание Synplify_8 -> Quartus 4.2 --- Cyclon -8 A и B 8bit A-B - 156 MHz 100 LUt - думаю не самое оптимальное решение A>B - 175 MHz 98 LUt Надеюсь что у когото получится лучше организовать сравнение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yra 4 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Если не жалко функциональных генераторов, делаем на комбинаторике структура боевая, работает в живую: /************************************************************************** ** Двухпороговый компаратор 6/5-битного аргумента с ** ** порогом/инв.порогом результат: Solution=1 - превышен один из порогов, ** ** nInverse='1' - прямой порог, nInverse='0' - инверсный порог ** **************************************************************************/ module Comparator (input wire [5:0] InputArgument, InputThreshold, input wire Mode63_n31, output reg Solution, nInverse ); always @(InputArgument, InputThreshold, Mode63_n31) if ( {Mode63_n31 & InputArgument[5], InputArgument[4:0]} >= {Mode63_n31 & (~ InputThreshold[5]), ~ InputThreshold[4:0]} ) begin Solution = 1'b1; nInverse =1'b1; end else if ( {Mode63_n31 & InputArgument[5], InputArgument[4:0]} <= {Mode63_n31 & InputThreshold[5], InputThreshold[4:0]} ) begin Solution = 1'b1; nInverse =1'b0; end else begin Solution = 1'b0; nInverse =1'b0; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 апреля, 2005 Опубликовано 14 апреля, 2005 · Жалоба Не знаю как отдельно но в блоке простое сравнение работает быстрее чем вычитание Synplify_8 -> Quartus 4.2 --- Cyclon -8 A и B 8bit A-B - 156 MHz 100 LUt - думаю не самое оптимальное решение A>B - 175 MHz 98 LUt Надеюсь что у когото получится лучше организовать сравнение. <{POST_SNAPBACK}> хмм Антоном то приведен совершенно другой варант, ему не нужна вся разность, его интересует только знаковый бит !!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
belena7 0 14 апреля, 2005 Опубликовано 14 апреля, 2005 · Жалоба Ispolzui MegaFunction ona optimizirovana imenno dlya dannogo device Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 14 апреля, 2005 Опубликовано 14 апреля, 2005 · Жалоба 2 belena7 Писал просто A>B скорость 175 MHz Пользовал LPM получал 156 MHz В чем загадка? 2 des00 А как вы получите знак не выполнив вычитания? Или diff<={1'b0, data0}-{1'b0,data1}; -это не 49 битные операнды? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 15 апреля, 2005 Опубликовано 15 апреля, 2005 · Жалоба 2 des00 А как вы получите знак не выполнив вычитания? Или diff<={1'b0, data0}-{1'b0,data1}; -это не 49 битные операнды? <{POST_SNAPBACK}> Вот этот код module proj ( input sys_clk, input [47:0] data0, input [47:0] data1, output sing ); wire [47:0] data0, data1; wire sing; reg [48:0] d; assign sing = d[48]; always @(posedge sys_clk) begin d <= {1'b0,data0} - {1'b0,data1}; end endmodule Вот отчеты синтезатора +-----------------------------------------------------------------------+ ; Fitter Summary ; +-----------------------+-----------------------------------------------+ ; Fitter Status ; Successful - Wed Apr 13 17:49:41 2005 ; ; Quartus II Version ; 4.2 Build 178 01/19/2005 SP 1 SJ Full Version ; ; Revision Name ; Bosik ; ; Top-level Entity Name ; Bosik ; ; Family ; Cyclone ; ; Device ; EP1C6F256C8 ; ; Timing Models ; Final ; ; Total logic elements ; 49 / 5,980 ( < 1 % ) ; ; Total pins ; 98 / 185 ( 52 % ) ; ; Total virtual pins ; 0 ; ; Total memory bits ; 0 / 92,160 ( 0 % ) ; ; Total PLLs ; 0 / 2 ( 0 % ) ; +-----------------------+-----------------------------------------------+ +---------------------------------------------------------------------------------------------------------------------------------------------------+ ; Timing Analyzer Summary ; +------------------------------+-------+---------------+-------------+-------------------+-------------------+------------+----------+--------------+ ; Type ; Slack ; Required Time ; Actual Time ; From ; To ; From Clock ; To Clock ; Failed Paths ; +------------------------------+-------+---------------+-------------+-------------------+-------------------+------------+----------+--------------+ ; Worst-case tsu ; N/A ; None ; 8.629 ns ; B[19] ; Compar:inst|d[48] ; ; Clock ; 0 ; ; Worst-case tco ; N/A ; None ; 8.353 ns ; Compar:inst|d[48] ; AGB ; Clock ; ; 0 ; ; Worst-case th ; N/A ; None ; -1.691 ns ; A[39] ; Compar:inst|d[48] ; ; Clock ; 0 ; ; Total number of failed paths ; ; ; ; ; ; ; ; 0 ; +------------------------------+-------+---------------+-------------+-------------------+-------------------+------------+----------+--------------+ При запросе максимальной тактовой в 475 метров квартус ругнулся Clock Setup: 'Clock' N/A 475.06 MHz ( period = 2.105 ns ) Restricted to 275.03 MHz ( period = 3.636 ns ) Compar:inst|d[48] AGB Clock Cloc вот еще оттуда Info: Clock "Clock" Internal fmax is restricted to 275.03 MHz between source register "Compar:inst|d[48]" and destination register "AGB" Info: fmax restricted to Clock High delay (1.818 ns) plus Clock Low delay (1.818 ns) : restricted to 3.636 ns. Expand message to see actual delay path. Info: + Longest register to register delay is 1.049 ns Info: 1: + IC(0.000 ns) + CELL(0.000 ns) = 0.000 ns; Loc. = LC_X33_Y14_N9; Fanout = 1; REG Node = 'Compar:inst|d[48]' Info: 2: + IC(0.740 ns) + CELL(0.309 ns) = 1.049 ns; Loc. = LC_X32_Y14_N0; Fanout = 0; REG Node = 'AGB' Info: Total cell delay = 0.309 ns ( 29.46 % ) Info: Total interconnect delay = 0.740 ns ( 70.54 % ) Info: - Smallest clock skew is 0.000 ns Info: + Shortest clock path from clock "Clock" to destination register is 2.962 ns Info: 1: + IC(0.000 ns) + CELL(1.469 ns) = 1.469 ns; Loc. = PIN_H1; Fanout = 2; CLK Node = 'Clock' Info: 2: + IC(0.782 ns) + CELL(0.711 ns) = 2.962 ns; Loc. = LC_X32_Y14_N0; Fanout = 0; REG Node = 'AGB' Info: Total cell delay = 2.180 ns ( 73.60 % ) Info: Total interconnect delay = 0.782 ns ( 26.40 % ) Info: - Longest clock path from clock "Clock" to source register is 2.962 ns Info: 1: + IC(0.000 ns) + CELL(1.469 ns) = 1.469 ns; Loc. = PIN_H1; Fanout = 2; CLK Node = 'Clock' Info: 2: + IC(0.782 ns) + CELL(0.711 ns) = 2.962 ns; Loc. = LC_X33_Y14_N9; Fanout = 1; REG Node = 'Compar:inst|d[48]' Info: Total cell delay = 2.180 ns ( 73.60 % ) Info: Total interconnect delay = 0.782 ns ( 26.40 % ) Info: + Micro clock to output delay of source is 0.224 ns Info: + Micro setup delay of destination is 0.037 ns Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 22 апреля, 2005 Опубликовано 22 апреля, 2005 · Жалоба На самом деле у меня кроме сравнеия еще и простейшие вычисления (сложение и вычитание) в зависимости от результатов сравнения. Наилучшие результаты -8 Cyclon показал при использовании LPM блока сравнения, а суматоры синтезированные с помощью синтезатора. Все разогналось до 189 MHz. Больше выжать не удалось. :( А по поводу простой схемы сравнения, то предельные 275 MHz легко получаются у любого LPM (и сравнение и вычитание) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 апреля, 2005 Опубликовано 22 апреля, 2005 · Жалоба На самом деле у меня кроме сравнеия еще и простейшие вычисления (сложение и вычитание) в зависимости от результатов сравнения. <{POST_SNAPBACK}> может я туплю но решение через тригерочек и на слуд суматор/вычитатель ?? правда задержка появиться, зато частотка увеличиться :)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 0 23 апреля, 2005 Опубликовано 23 апреля, 2005 · Жалоба Я вот открыл свой учебник времён универа, вот что есть по поводу сравнения чисел, может будет полезно: Логические уравнения для сравнения чисел строятся исходя из следующих соображений. Если в старшем разряде слова А - единица, а В - ноль, то независимо от младших разрядов имеем A>B. Если равны - анализируются младшие разряды. Думаю идея понятна. И кажись Альтера строит дерево компараторов именно этим способом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться