Como você lidaria com um caso especial neste sistema lógico digital?
-
20-08-2019 - |
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
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.