В настоящее время я участвую в университетском проекте по внедрению процессора существующего набора инструкций. Идея состоит в том, что к концу проекта я смогу синтезировать этот проект и запустить его в FPGA. Пока все идет хорошо, я начал реализовывать дизайн в Verilog HDL несколько дней назад и получил очень простую рабочую версию. Теперь проблема: я связался с некоторыми людьми, которые годами занимались разработкой оборудования, и они предложили, прежде чем я продолжу, я должен перейти к использованию SystemC для реализации. Я очень растерялся, потому что это была моя мысль:
Verilog -> Поскольку язык HDL специально предназначен для аппаратного дизайна. Имеет некоторые уровни абстракции, такие как структурный и поведенческий Verilog, но это очень аккуратная форма задания RTL проекта. Вы можете определенно синтезировать его, используя набор инструментов, в зависимости от выбранной вами ПЛИС (в моем случае я использую платы Xilinx Vivado 2014 и Zynq). С другой стороны, обычный Verilog не предлагает достаточно абстракций для проверки, и поэтому у вас есть такие вещи, как System Verilog.
SystemC -> Это библиотека классов C ++, которая эффективно вводит понятие времени в C ++ и позволяет вам выполнять моделирование на основе событий. Очевидно, что он намного более высокоуровневый, чем любой HDL, и здесь все может быть реализовано намного быстрее. Это делает его очень хорошим инструментом для таких вещей, как проверка и даже внедрение симуляторов, так что люди могут начать разрабатывать драйверы и вещи для микросхемы еще до того, как она будет изготовлена. Очевидно, есть также подмножество SystemC, которое можно синтезировать (я думаю, что даже Xilinx Vivado может сделать это), и в некоторых случаях это позволяет использовать SystemC для проектирования очень больших систем, где удобен более высокий уровень абстракции.
Итак, мои вопросы:
- Правильны ли эти представления о том, какие systemC и Verilog (или языки HDL, если хотите)?
- Когда я должен использовать SystemC и когда Verilog?
- Мне говорят, что даже в Verilog использование большого количества поведенческого кода может быть немного проблематичным в критических разделах реализации, потому что вы в основном даете инструменту синтеза гораздо меньше ограничений на то, как его синтезировать. С более высоким уровнем абстракции это не будет проблемой? то есть, если я использую systemC, у меня может получиться очень медленный, энергоемкий, большой дизайн ...
- Человек, предложивший SystemC, упомянул, что, похоже, я занимаюсь «архитектурным исследованием», и поэтому он предпочел бы Verilog. Что именно это означает? У меня сложилось впечатление, что архитектура обычно относится к набору команд, а микроархитектура - к реализации набора инструкций (поэтому микроархитектура - это реальный RTL, который выполняет инструкции). Значит, архитектурное исследование означает, что он думает, что я внедряю процессор, чтобы увидеть, насколько выполним набор команд?
- Он сказал, что аргумент в пользу использования SystemC заключается в том, что это намного проще, потому что это более высокий уровень абстракции, чем HDL. Он также утверждал, что было легче определить правильные сроки проектирования. Насколько это правда?
Помощь будет принята с благодарностью, я немного запутался и затрудняюсь получить четкую информацию об этом в Интернете. Спасибо!