Pergunta

Publiquei este diagrama lógico digital como um responder para outra pergunta sobre stackoverflow.Descreve um sistema lógico que será codificado em Verilog ou VHDL e eventualmente implementado em um FPGA.

texto alternativo http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg

As caixas numeradas no diagrama representam bits em um campo.Cada campo tem K bits, e os bits para atual e mascarar será fornecido por um sistema de computador (usando um registro travado ou equivalente).Os pedaços em próximo será lido de volta no mesmo sistema de computador.

A solução que postei funciona desde que haja pelo menos um bit definido no mascarar campo, e há exatamente um bit definido no atual campo de bits.A ideia é que o próximo campo de bits se tornará o atual campo de bits após o sistema de computador ter executado alguma tarefa (uma operação de agendamento, na pergunta original).

Então, minha pergunta é esta:Como você modificaria este sistema para que ele lide adequadamente com o caso especial em que o atual campo de bits é todo zero (nenhum bit definido)? Tal como está, se todos os bits em atual são zero, a saída também será zero, não importa quais os bits em mascarar estão definidos para.

Idealmente, se atual são todos zeros, o bit definido mais baixo em mascarar deve ser definido em próximo.O sistema também deve permanecer escalável para qualquer número de bits (K) sem a necessidade de adicionar exponencialmente mais portas lógicas.O espírito da questão original era encontrar uma solução que fosse simples de implementar para qualquer número de bits.

Veja também: esta questão do stackoverflow

Foi útil?

Solução

Para mim, eu diria ao usuário do FPGA que ele deve ter um dos bits definido como 1 na entrada.

No entanto, se essa não for sua solução preferida, o que há de errado com a ideia de pré-alimentar todas as entradas atuais inicialmente em uma grande porta NOR (de modo que a saída seja verdadeira somente quando todas as entradas forem falsas).Todas as linhas atuais também continuam até suas portas AND, com a exceção de que Current[1] recebe OR com a saída de nossa porta NOR antes de entrar na porta AND.

Dessa forma, Current[1] seria verdadeiro ao entrar na porta AND, se todas as Currents fossem falsas.

Tenha em mente que eu entendo álgebra booleana, mas nunca trabalhei em hardware bruto - acho que você precisará armazenar todos os sinais de entrada nas portas AND para garantir o tempo correto, mas suspeito que você saberá disso melhor do que EU.

O diagrama a seguir é deixado caso o SO corrija seu código/pré-blocos - a atualização mais recente do SO parece tê-los preenchido (deixando-os proporcionais, e não com largura fixa, fonte).De qualquer forma, o diagrama gráfico do eJames é melhor.

Aqui está meu diagrama, um pouco menos elegante que o seu :-):

               +-------------------+
               |                   |
               |     +----         |
Current[1]-----+------\   \        |
                       |NOR|o--+   |
Current[2-k]---+------/   /    |   |
               |     +----     |   |
               |              +\   /+
               |              | \_/ |
             +---+            |  OR |
              \ /Buffer        \   /
               +                ---
               |                 |
             +---+             +---+
             |2-k|             | 1 |    <- These signals feed 
             +---+             +---+       into your AND gates.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top