Dou aulas no primeiro curso de arquitetura de computadores de uma faculdade de artes liberais. O curso é obrigatório para os maiores e menores de ciência da computação. Não temos cursos de engenharia da computação, engenharia elétrica, outros equipamentos de hardware etc. Meu principal objetivo no curso é que os alunos entendam até o nível do portão como os computadores funcionam, que eu acredito que eles aprendem melhor através de um laboratório de hardware e não apenas através de um livro ( Computer Organization and DesignHennessy e Patterson). Meu objetivo secundário é estimulá-los sobre a arquitetura de computadores e aumentar sua empolgação com a ciência da computação. Prepará-los diretamente para a indústria não é um objetivo, embora motivá-los a estudar mais arquitetura de computadores. Geralmente, os alunos não têm experiência em construir nada ou em fazer um curso de laboratório em nível universitário. Normalmente, 10 a 15 alunos fazem o curso por semestre.
Eu tenho ministrado o curso desde 1998 de uma maneira semelhante a como fui ensinado arquitetura de computadores e eletrônica digital no final dos anos 80 no MIT: usando chips DIP TTL em placas de ensaio elétricas. Na primeira tarefa do laboratório de hardware, os alunos constroem um somador completo. Na metade do semestre, eles começaram a construir um computador simples com um conjunto de instruções de 8 bits. Para reduzir a fiação, forneço a eles um PCB com alguns dos componentes eletrônicos (dois flip-flops D, duas LS 181 ALUs de 4 bits conectadas para atuar como uma ALU de 8 bits e um buffer de três estados). No primeiro desses laboratórios, eles derivam os sinais de controle (muito simples) para os dois formatos de instrução e constroem o circuito, inserindo instruções nos interruptores e lendo os resultados das luzes. No segundo dos laboratórios, eles adicionam um contador de programa (2 LS163s) e uma EPROM (queminha pergunta original era sobre antes de mudar para como eu deveria ensinar arquitetura de introdução). No laboratório final, eles adicionam uma instrução de ramificação condicional. Enquanto os alunos passam bastante tempo conectando e depurando, sinto que é aí que ocorre grande parte do aprendizado, e os alunos saem com uma sensação real de realização.
As pessoas deste fórum me disseram, porém, que eu deveria mudar para FPGAs, com os quais não trabalhei antes. Sou engenheiro de software, não engenheiro de computação e agora estou fora da escola há um tempo, mas sou capaz de aprender. Eu não seria capaz de obter muito dinheiro ( talvez alguns milhares de dólares) para substituir nossos treinadores digitais existentes. Nós temos um único analisador lógico.
Dados meus objetivos e restrições, os EEs recomendariam que eu seguisse minha abordagem atual de mudar para uma baseada em FPGAs? Neste último caso, você pode me dar alguma indicação de materiais com os quais me educar?
Conforme solicitado, aqui está um link para o currículo e as atribuições do laboratório .
Adição: Sim, também é um curso de lógica digital. Quando cheguei à minha faculdade, os alunos foram obrigados a fazer um semestre de cada um de arquitetura de computadores e lógica digital, e eu os combinei em um único semestre. Claro, isso é uma afirmação sobre o passado, não o futuro.
fonte
Respostas:
Dados os objetivos da turma, acho que a abordagem TTL é boa e digo isso como um "cara do FPGA". Os FPGAs são um mar de lógica e você pode fazer todo tipo de coisa divertida com eles, mas há muito que é humanamente possível fazer em um semestre.
Olhando para o seu currículo, sua turma é uma mistura dos cursos de design lógico e "estruturas de máquinas" que fiz na graduação. (Além disso, é para os graduandos de CS. Sou a favor dos majores de CS que precisam enfrentar hardware real - deixá-los trabalhar com código de escrita parece um passo atrás.) são divididos, não vejo nenhum benefício real em ter os alunos fazendo as coisas em código versus manualmente. Fazer HDL significa aprender o HDL, aprender a escrever HDL sintetizável e aprender o IDE. Isso é muito mais complexidade conceitual e re-abstração. Além disso, você precisa lidar com problemas de software.
Geralmente, o objetivo de um curso que usa FPGAs é praticar a criação de uma lógica útil - útil para conversar com periféricos, comunicações seriais, RAM, geradores de vídeo, etc. Esse é um conhecimento valioso, mas parece muito fora do comum. escopo do seu curso. Aulas mais avançadas em arquitetura de computadores fazem com que os alunos implementem CPUs sofisticadas em FPGAs, mas, novamente, isso parece estar fora do escopo do seu curso.
No mínimo, dedicaria uma palestra aos FPGAs. Execute algumas demos com uma placa de desenvolvimento e mostre o fluxo de trabalho. Desde que você está no Mills, talvez você poderia entrar em contato com o pessoal da Berkeley que dirigem CS 150 / 152 e vão ver como eles fazem as coisas.
fonte
Eu concordo muito com o Photon. Há muitas vantagens em usar FPGAs. Aqui estão alguns pontos interessantes a considerar:
1) Plataforma fácil para experimentar um projeto de portão muito rapidamente, sem horas ou potencialmente dias de trabalho para conectar as coisas. Os FPGAs permitem projetos digitais potencialmente muito complexos com bastante facilidade. (MUITO mais teoria, menos trabalho ocupado)
2) Partes significativas do trabalho de um aluno podem ser feitas em simulação fora do laboratório.
3) O ambiente do software é gratuito (geralmente incluindo o simulador).
4) Existem muitas plataformas FPGA relativamente baratas. Preços acadêmicos devem ajudar. Algo como o Terasic DE0-Nano custa US $ 59 por um kit completo (e parece muito bom). $ 50-60 parece ser o intervalo por placa que você estaria olhando.
5) Há muitas coisas muito legais para fazer com FPGAs. Existem sites como o OpenCores que fornecem centenas de módulos pré-criados para uso com FPGAs. Há o FPGA4Fun , que possui muitos tutoriais e projetos. Para puro entretenimento, o FPGA Arcade é dedicado à criação de jogos com FPGAs. Dependendo do que você configurou nas placas FPGA, isso pode resultar em uma aula realmente divertida.
6) Algumas placas possuem classes de design digital aparentemente prontas para elas: Introdução ao Design Digital (aviso: download grande) usando uma placa Xilinx Spartan 3E um pouco antiga. (Embora esse seja baseado no ActiveHDL, eu pessoalmente prefiro um VHDL ou Verilog mais padrão). Os principais fornecedores de FPGA também têm programas universitários: Xilinx University Program , Altera University Program , Lattice University Program .
7) O fluxo de trabalho está muito mais próximo de como o trabalho de design profissional acontece atualmente. O conhecimento de trabalho no desenvolvimento de FPGA é uma habilidade imediatamente comercializável.
fonte
Acho que hoje em dia, se você está lidando com coisas no nível do portão, não está trabalhando na área de "arquitetura de computadores", está realmente apenas fazendo eletrônica digital básica. Além disso, você não pode ensinar tudo o que há para saber, desde eletrônica digital no nível de porta até algoritmos de cache, arquiteturas de computação paralela, SIMD, redes, etc, etc em um único semestre.
Então, tudo se resume ao que você deseja ensinar. Se você deseja se concentrar na eletrônica digital no nível do portão, trabalhar com chips no nível do portão fornecerá aos alunos algo prático para trabalhar e um entendimento mais forte desse material. Mas se você deseja ensinar arquitetura de computadores, eles provavelmente precisam estar trabalhando com um nível de abstração muito mais alto do que as portas AND e OR.
No mínimo, você provavelmente deve a si mesmo aprender um HDL e implementar um ou dois projetos baseados em FPGA, para que você (como especialista em educação aqui) possa avaliar como essas habilidades se encaixariam nos seus objetivos para os seus alunos. Espero que outras respostas dêem muitas dicas para materiais de baixo custo e sem custos, que permitirão que você acelere o design do FPGA em pouco tempo. (Dica: Xilinx e Altera oferecem ferramentas e simuladores de design de software livre, além de toneladas de notas de aplicação e outros materiais de ensino).
fonte
Um benefício do uso do TTL seria que, para os circuitos muito elementares, os detalhes do HDL meio que mascaravam o circuito real, e a maioria dos estudantes simplesmente passava a maior parte do tempo escrevendo e aprendendo HDL. Eu acho que TTLs para a primeira parte e, em seguida, FPGA para a parte da arquitetura seria melhor, já que é difícil criar um sistema programável com TTLs.
fonte
Apreciando completamente a importância de alguma experiência prática com montagem de circuitos físicos, acho que também é importante reconhecer que você não pode cobrir práticas de computação modernas sem algum nível de algo que "parece" simulação ou abstração oculta demais; o melhor que você pode fazer é tentar fazer algum trabalho em cada nível antes de adicionar abstração suficiente para tornar plausível a tentativa do próximo nível de complexidade. O curso do MIT ao qual você se refere, por exemplo, começou a fazer uma simulação de software de uma máquina RISC de 32 bits rodando em cima da máquina microprogramada de 8 bits de chips e módulos que foi fisicamente "construída". Nesse ponto, eu diria que é mais eficaz implementar essa máquina em um FPGA (algo que eu suspeito que eles provavelmente tenham feito desde então).
À luz disso, minha tentação seria tentar incluir tanto uma fase de chips e fios no início quanto uma fase de FPGA posteriormente no curso. Como você já possui os kits da placa de ensaio, você pode manter os primeiros laboratórios e usar uma placa FPGA ou talvez um módulo FPGA compatível com a placa para os laboratórios posteriores. Seria possível construir uma máquina híbrida em que o FPGA dependesse de alguma circunferência externa que implementasse parte do processador, mas seria muito artificial - apenas trocar tecnologias inteiramente no ponto em que a complexidade excede uma peça da placa de ensaio pode ser mais realista.
Você deve poder adquirir placas FPGA independentes existentes por menos de US $ 100 / ea a preços educacionais.
Outra opção, poderia ser construir o seu próprio como parte da classe, talvez criando uma interface de carregamento serial em FPGA como a primeira parte do projeto. Uma boa vantagem disso é que o custo seria baixo o suficiente para que os alunos pudessem manter seus conselhos em vez de entregá-los no final do semestre, o que, esperançosamente, resultaria em interesse e conscientização contínuos entre alguns.
fonte
Eu acho que a abordagem correta seria começar com a construção de algumas portas dos relés, que são fáceis de ver e entender, mas obviamente são muito lentas e com muita energia para aplicações modernas. Em seguida, mostre como os transistores podem ser usados para fazer a mesma coisa de maneira mais compacta, rápida e eficiente, e os portões empacotados [por exemplo, "quad nand"] podem fazê-lo ainda melhor. Quando você chegar a esse ponto, sugiro que você mostre como criar coisas como multiplexadores e trincas fora dos portões e como estruturas um pouco maiores podem ser construídas com multiplexes, trincos, etc. Ninguém vai hoje em dia, construir um computador soldando fisicamente inúmeros milhares de transistores discretos, mas a operação interna de um computador é muito parecida com a dos transistores, exceto que tudo é muito menor.
Um grande benefício que eu acho que os alunos receberiam com esse tipo de instrução é entender por que muitas coisas funcionam da mesma maneira que elas. Por exemplo, se alguém estivesse "simulando" um conjunto de instruções que não precisava ter nenhuma realização física prática, não haveria necessidade de uma instrução de "carregar memória" executar três ciclos, enquanto a maioria das outras instruções executava um. Algumas coisas podem ser entendidas sem descer ao nível do transistor, mas outras não (por exemplo, o significado de entradas síncronas versus assíncronas).
fonte