Jump to content

    

Оптимизация quartus

On 6/28/2019 at 7:50 PM, Flip-fl0p said:

А шо это за такой супер-секретный код, который не работает, а мы аки Настрадамусы угадать пытаемся где заковыка ? Может лучше выложить этот код сюда, тогда и сразу конструктивный диалог состоится...

Вот выложил те самые не рабочие на практике исходники, они находятся в рамках общего большого проекта - топ "не рабочих" исходников исходников - TPO

Там же скрины того что пишет оптимизатор и тополоджи мап

https://dropmefiles.com/v6ydt

On 6/29/2019 at 8:09 AM, des00 said:

где то отображение портов на чип побилось, вот и итог

попробовал на другом компе с вновь установленной quartus

Подскажите пожалуйста куда посмотреть

Share this post


Link to post
Share on other sites
On 7/1/2019 at 8:51 AM, Doka said:

эту гипотезу легко проверить синтезнув в режиме out-of-context (или как он в квартус называется)

это как ?, можно поподробнее?

On 7/1/2019 at 5:25 PM, blackfin said:

Нужно сделать все пины (кроме входного clock'а) виртуальными.

 

не подскажите как это сделать?

Share this post


Link to post
Share on other sites
6 часов назад, another_one сказал:

Вот выложил те самые не рабочие на практике исходники, они находятся в рамках общего большого проекта - топ "не рабочих" исходников исходников - TPO

Там же скрины того что пишет оптимизатор и тополоджи мап

https://dropmefiles.com/v6ydt

попробовал на другом компе с вновь установленной quartus

Подскажите пожалуйста куда посмотреть

Смотреть надо на код и очень внимательно. Ткнул я в Ваши файлы. и слегка СИЛЬНО ! ужаснулся.

Например модуль timer8bit - это же тихий ужас. Работа по двум фронтам. Да ещё из разных always блоков с одним регистром...

С модулем timer16bit ситуация та-же. Сделайте правильно один таймер, и меняйте его коэффициент пересчета при помощи параметров.

Бегло просмотрел другие модули - там тоже жуть жуткая. Мало того ,что код абсолютно не читаемый. Комментариев нет. Форматирования нет. Так ещё по стилю похоже что Вы пытаетесь писать на HDL также как и в программировании. Такой подход с FPGA не пройдет. 

if(cnt_g == st_param + k_param + a_param + c_param + d_param + (e_param - b_param))

Я даже представить боюсь во что такое будет синтезироваться. Учитывая, что почти все сигналы формируются в разных доменах, да ещё и по разным фронтам.... :shok:

Извините меня, мне конечно ещё самому учиться и учиться. Но я бы за такой код бил по рукам сильно ругал сотрудника

Share this post


Link to post
Share on other sites
14 hours ago, another_one said:

Вот выложил те самые не рабочие на практике исходники, они находятся в рамках общего большого проекта - топ "не рабочих" исходников исходников - TPO

Там же скрины того что пишет оптимизатор и тополоджи мап

https://dropmefiles.com/v6ydt

попробовал на другом компе с вновь установленной quartus

Подскажите пожалуйста куда посмотреть

вы меня за прямоту извините, но

1. Квартус же вам черным по белому пишет : опрокинут в ноль из-за замороженного порта бла-бла-бла

2. Вы просите помочь с сорцами, но вам сложно сделать qar чтоб человек развернул ваш проект и посмотрел?

3. Вот это вот, вам убрать не приходило в голову?

Warning (10236): Verilog HDL Implicit Net warning at Sdram_driver.v(351): created implicit net for "ready"
Warning (10236): Verilog HDL Implicit Net warning at Sdram_driver.v(364): created implicit net for "otrig"
Warning (10236): Verilog HDL Implicit Net warning at star1000.v(150): created implicit net for "trig3"
Warning (10236): Verilog HDL Implicit Net warning at TPO.v(84): created implicit net for "extrig"
Warning (10036): Verilog HDL or VHDL warning at serial.v(48): object "cnt_2c" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(49): object "cnt2_2c" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(50): object "odatar2" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(52): object "en4" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(53): object "nas" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(55): object "kadr_cnt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(64): object "cen" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(65): object "tre" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(68): object "tre3" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(69): object "tre4" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(73): object "comres_reg" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(75): object "start" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(76): object "cnt_p" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(78): object "RESET_reg" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(79): object "c_res_flag" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(80): object "clk_cnt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(81): object "clk_reg" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(82): object "start_X" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(83): object "del_cnt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(84): object "CLK_ADC" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(85): object "start_2" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(86): object "uen" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(88): object "clk_reg_was" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(90): object "sendcomplt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(91): object "uend" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(92): object "fsend" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(98): object "delay_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(104): object "flag_end" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at serial.v(109): object "ttw_transit" assigned a value but never read
Warning (10230): Verilog HDL assignment warning at serial.v(55): truncated value with size 21 to match size of target (1)
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(351): object "ready" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(90): object "_256cnt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(93): object "adc2_rd_en" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(94): object "adc1_rd_en" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(95): object "prev_adc1_dout" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(96): object "sdram_enable" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(97): object "sdram_wr" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(98): object "sdram_byte_en" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(99): object "sdram_adress" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(100): object "sram_dout" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(101): object "flag_sram_rd" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(102): object "rst_flag_sram_rd" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(103): object "set_flag_sram_rd" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(104): object "sram_rd_adr" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(105): object "sram_wr_adr" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(106): object "set_ack" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(150): object "parity" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(193): object "rdcnt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(197): object "trig" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(199): object "rows" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(200): object "columns" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(202): object "nLB_Oreg" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(203): object "nUB_Oreg" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(205): object "nCS_Oreg" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(206): object "wcntofpic" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at Sdram_driver.v(207): object "DAT_Oreg" assigned a value but never read
Warning (10230): Verilog HDL assignment warning at Sdram_driver.v(292): truncated value with size 32 to match size of target (8)
Warning (10230): Verilog HDL assignment warning at Sdram_driver.v(297): truncated value with size 32 to match size of target (8)
Warning (10230): Verilog HDL assignment warning at Sdram_driver.v(302): truncated value with size 32 to match size of target (8)
Warning (10230): Verilog HDL assignment warning at Sdram_driver.v(307): truncated value with size 32 to match size of target (8)
Warning (10235): Verilog HDL Always Construct warning at Sdram_driver.v(498): variable "cntof256k" is read inside the Always Construct but isn't in the Always Construct's Event Control
Warning (10230): Verilog HDL assignment warning at Sdram_driver.v(501): truncated value with size 18 to match size of target (4)
Warning (10240): Verilog HDL Always Construct warning at Sdram_driver.v(494): inferring latch(es) for variable "cntof256k", which holds its previous value in one or more paths through the always construct
Warning (10030): Net "rrts" at Sdram_driver.v(40) has no driver or initial value, using a default initial value '0'
Warning (10034): Output port "odata" at Sdram_driver.v(43) has no driver
Warning (10034): Output port "nUB" at Sdram_driver.v(25) has no driver
Warning (10034): Output port "nLB" at Sdram_driver.v(26) has no driver
Warning (10034): Output port "nOE" at Sdram_driver.v(27) has no driver
Warning (10034): Output port "request_to_serial" at Sdram_driver.v(44) has no driver
Warning (10036): Verilog HDL or VHDL warning at star1000.v(42): object "cnttt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(44): object "cnt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(45): object "cntt" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(46): object "cnt_2c" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(47): object "cnt2_2c" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(48): object "odatar2" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(51): object "nas" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(52): object "tt_was" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(56): object "uclk" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(61): object "cen" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(62): object "tre" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(63): object "start_send" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(64): object "stop_send" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(66): object "tre2" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(67): object "tre3" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(68): object "tre4" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(91): object "uen" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(92): object "trig_was" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(94): object "entr" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(98): object "capv_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(99): object "delay_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(100): object "delay2_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(108): object "f_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(109): object "g_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(113): object "l_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(114): object "m_param" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(117): object "xy_tout" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(123): object "X_sel" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(125): object "cnt_clr" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(127): object "Y_was" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(131): object "ADC_DATA" assigned a value but never read
Warning (10036): Verilog HDL or VHDL warning at star1000.v(132): object "Y_2s" assigned a value but never read
Warning (10230): Verilog HDL assignment warning at star1000.v(599): truncated value with size 11 to match size of target (10)
Warning (10235): Verilog HDL Always Construct warning at star1000.v(693): variable "cnt_CA" is read inside the Always Construct but isn't in the Always Construct's Event Control
Warning (10235): Verilog HDL Always Construct warning at star1000.v(694): variable "cnt_CA" is read inside the Always Construct but isn't in the Always Construct's Event Control
Warning (10235): Verilog HDL Always Construct warning at star1000.v(696): variable "start_conversion" is read inside the Always Construct but isn't in the Always Construct's Event Control
Warning (10240): Verilog HDL Always Construct warning at star1000.v(690): inferring latch(es) for variable "cnt_CA", which holds its previous value in one or more paths through the always construct
Warning (10235): Verilog HDL Always Construct warning at star1000.v(705): variable "cnt_CA" is read inside the Always Construct but isn't in the Always Construct's Event Control
Warning (10235): Verilog HDL Always Construct warning at star1000.v(706): variable "S_ADC_DATA" is read inside the Always Construct but isn't in the Always Construct's Event Control
Warning (10034): Output port "oreg" at star1000.v(29) has no driver
Warning (10034): Output port "S_TRI_M1" at star1000.v(23) has no driver
Warning (10034): Output port "S_TRI_M2" at star1000.v(24) has no driver
Warning (10034): Output port "ramen" at star1000.v(28) has no driver

а выбрасывает верно, ответ почему, в одном из предупреждений. Либо вы сами, либо кто-то еще, поправил/испортил сорцы. система контроля версий подскажет.

ЗЫ. Дабы не быть голословным и поверхностным, ответ в 154 ом сообщении из 298, окна Processing, если произвести синтез вашего проекта в 9.1sp2 64 бит, для сыклона 3 пятерки

Share this post


Link to post
Share on other sites
17 hours ago, another_one said:

не подскажите как это сделать?

Попробуйте для начала аккуратно переписать исходники. Вам сам же будет проще разобраться. Вот на примере таймера:

module timer16bit
(
    input bit       clk,
    input bit       reset,
    input bit[15:0] capv,
    input bit       en
    output bit      trig
);
    bit[15:0] counter;

    always_ff @(posedge clk) begin
        if (reset) begin
            counter <= '0;
            trig    <= '0;
        end
        else if (en) begin
            trig    <= '0;
            counter <= counter + 1;
            if (counter == trig) begin
                trig    <= '1;
                counter <= '0;
            end
        end
    end
endmodule

Далее, почитайте книжки по проектированию на HLD (От Альтеры был вроде какой-то Programming Guide, еще рекомендуют HDL chip design), стандарт языка.

Сразу же активно осваивайте симуляторы Questa/Model sim, привыкайте делать тестбенчи.

Share this post


Link to post
Share on other sites
12 hours ago, Flip-fl0p said:

Смотреть надо на код и очень внимательно. Ткнул я в Ваши файлы. и слегка СИЛЬНО ! ужаснулся.

Например модуль timer8bit - это же тихий ужас. Работа по двум фронтам. Да ещё из разных always блоков с одним регистром...

С модулем timer16bit ситуация та-же. Сделайте правильно один таймер, и меняйте его коэффициент пересчета при помощи параметров.

Бегло просмотрел другие модули - там тоже жуть жуткая. Мало того ,что код абсолютно не читаемый. Комментариев нет. Форматирования нет. Так ещё по стилю похоже что Вы пытаетесь писать на HDL также как и в программировании. Такой подход с FPGA не пройдет. 


if(cnt_g == st_param + k_param + a_param + c_param + d_param + (e_param - b_param))

Я даже представить боюсь во что такое будет синтезироваться. Учитывая, что почти все сигналы формируются в разных доменах, да ещё и по разным фронтам.... :shok:

Извините меня, мне конечно ещё самому учиться и учиться. Но я бы за такой код бил по рукам сильно ругал сотрудника

А что не так с доменами?, я делаю специально один always на один сигнал и поэтому 2 разных фронта имеет место быть. Наоборот стиль программиста это в один always пихать все сигналы как в функцию.

Share this post


Link to post
Share on other sites
9 minutes ago, another_one said:

А что не так с доменами?, я делаю специально один always на один сигнал и поэтому 2 разных фронта имеет место быть. Наоборот стиль программиста это в один always пихать все сигналы как в функцию.

Работа по двум фронтам - удел узкоспециализированных применений (DDR), либо ошибка в проектировании. Грубо говоря, квартусу в два раза сложнее удовлетворить временные ограничения.

Share this post


Link to post
Share on other sites
13 часов назад, Flip-fl0p сказал:

Бегло просмотрел другие модули - там тоже жуть жуткая. Мало того ,что код абсолютно не читаемый. Комментариев нет. Форматирования нет. Так ещё по стилю похоже что Вы пытаетесь писать на HDL также как и в программировании. Такой подход с FPGA не пройдет. 

Солидарен...

Такой код сложно писать и отлаживать. Это пример "как не надо делать ни в коем случае"... Или по простому "расстрельная статья"...

А на самом деле - метод проектирования надо менять. Все делается гораздо, гораздо легче и быстрее...

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