Aritmética problema divisor circuito .....

K

kart339

Guest
Olá ppl,
Eu estou projetando um bloco de lógica de combinações que um divisor de 6 bits é uma parte importante.Me deparei com esse problema quando eu codificado o divisor em Verilog.Aqui está o código ...

always @ (posedge clk) begin

if (RST) Div_Out = 0;

else if (highz) Div_Out = 6'bz;else Div_Out = IN1/IN2;end / / fim sempre

testbench:IN1 = 6'd4;IN2 = 6'd5;Tenho a solução como 0 e para aqueles casos em que IN1> IN2, fico com 1.Eu sou suposto a obter um número fracionário (como 0,5, 0,6 etc ...) como o resultado para usar no meu próximo bloco.Eu temporaritly resolvido esse problema usandoDiv_Out = IN1 * 10/IN2Eu recebo o meu resultado em 8 para 0,8 que eu ainda posso usar. (Como é lógico)

Mas, como é óbvio que vai ter sucesso na minha área, bem como o poder que se eu usar 6 bits multiplicador!Existe uma solução melhor do que alguém sabe ...... queira compartilhar suas informações.Vai ser muito grato!
Obrigado a todos!

Kart
 
Olá carro,
Por favor, dê uma olhada no Div_Out variável é declarada como real, porque se os registros não são declarados como real torna-se então a divisão de número inteiro.Por favor, também Relook em sua biblioteca que você requrie é um divisor de ponto flutuante ...Será que o seu apoio à biblioteca ..se não houver apoio, então você pode ter que desenvolver seus próprios!

 
Oi,
Do you want código HDL para ser synthesizable??Se não está aqui a
solução ....
Código:div (módulo

/ / Outputs

Div_Out,

/ / Entradas

CLK, RST, highz, IN1, IN2

);

input clk, rst, highz;

input [31:0] IN1, IN2;

output [31:0] Div_Out;

reg [31:0] Div_Out;

always @ (posedge clk) begin

if (RST)

Div_Out = 0;

else if highz ()

Div_Out = BZ ';

diferente

Div_Out = realtobits ($ bitstoreal (IN1) / $ bitstoreal (IN2));

end / / fim sempre

endmodule / / div
 
Obrigado pela sua atenção rapazes!
Infelizmente, o projeto é voltado para ser sintetizado como um ASIC.Então eu teria que usar código synthesizable só.Eu não acredito que o 'realtobits é synthesizable .... me corrija se eu estiver errado.

coz it's routed to another combinational logic module( a MAX module) in my top level unit.

E sim, ele tem que ser um divisor de ponto flutuante ..... acho que agora, Div_out é declarada como uma coz fio
é encaminhado para outro módulo de lógica combinacional (um módulo MAX) na minha unidade de nível superior.Como faço para declarar Div_out como "real" e ainda usá-lo como um fio?(Could u give me a sintaxe da instrução é?) E como faço para verificar se a minha biblioteca suporta operações de ponto flutuante?Semiconductorman .... poderia fazer o favor de esclarecer?Obrigado novamente!
Kart

 
Nenhum código Nand_gates não é synthesisable

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Triste" border="0" />

.... isso é só para a simulação (Ele colocou no topo do código).Alguns libararies tem macros que podem ser diretamente intantiated para operações de ponto flutuante muitos não ...Get it contato com os caras que deram a libarary ASIC e informá-los sobre o seu problema ..Se eles não têm qualquer macro, como então você tem que executar a função de si mesmo!U não pode usar o operador de dividir você está usando atualmente

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Triste" border="0" />
 
Yeah .....

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Triste" border="0" />

Na verdade, eu está fazendo isso como uma alternativa à codificação em Spice ... para salvar-me algum tempo.Eu estava tentando gerar um nível do portão esquema para todo o bloco de combinações e de transferência que a Hspice manualmente para que eu não tive que perder tempo projetando n otimizar cada uma das unidades constituintes, nesse bloco de combinações.Não antecipar esse problema ....

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="Triste" border="0" />

Outras idéias ..... sempre bem-vindos!

 
O DW não pode aplicar DIV.Você precisa desenvolver o algoritmo DIV por si mesmo.

 
Na verdade, eu estou agora pensando em usar o algoritmo SRT utilizado no processador P4.SeeMe como a única opção viável deixou para mim.Fazendo o trabalho de circuito que é outra coisa!

 
oi,

Eu acho que você pode estar familiarizado com o tht algoritmos estão disponíveis para o cálculo da divisão de forma eficaz por calculcating o inverso de b, b ^ -1 e, em seguida, multiplicá-lo com a.Acho que a multiplicação de ponto flutuante, u poderia realizar.Assim, se u poderia realizar a operação de encontrar a inversa utilizando o algoritmo, então u deve obter um algoritmo muito eficiente.tu o espaço necessário para o cálculo é um pouco mais ...there r 2 algoritmos que tenho visto para calcular a * b ^ -1.i tê-los como papel., vai tentar escanear e postar em um par de dias.ur se interessado em prosseguir caminhos que ..coz sua mais desafiadora e eficaz definitivamente.u poderia procurar o algoritmo BCH "...se u não estão cientes de que ...Lembro-me do algoritmo de expansão como Bill Hoover Cooke.espero que isso ajude.

@ membro

Gostaria de analisá-lo e publicá-la aqui em um dia de tempo!

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Sorrir" border="0" />/ cedance
Última edição por cedance em 07 Mar 2005 9:33, editado 1 vez no total

 
Arun Hi,
I will try googling ..... o algoritmo BCH Mas sim, eu seria muito grato se u poderia postar a cópia do algoritmo ou o nível do portão esquemático if u have it ...... me pouparia grande quantidade de tempo!Na verdade alguém me disse algo semelhante .... tentando encontrar o inverso de um número e uma alimentação que a PF multiplicador.Mas as implementações de alguns me deparei com um olhar para cima usado tabela que tinham 2 ^ n entradas para um operando bit.Assim, para um pouco 6, achei que simplesmente não vale a pena.Mas talvez u tem um algo melhor do que eu penso.Thanks man!
Kart

 
Você pode usar a solução de série: subtrair e turno, ele precisa de muitos ciclos
(restauração ou não restaurar)
ou você pode usar o método de Newton para obter solation de 1 / b

 
Isso seria impossível de ser bom o suficiente ..... estou apontando para um tempo de resposta de 10-12 ns.

 

Welcome to EDABoard.com

Sponsor

Back
Top