Вот что я собрал, чтобы помочь понять разницу
public interface ICovariant<out T> { }
public interface IContravariant<in T> { }
public class Covariant<T> : ICovariant<T> { }
public class Contravariant<T> : IContravariant<T> { }
public class Fruit { }
public class Apple : Fruit { }
public class TheInsAndOuts
{
public void Covariance()
{
ICovariant<Fruit> fruit = new Covariant<Fruit>();
ICovariant<Apple> apple = new Covariant<Apple>();
Covariant(fruit);
Covariant(apple); //apple is being upcasted to fruit, without the out keyword this will not compile
}
public void Contravariance()
{
IContravariant<Fruit> fruit = new Contravariant<Fruit>();
IContravariant<Apple> apple = new Contravariant<Apple>();
Contravariant(fruit); //fruit is being downcasted to apple, without the in keyword this will not compile
Contravariant(apple);
}
public void Covariant(ICovariant<Fruit> fruit) { }
public void Contravariant(IContravariant<Apple> apple) { }
}
tldr
ICovariant<Fruit> apple = new Covariant<Apple>(); //because it's covariant
IContravariant<Apple> fruit = new Contravariant<Fruit>(); //because it's contravariant
Посмотрите здесь для хорошей книги Wiki. У меня была некоторая курсовая работа, которую я записал, когда я учил Электронного Инженера, но я не мог найти его вокруг. Когда я преподавал, большинство студентов было радо использовать схематические инструменты получения в пакете Основы Xilinx. Они перешли на ISE и WebPACK теперь. Можно загрузить WebPack бесплатно, который полезен, и он имеет схематическое получение и моделирование в нем.
, Если Вы действительно хотите блистать, изучите VHDL, или Verilog (VHDL, кажется, более распространен, где я работал, но это - только небольшое поверхностное знание мест), и кодируйте дизайн, а не введите его через GUI.
, Если Вы знаете ЧТО-НИБУДЬ вообще о дизайне цифровой логики (и некоторый HDL) я считаю, что у Вас может быть несколько функциональное 8-разрядное моделирование микропроцессора в VHDL приблизительно через 2 дня. Вы не собираетесь создавать что-либо ослепительно быстрое или чрезвычайно мощный в то время, но это - хорошая начальная точка для роста от. Если необходимо узнать о цифровом дизайне, факторе через несколько дней, чтобы изучить, как инструменты работают и моделируют некоторые схемы основной логики прежде, чем переместиться на дизайн.
Начинают изучать основы цифровых систем, и как создать двоичный сумматор. Движение к созданию ALU для обработки дополнения, вычитания, и, или, xor, и т.д. и затем секвенсер, чтобы прочитать коды операций из RAM и предоставить их к модули выполнения.
можно стать необычными с дизайном системы команд, но я рекомендовал бы начать ДЕЙСТВИТЕЛЬНО простой, пока у Вас нет головы вокруг того, что продолжается, затем выведите его и запуститесь снова с чего-то более сложного.
, Как только у Вас есть дизайн, моделирующий приятно Вас, может измерить его сложность и купить устройство для удовлетворения. Необходимо посмотреть на систему разработки для семейства устройства, которое Вы выбрали. Выберите устройство, более крупное, чем, в чем Вы нуждаетесь для разработки, потому что хорошо быть в состоянии добавить дополнительный инструментарий для отладки его, когда это будет работать, и Вы почти наверняка не будете оптимизировать свой дизайн на ранних стадиях получения его на устройстве.
РЕДАКТИРОВАНИЕ: у Colin Mackenzie есть хорошее учебное руководство о дизайне uC и некоторых платах FPGA, а также небольшом количестве другого материала.
Для игры с ненавязчивыми микропроцессорами мне нравится спартанские 3 платы Начинающего от Digilent просто, потому что он имеет 1M статической RAM. SDRAM и RAM DDR более тверды начаться, Вы знаете.
leds, переключатели и простой последовательный интерфейс плюс отладить и связаться.
, Поскольку кто-то уже указал, , OpenCores.org является хорошим местом для нахождения рабочих примеров. Я использовал Плазменный uC для написания некоторых работ в то время как на университете.
Можно хотеть взглянуть приблизительно OpenCores.org , сайт "штамповочного пресса" для разработки ядра процессора IP с открытым исходным кодом. Кроме того, считайте получение себя макетной платой как один из этих для игры вокруг с.
Большая часть экосистемы инструментов вращает приблизительно VHDL, хотя Avalda работает над инструментами для компиляции F# для FPGAs.
После поиска некоторых очень полезных ссылок всеми Вами я столкнулся этот курс Викиверситета.
Одно из первых предложений, "Вы когда-либо думали для создания собственного микропроцессора?"
Я видел учебник, как только это ступило посредством создания машины от микросхем TTL. Это имело ту же систему команд как PDP-8, который является очень - и я имею в виду очень - простой, таким образом, фактическую архитектуру машины легко реализовать таким образом.
PDP-8 FAQ упоминает книгу: " Искусство Цифрового Дизайна, " второй выпуск, Franklin Prosser и David Winkel (Prentice-Hall, 1987, ISBN 0-13-046780-4). Это также упоминает людей, реализующих его в FPGA.
, Учитывая экстремальную простоту этой архитектуры ЦП и доступность PDP-8 кодируют или ссылочные реализации, с которыми это могла бы быть хорошая начальная точка для нагреваний.
, С другой стороны, мое знакомство реализовало ползунок (сокращенный ARM) на FPGA как университетский проект, выполненный неким Steve Furber (знаменитый выпускник Acorn). Учитывая, что это могло быть сжато в формат, достаточно маленький для университетского проекта, это могло бы также быть хорошее начало.
Вам нужен большой fpga для небольшого mcu.
Вам нужен fpga с корректными аппаратными блоками при необходимости в вещах как AD.
Вам нужно мягкое ядро для помещения в fpga.
, Но как насчет просто играть вокруг с нормальным MCU перед этим проектом, таким образом, Вы отчасти знаете, куда Вы идете? Как насчет некоторого AVR:s от Atmel.
Микроконтроллер может быть столь же простым как ROM (instruction*2^x + (фаза часов) адрес, выводы являются сигналами управления, и Вы хороши для движения). Или это может быть комплекс, изматывают зверя тремя руками, и предсказание ветвлений поддерживают аппаратные средства.
можно ли предоставить больше подробную информацию о стремлениях?
Можно получить бесплатные образцы рис. микро контроллеры на этом сайте. В последний раз я знал, Вы не должны даже платить поставку.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=64
Xilinx имеет программный контроллер MicroBlaze и PicoBlaze для своих ПЛИС. Последний является бесплатным, в то время как, IIRC, Microblaze должен быть оплачен.
Как следует из названия, PicoBlaze - это небольшой процессор, который имеет свои ограничения, но OTOH достаточно компактен, чтобы работать на CPLD . В любом случае, хороший процессор для начала.
Pablo Bleyer имеет PicoBlaze-совместимый PacoBlaze . PacoBlaze был написан на Verilog (который, как сказал Адам, менее распространен, чем VHDL).