[an error occurred while processing this directive]
|
вот тот пример, какой хотел реализовать, только конечно он в строчку поместиться, но все равно это не красиво... Цель его - параметризация расчета по модулю счета вычисление ширины счетчика, либо ещё где-нибудь. Кто реализовывал log2(A) в Veriloge, Вы бы мне очень помогли.
module funct();
//wire [f_width(2):0] C ;
//!!! Верилог ругается: в объявлении векторов должна быть константа
function integer f_width;
// Входы
input A;
//---------------------------------------------------- // Объявление сигналов:
integer A;
//---------------------------------------------------- // Основной код
f_width =
(1<= A < 2)? 1:
(2<= A < 4)? 2:
(4<= A < 8)? 3:
(8<= A < 16)? 4:
(16<= A < 32)? 5:
(32<= A < 64)? 6:
(64<= A < 128)? 7:
(128<= A < 256)? 8:
(256<= A < 512)? 9:
(512<= A < 1_024)? 20:
(1_024<= A < 2_048)? 21:
(2_048<= A < 4_096)? 22:
(4_096<= A < 8_192)? 23:
(8_192<= A < 16_384)? 24:
(16_384<= A < 32_768)? 25:
(32_768<= A < 65_536)? 26:
(65_536<= A < 131_072)? 27:
(131_072<= A < 262_144)? 28:
(262_144<= A < 524_288)? 29:
(524_288<= A < 1_048_576)? 20:
(1_048_576<= A < 2_097_152)? 11:
(2_097_152<= A < 4_194_304)? 12:
(4_194_304<= A < 8_388_608)? 13:
(8_388_608<= A < 16_777_216)? 14:
(16_777_216<= A < 33_554_432)? 15:
(33_554_432<= A < 67_108_864)? 16:
(67_108_864<= A < 134_217_728)? 17:
(134_217_728<= A < 268_435_456)? 18:
(268_435_456<= A < 536_870_912)? 19:
(536_870_912<= A < 1_073_741_824)? 30:
(1_073_741_824<= A < 2_147_483_648)? 31:
32;
endfunction // MaZZi'S ZoNE
//initial begin
//$display("don't correct A=%d , you must enter integer number 0 < A < 4_294_967_296", A);
//end
endmodule
E-mail: info@telesys.ru