conersion de número real para número inteiro em VHDL

K

kaushiksangam

Guest
Quero converter números reais para números inteiros em VHDL.

Os números reais que estou usando estão entre -1 e 1.Por exemplo, eu gostaria de converter o número -0,67857 para um 18 bits assinado representação.

Alguém por favor pode me ajudar com este otu.

 
Primeiro de tudo, o que você quer dizer com a conversão de números reais para inteiros?
Você quer dizer que os representam se de ponto flutuante?
Se o que você precisa é de representar um número real em ponto fixo binário, então você precisa primeiro escolher quantos bits para a parte inteira e quanto para a parte fracionária.No caso do intervalo [-1 1], supondo que você irá usar uma representação complemento de 2, você vai precisar de 2 bits para a parte inteira, se você usar só um pouco, do que o intervalo será [-1 0,99 ... ].
Se você quiser eu posso enviar-lhe um script Matlab que converte um valor de ponto flutuante em um ponto fixo de 2 de complemento de valor.

Se o que você precisa fazer é algo diferente por favor explique o que será a sua entrada e saída e para que serve.

Atenciosamente,

 
mendozaulises escreveu:

Primeiro de tudo, o que você quer dizer com a conversão de números reais para inteiros?

Você quer dizer que os representam se de ponto flutuante?

Se o que você precisa é de representar um número real em ponto fixo binário, então você precisa primeiro escolher quantos bits para a parte inteira e quanto para a parte fracionária.
No caso do intervalo [-1 1], supondo que você irá usar uma representação complemento de 2, você vai precisar de 2 bits para a parte inteira, se você usar só um pouco, do que o intervalo será [-1 0,99 ... ].

Se você quiser eu posso enviar-lhe um script Matlab que converte um valor de ponto flutuante em um ponto fixo de 2 de complemento de valor.Se o que você precisa fazer é algo diferente por favor explique o que será a sua entrada e saída e para que serve.Atenciosamente,
 
Não vejo nenhum problema nesse pântano.A menos que eu não sou mais uma vez compreender o que você precisa.
Para o multiplicador seria transparente se você usar números inteiros ou números de ponto fixo.Para os inteiros multiplicador seria apenas assinado.É você quem vai decidir a forma de representar os números.Se você vai usar números de 18-bit, que eu aconselho a usar o formato de 2,16 para o intervalo [-1 1].Por exemplo,
A = 11 1000 0000 0000 0000 = -0,5.
Take 2 complementam.
A = 00 1000 0000 0000 0000 = 2 ^ -1 0 0 ... 0 = 0,5

B = 01 0100 0000 0000 0000 = 2 ^ 0 2 ^ -2 = 1 0,25 = 1,25.

Como você pode ver, você sabe que o ponto decimal está localizado logo após o segundo bit (da esquerda para a direita) e ainda o multiplicador vai tomá-lo como número inteiro.

No caso da multiplicação do número resultante é A2.16 * B2.16 = C4.32, ou se você quiser vê-lo como este A18 * B18 = C36.
Se você quiser que o seu resultado a ser de 18 bits e você tem certeza que vai estar no intervalo [-1 1], e supondo que a esquerda é o bit MSB, você leva 33 downto 16 bits, e lá você vai ter o seu C2 ,16 número.

Se tiver dúvidas me envie um e-mail para mendozaulises (at) yahoo.com.

Também posso enviar-lhe um 18-bit código VHDL multiplicador.

atenciosamente,

UlisesAdicionado após 32 minutos:Se você não entender a aritmética de ponto fixo, você pode se referir a:

h ** p: / / www.edaboard.com/ftopic184688.html

 

Welcome to EDABoard.com

Sponsor

Back
Top