Костян 0 5 мая, 2014 Опубликовано 5 мая, 2014 · Жалоба Дано. Сигнал dataIn рязрядностью N. Выходной сигнал dataOut разрядностью N. Усиление gain, разрядностью N. Необходимо домножить dataIn на gain и приравнять старшие разряды к dataOut. Если записать так, то на выходе используется только последний разряд dataOut dataOut <= ((dataIn * gain) >>> N); Данную операцию можно было бы сделать через промежуточный сигнал temp, разрядностью 2*N temp <= dataIn * gain; dataOut <= temp >>> N; Это работает, но как записать в одну строчку без сигнала temp ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 5 мая, 2014 Опубликовано 5 мая, 2014 · Жалоба Это работает, но как записать в одну строчку без сигнала temp ? как-то так dataOut <= (({{{N{dataIN[N-1]}},dataIn} * gain) >>> N); но лучше конечно 2 строчки - читаемость кода! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 5 мая, 2014 Опубликовано 5 мая, 2014 · Жалоба как-то так dataOut <= (({{{N{dataIN[N-1]}},dataIn} * gain) >>> N); но лучше конечно 2 строчки - читаемость кода! Этот способ тоже понятно . Есть еще идея , не проверял , к умножению dataIn * gain прибавить ноль в разрядности 2*N. Т.е datain * gain + {2*N{1'b0}} Гы..рабоает, причем работает в таком виде dataOut <= (dataIn * gain + 0) >>> N; Но скорее всего будут проблемы, если рязрадность больше 16 бит. Так как 0 это 32 бита. Или 64 ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
egorman44 0 5 мая, 2014 Опубликовано 5 мая, 2014 · Жалоба Так как 0 это 32 бита. Или 64 ? :) по умолчанию 32 бита. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 5 мая, 2014 Опубликовано 5 мая, 2014 · Жалоба а можно и так wire [2*N - 1 : 0] GainedDataIn; assign GainedDataIn = dataIn * gain; dataOut <= GainedDataIn [2*N - 1 -: N] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 5 мая, 2014 Опубликовано 5 мая, 2014 · Жалоба а можно и так wire [2*N - 1 : 0] GainedDataIn; assign GainedDataIn = dataIn * gain; dataOut <= GainedDataIn [2*N - 1 -: N] Ну это тоже самое, что и выше с temp. Да и писанины много с квадратными скобками, вся соль в использовании сдвига >>> по умолчанию 32 бита. да,верно, даже не смотря на то, что синтезатор в 64битном режиме запушен. Но вместо нуля я записал 64'h0. Так более универсально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thodnev 0 8 мая, 2014 Опубликовано 8 мая, 2014 (изменено) · Жалоба Дано. Сигнал dataIn рязрядностью N. Выходной сигнал dataOut разрядностью N. Усиление gain, разрядностью N. Необходимо домножить dataIn на gain и приравнять старшие разряды к dataOut. В данном случае вариант с temp будет оптимальным Изменено 8 мая, 2014 пользователем thodnev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 11 мая, 2014 Опубликовано 11 мая, 2014 · Жалоба temp <= dataIn * gain; dataOut <= temp >>> N; Это работает, но как записать в одну строчку без сигнала temp ? Теоретически, должна работать следующая конструкция: assign R = ( (N*2)'(A*B) ) >> N; Но Квартус, к примеру, ее синтезирует в 0. Для Квартуса годится конструкция подлиннее: assign R = ((N*2)'(A) * (N*2)'(B)) >> N; Есть еще вариант с временной переменной, но в одну строчку: input [15:0] A, B; output [15:0] R; logic [15:0] T; assign {R,T} = (A * B); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба чего то ISE не оценил конструкции вида 10'(Signal) и (10)'(Signal) и послал меня с синтаксической ошибкой... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба чего то ISE не оценил конструкции вида 10'(Signal) и (10)'(Signal) и послал меня с синтаксической ошибкой... Конструкция легальная. В ISE не пробовал, а Квартус не жалуется - правда желаемый результат выдает только с последними 2-мя вариантами. Покажите тестовый код и сообщение об ошибке - может действительно где-нибудь ошибка случайно вышла... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба ERROR:HDLCompiler:806 - "\\vboxsrv\octonusrepository\SYNC_MOTOR\FPGA\StatisticModule_v3_00.v" Line 395: Syntax error near "'". 359 линия это BitSendCounter <= 5'(BitSendCounter - 1'b1); или BitSendCounter <= 5'(BitSendCounter - 1); или BitSendCounter <= 5'(BitSendCounter) - 1; или BitSendCounter <= (5)'(BitSendCounter) - 1; или BitSendCounter <= (BIT_TO_SEND_COUNT)'(BitSendCounter) - 1; или ERROR:HDLCompiler:806 - "\\vboxsrv\octonusrepository\SYNC_MOTOR\FPGA\StatisticModule_v3_00.v" Line 395: Syntax error near "itSendCounter" BitSendCounter <= 5'BitSendCounter - 1; ну потому что 5'B - распозналось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба ERROR:HDLCompiler:806 - "\\vboxsrv\octonusrepository\SYNC_MOTOR\FPGA\StatisticModule_v3_00.v" Line 395: Syntax error near "'". А это потому, что конструкция SV, а Вы компилируете ваш файл как Verilog (что, в принципе, соответствует его расширению). :smile3046: Поменяйте настройки компиляции так, чтобы StatisticModule_v3_00.v ISE компилировал как SystemVerilog и будет Вам счастье. :) или ERROR:HDLCompiler:806 - "\\vboxsrv\octonusrepository\SYNC_MOTOR\FPGA\StatisticModule_v3_00.v" Line 395: Syntax error near "itSendCounter" BitSendCounter <= 5'BitSendCounter - 1; ну потому что 5'B - распозналось Дело в том, что конструкция должна быть именно size'( expression ) - т.е. последние скобки обязательны. Если size тоже выражение, то и его придется заключить в скобки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 мая, 2014 Опубликовано 12 мая, 2014 · Жалоба а ну тоды все понятно... про verilog же речь шла, и мне для него же было нужно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться