Funciones matemáticas de la sintaxis de Verilog

        Verilog-2005 admite algunas funciones matemáticas simples y los tipos de datos de sus parámetros solo pueden ser enteros y reales.

Función matemática de tipo entero

        $clog2 es una función logarítmica de base 2, el resultado se redondea y el formato típico del valor de retorno es:

resultado entero;

resultado = $obstrucción2(n);

        La aplicación más típica es encontrar el ancho de bits de una variable por medio de la parametrización.El uso se ha presentado en detalle en otro artículo: ¿Cómo igualar el ancho de bits de una variable en el diseño de Verilog? ($función del sistema obstruir2)

Función matemática de tipo real

        Su tipo de datos de parámetro es de tipo real, y el valor de retorno también es de tipo real, lo que significa que las siguientes funciones matemáticas no se pueden sintetizar:

Función Descripción
$ln(x) N logaritmo natural (logaritmo en base e)
$log10(x) Logaritmo decimal (logaritmo en base 10)
exp(x) e^x,e=2.718281828...
sqrt(x) raíz cuadrada
$poder(x, y) x^y
$piso(x) redondear a la baja
$ techo (x) Redondeado
$hipot(x, y) sqrt(xx + yy). Cuadrado y raíz de dos números
$sin(x) pecado
$cos(x) porque
$tan(x) broncearse
$asen(x) arcsen
$acos(x) arccos
$atán(x) arccos
$atán2(x, y) arcotangente de x/y
$nacimiento(x) seno hiperbólico
$cosh(x) coseno hiperbólico
$bronceado(x) tangente hiperbólica
$asinh(x) seno hiperbólico inverso
$acosh(x) coseno hiperbólico inverso
$atanh(x) tangente hiperbólica inversa

        Escriba un banco de pruebas simple para modelsim para verificar:

module tb_math_fuc;
	real x, y;		//这些函数的参数需要是real类型,返回也是real类型

initial begin		//0.3f表示取小数点后3位,下同
    x = 10000;$display("$log10(%0.3f) = %0.3f", x, $log10(x));				//以10为底的对数	
    x = 1;$display("$ln(%0.3f) = %0.3f", x, $ln(x));						//以e为底的对数
    x = 2;$display("$exp(%0.3f) = %0.3f", x, $exp(x));						//e^x
    x = 25;$display("$sqrt(%0.3f) = %0.3f", x, $sqrt(x));					//开平方
    x = 5;y = 3;$display("$pow(%0.3f, %0.3f) = %0.3f", x, y, $pow(x, y));	//x^y
    x = 2.7813;$display("$floor(%0.3f) = %0.3f", x, $floor(x));				//向下取整
    x = 7.1111;$display("$ceil(%0.3f) = %0.3f", x, $ceil(x));				//向上取整
	
    x = 30 * (22.0/7.0) / 180;$display("$sin(%0.3f) = %0.3f", x, $sin(x));	//sin函数
    x = 90 * (22.0/7.0) / 180;$display("$cos(%0.3f) = %0.3f", x, $cos(x));	//cos函数
    x = 45 * (22.0/7.0) / 180;$display("$tan(%0.3f) = %0.3f", x, $tan(x));	//tan函数
	
    x = 0.5;$display("$asin(%0.3f) = %0.3f rad, %0.3f deg", x, $asin(x), $asin(x) * 7.0/22.0 * 180);//arcsin函数
    x = 0;$display("$acos(%0.3f) = %0.3f rad, %0.3f deg", x, $acos(x), $acos(x) * 7.0/22.0 * 180);	//arccos函数
    x = 1;$display("$atan(%0.3f) = %0.3f rad, %f deg", x, $atan(x), $atan(x) * 7.0/22.0 * 180);		//arctan函数
	
end

endmodule

        Aquí está el resultado de la verificación:

Supongo que te gusta

Origin blog.csdn.net/wuzhikaidetb/article/details/128990633
Recomendado
Clasificación