Pergunta

Eu sempre meio que queria fazer o meu próprio microprocessador .. Eu li Como posso fazer o meu próprio microcontrolador? .

Eu tentei várias vezes para aprender algumas Verilog e VHDL. Mas para a vida de mim eu não posso colocar minha cabeça em torno dos estilos de linguagem. Eu venho de um C / C ++ / C # fundo e têm limpou alguns (com sucesso) com a realização de programação functionalish com Ruby.

Alguém pode sugerir um livro ou recurso on-line para o ensino de uma língua HDL a partir do zero (para que eu possa desaprender meu caminho processual de pensar)

Além disso, estou tendo problemas para obter minha cabeça em torno exatamente como simular um programa de HDL. Não há nada como a impressão ou coisas no hardware, então o que é a melhor maneira de testar programas sem um FPGA (eu estou indo para um fim daqueles em algum momento embora!). Como exatamente simulando que funciona?

Basicamente, eu só estou precisando de alguém para me ajudar a obter minha cabeça em torno HDL e sua simulação.

Foi útil?

Solução

Lembre-se, HDL foram destinados a hardware modelo. Com hardware tudo acontece ao mesmo tempo. Por hardware, quero dizer um conjunto de portas lógicas ligadas às entradas e às saídas de outras portas lógicas de alguma forma. Este é essencialmente o que um FPGA ou um ASIC é (em um FPGA essas conexões são programáveis). Wiggle uma entrada e o efeito cascata através da cadeia de portas lógicas -. Pensar de cada porta lógica como um pequeno processador que está constantemente avaliando-o de entradas

Assim, em um nível de HDL, a primeira coisa que você precisa considerar é que todas as atribuições estão acontecendo ao mesmo tempo. O único lugar as coisas acontecem no sentido "normal" (uma declaração após outro, como em uma linguagem de programação regular) está dentro de um bloco de processo (em VHDL, ou um sempre bloquear em Verilog). Mas então você tem que perceber que todos os blocos do processo (ou sempre bloqueia em Verilog) também estão sendo executadas simultaneamente.

HDLs estão apenas tentando modelar a concorrência de hardware.

Quanto livros que tentam HDLs ensinar a desenvolvedores de software ... Eu não acho que há qualquer. A maioria são destinadas a engenheiros de hardware.

Você mencionou que você tenha feito alguma programação Ruby. Se você quiser jogar com um HDL escrito em Ruby você pode experimentar rHDL: http://rhdl.rubyforge.org/ os conceitos básicos de HDL estão lá e ele se parece muito com VHDL, mas é o ruby ??para que você possa experimentar um pouco mais com as entranhas. Você pode escrever modelos e, em seguida, simular-los. Há alguns exemplos incluídos.

Outras dicas

A depuração é feita com o simulador e seu visualizador de forma de onda - você pode ver o que todos os seus componentes internos estão fazendo ao longo do tempo. Além disso, com Modelsim você também pode fazer software-como pontos de interrupção dentro processos.

Você pode imprimir as coisas com VHDL usando a instrução "relatório", mas você tem que fazer sua formatação de uma forma muito não-SW:

report "The value is not " & integer'image(some_integer_variable);

Para a impressão um pouco mais fácil, use o textio pacote .

Outra dica - lotes de código lá fora, tem use ieee.std_logic_arith.all; nele. Essa biblioteca é não-padrão (apesar do apelido IEEE), o uso ieee.numeric_std.all vez.

Iniciar simples - criar um contador que aumenta em um cada vez que os carrapatos do relógio (usar o idioma if rising_edge(clk) then). Quando o contador chega a um valor particular, alternar um sinal.

Criar um testbench para simulá-lo, o que significa, basicamente, apenas fazendo o sinal CLK go '0', '1', '0', '1'.

Uma maneira fácil de entender é o seguinte:

process:
begin
    clk <= '0';
    wait for 5 ns;
    clk <= '1'; 
    wait for 5 ns;
end process;

Executar o sim, observar o seu contador de ir para cima, e a alternância de sinal de alternância. Se você fizer seu contador grande o suficiente, então você pode construir um FPGA e assistir um flash LED on e off por fiação até que o sinal de alternância para um pino de LED.

Esse é o FPGA equivalente a "Olá mundo!"

Para depuração ofertas Verilog printf como tarefas do sistema como $ tela ou US $ monitor. Estes são, naturalmente, não synthesizable, mas cada simulador deve entendê-los. Depuração, em seguida, é por um lado feito, assim como SW depuração, imprimindo valores de sinal e tudo o mais para o console usando o já mencionado $ diplay e outras coisas. E por outro lado por encarando sinal de onda formas até encontrar o local doente. Para essas coisas que você nem mesmo precisa de um FPGA, um bom simulador é tudo que você precisa. Mas ter um FPGA para fazer algum LEDs piscar é sempre bom:)

Para a simulação, você deve ter um olhar sobre Modelsim. Se você estiver em janelas há uma edição de estudante disponível gratuitamente.
http://www.model.com/content/modelsim- pe-aluno-edição-HDL-simulação

Outra opção é Xilinx' ISE Web-Pack. Isso funciona mesmo em Linux e inclui o fluxo de FPGA completa. http://www.xilinx.com/tools/webpack.htm
Mas eu recomendo Modelsim para a simulação.

Alguns pontos de partida que eu tenho em mãos são:
http://www.asic-world.com/
http://www.doulos.com/knowhow/verilog_designers_guide/

A minha resposta poderia ser anos de atraso, mas isso é para os futuros espectadores que possam ter a mesma consulta.

Eu também veio de um fundo # C ++ / C. Minha resposta únicas preocupações com Verilog HDL e não VHDL embora. Atualmente estou fazendo um curso este termo e aqui estão os livros que me ajudaram a entender melhor Verilog:

Você pode encontrar um monte de livros aqui conforme listado em ASIC-mundo site.

Como skorgon tinha respondido, você pode usar Xilinx ISE para a simulação. É o mais próximo de Visual Studio com C ++ / C # como a Verilog. Mas para uma sensação primitiva (sem IDE), você pode querer tentar iVerilog ou Icarus Verilog . É o utilizado em nosso curso. Veja como executar arquivos Verilog usando iVerilog:

Digite o seu código em um editor de texto, salvar como .vl dentro da pasta bin de iVerilog. No prompt de comando, vá para a pasta bin. Em seguida, digite o seguinte:

iverilog -o <name of exe file you want for your .vl file> <your .vl file>
vvp <name of exe file>

Exemplo:

iverilog -o samp sample.vl
vvp samp

Espero que isso ajude!

Às vezes uma necessidade de imprimir o nome da instância. Isto é útil se muitos instância do mesmo componente são usados ??em um projeto: " ... Embora seja simples na VERILOG (% m na função de sistema de exibição), em VHDL um pouco mais a escrita de código é necessária. $ Exibição ( "DBG nome instância% m em% d", $ tempo); Um exemplo como imprimir um nome de instância no systemc também está disponível neste site.

A importância de tais informações de depuração é quando um projeto contém muitas instâncias do mesmo componente.

Primeiro texto biblioteca IO tem que ser chamado e variável linha deve ser declarado. Por favor, consulte imprimir exemplo, para ver os detalhes.

Em seguida, você tem que escolher entre duas opções: Uma é: nome da instância só na string de depuração ea outra opção dá mais informação, tais como nomes de entrada e arquitetura ..." http://bknpk.ddns.net/my_web/MiscellaneousHW/vhdl_path_name_print.html

Se você é forte em programação C, você pode aprender qualquer outra linguagem de programação muito facilmente. Descrição do hardware línguas não são muito diferentes. Mas você deve saber o básico de componentes de hardware usados. Por exemplo, o projeto de um completa víbora é muito simples se você sabe quais são as entradas e saídas do somador completo. Além disso, você deve saber a relação entre entradas e saídas. O pdf pode ser útil para um iniciante.

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