gosha 0 20 февраля, 2021 Опубликовано 20 февраля, 2021 · Жалоба reg signed [23:0] KI; reg signed [22:0] KP; reg signed [24:0] freq_offest; always @(posedge clk_i or posedge rst_i) begin ..... freq_offset<= KI + KP; Отладка в Vivado 2019: KI=== -(24'd50973); KP=== (23'd1099); на следующем такте вижу: freq_offset == 25'd54456; Как так ?? Что делаю не правильно ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 февраля, 2021 Опубликовано 20 февраля, 2021 · Жалоба module pipa ; reg signed [23:0] KI; reg signed [22:0] KP; reg signed [24:0] freq_offset; initial begin KI = -(24'd50973); KP = (23'd1099); freq_offset = KI + KP; $display("%0d", freq_offset); $stop; end endmodule Quote # -49874 все работает. Может быть в этом причина Quote reg signed [24:0] freq_offest freq_offset<= KI + KP; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha 0 20 февраля, 2021 Опубликовано 20 февраля, 2021 · Жалоба Just now, des00 said: reg signed [23:0] KI; reg signed [22:0] KP; reg signed [24:0] freq_offset; reg [1:0]cnt; /*========================================================================*/ always @(posedge clk or posedge rst) begin if(rst) begin KI <= -(24'd50973); KP <= (23'd1099); freq_offset <= 0; cnt<= 1'b0; end else begin freq_offset <= KI + KP; cnt<= cnt + 1'b1; if(&cnt) begin $display("freq_offset=%0d", freq_offset); $finish; end end end Спасибо !! # KERNEL: freq_offset=-49874 Смотрю значение на следующем такте. В aldec при моделировании работает. А в Vivado 2019, в кристалле - нет. Может, какие опции компиляции ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 21 февраля, 2021 Опубликовано 21 февраля, 2021 · Жалоба А что показывает синтезированный нетлист? По идее должно использовать DSP, иначе не получится через обычный сумматор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 февраля, 2021 Опубликовано 22 февраля, 2021 · Жалоба On 2/20/2021 at 5:14 PM, gosha said: ну какие опции. этож банальная математика курса средней школы. ее нельзя по другому выполнить. Максимум что может произойти это отсутствие расширения знака у чисел с меньшей разряностью. -(24'd50973) = 24'hFF_38E3, (23'd1099) = 23'h00_044B. При сложении с неправильным расширением знака будет 25'h0FF_3D2E (25'd16727342). При правильном 25'h1FF_3D2E = -(25'd49874). Ваши 25'd54456 = 25'hD4B8 ну никак не получаются. От слова совсем. Если в функциональном симуляторе у вас все работает, а в вивадо и его симуляторе нет, то либо вы смотрите не туда, либо это временная симуляция с неправильными таймингами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 22 февраля, 2021 Опубликовано 22 февраля, 2021 (изменено) · Жалоба Используйте 'sd или 'sh, разрядность в битах можно опустить. Изменено 22 февраля, 2021 пользователем lexx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
likeasm 0 5 марта, 2021 Опубликовано 5 марта, 2021 · Жалоба Может сброс забыли синхронизировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hlebn 0 10 апреля, 2021 Опубликовано 10 апреля, 2021 · Жалоба В прошлом сталкивался с подобным поведением сложения знаковых переменных с разной разрядностью в среде Xilinx. код был схож с тем что выше. Так вот там сумма была и правильной и неправильной. результат зависел от порядка переменных. То есть сумма меняла значение от перестановки слагаемых. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться