如何在VHDL中将整数类型转换为无符号

如何在VHDL中将整数类型转换为无符号,vhdl,Vhdl,我试着将两个整数除以如下: 变量m0Low:integer:=0; 变量m1Low:整数:=0; m1Low:=除法(m1Low,m0Low); 具有以下功能: 函数除法(a:无符号;b:无符号)返回无符号是 变量a1:无符号(a'length-1到0):=a; 变量b1:无符号(b'长度-1到0):=b; 变量p1:无符号(b'长度减至0):=(其他=>0'); 变量i:整数:=0; 开始 对于0到b'长度-1循环中的i p1(b'长度-1向下至1):=p1(b'长度-2向下至0); p1(

我试着将两个整数除以如下:

变量m0Low:integer:=0;
变量m1Low:整数:=0;
m1Low:=除法(m1Low,m0Low);
具有以下功能:

函数除法(a:无符号;b:无符号)返回无符号是
变量a1:无符号(a'length-1到0):=a;
变量b1:无符号(b'长度-1到0):=b;
变量p1:无符号(b'长度减至0):=(其他=>0');
变量i:整数:=0;
开始
对于0到b'长度-1循环中的i
p1(b'长度-1向下至1):=p1(b'长度-2向下至0);
p1(0):=a1(a’长度-1);
a1(a'长度-1向下至1):=a1(a'长度-2向下至0);
p1:=p1-b1;
如果(p1(b'长度-1)='1'),则
a1(0):='0';
p1:=p1+b1;
其他的
a1(0):='1';
如果结束;
端环;
返回a1;
端分;
但是,我得到以下错误:
Divide在此上下文中不能有这样的操作数。

我试图将变量强制转换为unsigned
m1Low:=divide(unsigned(m1Low)、unsigned(m0Low))

但我得到了以下错误:
表达式无法转换为unsigned类型。

知道我能做什么吗? 谢谢
Haris

将整数转换为无符号或有符号数据类型

use IEEE.NUMERIC_STD.all;
你必须使用

to_unsigned(I,U’length);
to_signed(I,S’length)
其中I是整数值,U'length是无符号向量长度(位数)

我没有验证你的代码以及它是如何工作的,但我对你代码的更正只是

m1Low := to_integer(divide(to_unsigned(m1Low, N),to_unsigned(m0Low, N)));
您应该指定N,其中向量的长度取决于您的设计。我使用了_integer(),因为您的函数将无符号值返回给整型变量


希望这个简单的注释对您有所帮助。

如果您想将整数作为无符号向量传递,您需要对它们进行转换,而不是进行类型转换

首先,您需要
numeric\u std
库:

use ieee.numeric_std.all;
然后,您可以使用
to_unsigned
将整数转换为无符号向量。对于该函数,您需要知道要转换为的无符号向量的长度,因此请使用
'length
属性:

destination_vector := to_unsigned(source_integer, destination_vector'length);
您可以将无符号转换回整数(无需告知输入的长度,因为函数可以直接获得有关函数输入的信息),如下所示:

destination_integer := to_integer(source_vector);

有什么原因不能直接使用除法运算符吗
m1Low:=m1Low/m0Low
?它给出了一个错误,/符号的右侧部分必须是2的幂!不知道为什么。啊,那是因为你的合成器不够聪明,无法为非静态、非2次方构建分频器。评估更好的(即更昂贵的;()合成工具可能会有所帮助。或者使用CoreGen构建一个分割核心。